blob: eff790004e7cb0be2cf3511fa14c1043927de5f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
Feature: Compile C code into Ruby extensions.
In order to automate compilation process.
As a Gem developer.
I want rake tasks compile source code for me.
Scenario: compile single extension
Given a safe project directory
And a extension named 'extension_one'
And 'tmp' folder is deleted
When rake task 'compile' is invoked
Then rake task 'compile' succeeded
And binary extension 'extension_one' do exist in 'lib'
And 'tmp' folder is created
Scenario: compile an extension with extra options
Given a safe project directory
And a extension named 'extension_one'
And 'tmp' folder is deleted
When rake task 'compile -- --with-opt-dir=/opt/local' is invoked
Then rake task 'compile -- --with-opt-dir=/opt/local' succeeded
And output of rake task 'compile -- --with-opt-dir=/opt/local' contains /with-opt-dir/
Scenario: not recompile unmodified extension
Given a safe project directory
And a extension named 'extension_one'
And I've already successfully executed rake task 'compile'
And not changed any file since
When rake task 'compile' is invoked
Then rake task 'compile' succeeded
And output of rake task 'compile' do not contain /gcc|cl/
Scenario: recompile extension when source is modified
Given a safe project directory
And a extension named 'extension_one'
And I've already successfully executed rake task 'compile'
When touching 'source.c' file of extension 'extension_one'
And rake task 'compile' is invoked
Then rake task 'compile' succeeded
And output of rake task 'compile' contains /extension_one/
Scenario: compile multiple extensions
Given a safe project directory
And a extension named 'extension_one'
And a extension named 'extension_two'
And 'tmp' folder is deleted
When rake task 'compile' is invoked
Then rake task 'compile' succeeded
And binary extension 'extension_one' do exist in 'lib'
And binary extension 'extension_two' do exist in 'lib'
And 'tmp' folder is created
Scenario: compile one extension instead of all present
Given a safe project directory
And a extension named 'extension_one'
And a extension named 'extension_two'
When rake task 'compile:extension_one' is invoked
Then rake task 'compile:extension_one' succeeded
And output of rake task 'compile:extension_one' do not contain /extension_two/
And binary extension 'extension_one' do exist in 'lib'
And binary extension 'extension_two' do not exist in 'lib'
Scenario: removing temporary files
Given a safe project directory
And a extension named 'extension_one'
And I've already successfully executed rake task 'compile'
When rake task 'clean' is invoked
Then rake task 'clean' succeeded
And binary extension 'extension_one' do exist in 'lib'
And no left over from 'extension_one' remains in 'tmp'
Scenario: clobbering binary and temporary files
Given a safe project directory
And a extension named 'extension_one'
And I've already successfully executed rake task 'compile'
When rake task 'clobber' is invoked
Then rake task 'clobber' succeeded
And binary extension 'extension_one' do not exist in 'lib'
And 'tmp' folder do not exist
|