summaryrefslogtreecommitdiff
path: root/features/compile.feature
blob: c7e5ae2a6f146edce34e74aec5c3e60809629ba6 (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
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 scaffold code for extension 'extension_one'
    And 'tmp' folder is deleted
    When rake task 'compile' is invoked
    And rake task 'compile' succeeded
    Then binary extension 'extension_one' do exist in 'lib'
    And 'tmp' folder is created

  Scenario: Not recompile unmodified extension
    Given a safe project directory
    And scaffold code for extension 'extension_one'
    And binary extension 'extension_one' do exist in 'lib'
    And intermediate files for extension 'extension_one' do exist in 'tmp'
    When rake task 'compile' is invoked
    And rake task 'compile' succeeded
    Then output of rake task 'compile' does not match /extension_one/

  Scenario: recompile extension when source is modified
    Given a safe project directory
    And scaffold code for extension 'extension_one'
    And binary extension 'extension_one' do exist in 'lib'
    And intermediate files for extension 'extension_one' do exist in 'tmp'
    When touching 'source.c' file of extension 'extension_one'
    And rake task 'compile' is invoked
    And rake task 'compile' succeeded
    Then output of rake task 'compile' does match /extension_one/

  Scenario: Compile multiple extensions
    Given a safe project directory
    And scaffold code for extension 'extension_one'
    And scaffold code for extension 'extension_two'
    And 'tmp' folder is deleted
    When rake task 'compile' is invoked
    And rake task 'compile' succeeded
    Then 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 scaffold code for extension 'extension_one'
    And scaffold code for extension 'extension_two'
    When rake task 'compile:extension_one' is invoked
    And rake task 'compile:extension_one' succeeded
    Then output of rake task 'compile:extension_one' does not match /extension_two/
    And binary extension 'extension_one' must exist in 'lib'
    And binary extension 'extension_two' must not exist in 'lib'