sismic icon indicating copy to clipboard operation
sismic copied to clipboard

test_bdd failures when behave is bumped to 1.2.7.dev6

Open booxter opened this issue 1 year ago • 6 comments

============================= test session starts ==============================
platform darwin -- Python 3.12.8, pytest-8.3.3, pluggy-1.5.0
rootdir: /private/tmp/nix-build-python3.12-sismic-1.6.8.drv-0/source
plugins: mock-3.14.0
collected 345 items / 12 deselected / 333 selected                             

tests/test_bdd.py ......FFFFF...................                         [  9%]
tests/test_code.py .............X                                        [ 13%]
tests/test_contract.py ..............                                    [ 17%]
tests/test_examples.py ...............                                   [ 21%]
tests/test_interpreter.py .............................................. [ 35%]
...............                                                          [ 40%]
tests/test_io.py ....................................................... [ 56%]
..........................................................               [ 74%]
tests/test_model.py .................................................... [ 89%]
...........                                                              [ 93%]
tests/test_property.py ..............                                    [ 97%]
tests/test_runner.py .........                                           [100%]

=================================== FAILURES ===================================
_____________ TestMicrowave.test_microwave_with_steps[no contract] _____________

self = <tests.test_bdd.TestMicrowave object at 0x104d61070>
microwave = Interpreter(Statechart('Microwave controller'))

    def test_microwave_with_steps(self, microwave):
        features = ['cooking_human', 'lighting_human', 'safety_human']
    
>       assert 0 == execute_bdd(
            microwave.statechart,
            [os.path.join('docs', 'examples', 'microwave', f+'.feature') for f in features],
            step_filepaths=[os.path.join('docs', 'examples', 'microwave', 'steps.py')],
        )
E       AssertionError: assert 0 == 1
E        +  where 1 = execute_bdd(Statechart('Microwave controller'), ['docs/examples/microwave/cooking_human.feature', 'docs/examples/microwave/lighting_human.feature', 'docs/exam
ples/microwave/safety_human.feature'], step_filepaths=['docs/examples/microwave/steps.py'])
E        +    where Statechart('Microwave controller') = Interpreter(Statechart('Microwave controller')).statechart

tests/test_bdd.py:44: AssertionError
----------------------------- Captured stdout call -----------------------------
USING RUNNER: behave.runner:Runner
Feature: Cooking # docs/examples/microwave/cooking_human.feature:1

  Scenario: Start cooking food                # docs/examples/microwave/cooking_human.feature:3
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    And I press increase power button         # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then heating turns on                     # None

  Scenario: Stop cooking food              # docs/examples/microwave/cooking_human.feature:12
    Given I reproduce "Start cooking food" # sismic/bdd/steps.py:11
    When 2 seconds elapsed                 # sismic/bdd/wrappers.py:39
    Then variable timer equals 3           # sismic/bdd/steps.py:151
    When I press stop button               # sismic/bdd/wrappers.py:39
    Then variable timer equals 0           # sismic/bdd/steps.py:151
    And heating turns off                  # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


  Scenario: Cooking stops after preset time  # docs/examples/microwave/cooking_human.feature:20
    Given I reproduce "Start cooking food"   # sismic/bdd/steps.py:11
    When 5 seconds elapsed                   # sismic/bdd/wrappers.py:39
    Then variable timer equals 0             # sismic/bdd/steps.py:151
    And heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


Feature: Lighting # docs/examples/microwave/lighting_human.feature:1

  Scenario: Lamp is on when door is open  # docs/examples/microwave/lighting_human.feature:3
    When I open the door                  # sismic/bdd/wrappers.py:39
    Then lamp turns on                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp is off when door is closed          # docs/examples/microwave/lighting_human.feature:7
    Given I reproduce "Lamp is on when door is open" # sismic/bdd/steps.py:11
    When I close the door                            # sismic/bdd/wrappers.py:39
    Then lamp turns off                              # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


  Scenario: Lamp is on while cooking          # docs/examples/microwave/lighting_human.feature:12
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then lamp turns on                        # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp turns off after cooking         # docs/examples/microwave/lighting_human.feature:20
    Given I reproduce "Lamp is on while cooking" # sismic/bdd/steps.py:11
    When I press stop button                     # sismic/bdd/wrappers.py:39
    Then lamp turns off                          # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


Feature: Safety criterion # docs/examples/microwave/safety_human.feature:1

  Background: Start cooking food  # docs/examples/microwave/safety_human.feature:3

  Scenario: NO cooking when door is not closed  # docs/examples/microwave/safety_human.feature:9
    Given I open the door                       # sismic/bdd/wrappers.py:35
    And I place an item in the oven             # sismic/bdd/wrappers.py:35
    And I close the door                        # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times   # sismic/bdd/wrappers.py:35
    Given I open the door                       # sismic/bdd/wrappers.py:35
    When I press start button                   # sismic/bdd/wrappers.py:39
    Then heating does not turn on               # None

  Scenario: Opening door interrupts cooking   # docs/examples/microwave/safety_human.feature:14
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    Given I press start button                # sismic/bdd/wrappers.py:35
    And 3 seconds elapsed                     # sismic/bdd/wrappers.py:35
    When I open the door                      # sismic/bdd/wrappers.py:39
    Then heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired



Failing scenarios:
  docs/examples/microwave/cooking_human.feature:12  Stop cooking food
  docs/examples/microwave/cooking_human.feature:20  Cooking stops after preset time
  docs/examples/microwave/lighting_human.feature:3  Lamp is on when door is open
  docs/examples/microwave/lighting_human.feature:7  Lamp is off when door is closed
  docs/examples/microwave/lighting_human.feature:12  Lamp is on while cooking
  docs/examples/microwave/lighting_human.feature:20  Lamp turns off after cooking
  docs/examples/microwave/safety_human.feature:14  Opening door interrupts cooking

Errored scenarios:
  docs/examples/microwave/cooking_human.feature:3  Start cooking food
  docs/examples/microwave/safety_human.feature:9  NO cooking when door is not closed

0 features passed, 1 failed, 2 error, 0 skipped
0 scenarios passed, 7 failed, 2 error, 0 skipped
37 steps passed, 7 failed, 0 skipped, 2 undefined
Took 0m0.037s
----------------------------- Captured stderr call -----------------------------

You can implement step definitions for undefined steps with these snippets:

from behave.api.pending_step import StepNotImplementedError
@then(u'heating turns on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating turns on')


@then(u'Event heating_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event heating_off is fired')


@then(u'Event lamp_switch_on is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_on is fired')


@then(u'Event lamp_switch_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_off is fired')


@then(u'heating does not turn on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating does not turn on')


______________ TestMicrowave.test_microwave_with_steps[contract] _______________

self = <tests.test_bdd.TestMicrowave object at 0x104d61160>
microwave = Interpreter(Statechart('Microwave controller with contracts'))

    def test_microwave_with_steps(self, microwave):
        features = ['cooking_human', 'lighting_human', 'safety_human']
    
>       assert 0 == execute_bdd(
            microwave.statechart,
            [os.path.join('docs', 'examples', 'microwave', f+'.feature') for f in features],
            step_filepaths=[os.path.join('docs', 'examples', 'microwave', 'steps.py')],
        )
E       AssertionError: assert 0 == 1
E        +  where 1 = execute_bdd(Statechart('Microwave controller with contracts'), ['docs/examples/microwave/cooking_human.feature', 'docs/examples/microwave/lighting_human.featu
re', 'docs/examples/microwave/safety_human.feature'], step_filepaths=['docs/examples/microwave/steps.py'])
E        +    where Statechart('Microwave controller with contracts') = Interpreter(Statechart('Microwave controller with contracts')).statechart

tests/test_bdd.py:44: AssertionError
----------------------------- Captured stdout call -----------------------------
USING RUNNER: behave.runner:Runner
Feature: Cooking # docs/examples/microwave/cooking_human.feature:1

  Scenario: Start cooking food                # docs/examples/microwave/cooking_human.feature:3
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    And I press increase power button         # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then heating turns on                     # None

  Scenario: Stop cooking food              # docs/examples/microwave/cooking_human.feature:12
    Given I reproduce "Start cooking food" # sismic/bdd/steps.py:11
    When 2 seconds elapsed                 # sismic/bdd/wrappers.py:39
    Then variable timer equals 3           # sismic/bdd/steps.py:151
    When I press stop button               # sismic/bdd/wrappers.py:39
    Then variable timer equals 0           # sismic/bdd/steps.py:151
    And heating turns off                  # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


  Scenario: Cooking stops after preset time  # docs/examples/microwave/cooking_human.feature:20
    Given I reproduce "Start cooking food"   # sismic/bdd/steps.py:11
    When 5 seconds elapsed                   # sismic/bdd/wrappers.py:39
    Then variable timer equals 0             # sismic/bdd/steps.py:151
    And heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


Feature: Lighting # docs/examples/microwave/lighting_human.feature:1

  Scenario: Lamp is on when door is open  # docs/examples/microwave/lighting_human.feature:3
    When I open the door                  # sismic/bdd/wrappers.py:39
    Then lamp turns on                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp is off when door is closed          # docs/examples/microwave/lighting_human.feature:7
    Given I reproduce "Lamp is on when door is open" # sismic/bdd/steps.py:11
    When I close the door                            # sismic/bdd/wrappers.py:39
    Then lamp turns off                              # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


  Scenario: Lamp is on while cooking          # docs/examples/microwave/lighting_human.feature:12
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then lamp turns on                        # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp turns off after cooking         # docs/examples/microwave/lighting_human.feature:20
    Given I reproduce "Lamp is on while cooking" # sismic/bdd/steps.py:11
    When I press stop button                     # sismic/bdd/wrappers.py:39
    Then lamp turns off                          # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


Feature: Safety criterion # docs/examples/microwave/safety_human.feature:1

  Background: Start cooking food  # docs/examples/microwave/safety_human.feature:3

  Scenario: NO cooking when door is not closed  # docs/examples/microwave/safety_human.feature:9
    Given I open the door                       # sismic/bdd/wrappers.py:35
    And I place an item in the oven             # sismic/bdd/wrappers.py:35
    And I close the door                        # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times   # sismic/bdd/wrappers.py:35
    Given I open the door                       # sismic/bdd/wrappers.py:35
    When I press start button                   # sismic/bdd/wrappers.py:39
    Then heating does not turn on               # None

  Scenario: Opening door interrupts cooking   # docs/examples/microwave/safety_human.feature:14
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    Given I press start button                # sismic/bdd/wrappers.py:35
    And 3 seconds elapsed                     # sismic/bdd/wrappers.py:35
    When I open the door                      # sismic/bdd/wrappers.py:39
    Then heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired



Failing scenarios:
  docs/examples/microwave/cooking_human.feature:12  Stop cooking food
  docs/examples/microwave/cooking_human.feature:20  Cooking stops after preset time
  docs/examples/microwave/lighting_human.feature:3  Lamp is on when door is open
  docs/examples/microwave/lighting_human.feature:7  Lamp is off when door is closed
  docs/examples/microwave/lighting_human.feature:12  Lamp is on while cooking
  docs/examples/microwave/lighting_human.feature:20  Lamp turns off after cooking
  docs/examples/microwave/safety_human.feature:14  Opening door interrupts cooking

Errored scenarios:
  docs/examples/microwave/cooking_human.feature:3  Start cooking food
  docs/examples/microwave/safety_human.feature:9  NO cooking when door is not closed

0 features passed, 1 failed, 2 error, 0 skipped
0 scenarios passed, 7 failed, 2 error, 0 skipped
37 steps passed, 7 failed, 0 skipped, 2 undefined
Took 0m0.037s
----------------------------- Captured stderr call -----------------------------

You can implement step definitions for undefined steps with these snippets:

from behave.api.pending_step import StepNotImplementedError
@then(u'heating turns on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating turns on')


@then(u'Event heating_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event heating_off is fired')


@then(u'Event lamp_switch_on is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_on is fired')


@then(u'Event lamp_switch_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_off is fired')


@then(u'heating does not turn on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating does not turn on')


_____ TestMicrowave.test_microwave_with_steps_and_properties[no contract] ______

self = <tests.test_bdd.TestMicrowave object at 0x104d61250>
microwave = Interpreter(Statechart('Microwave controller'))
property_statecharts = [Statechart('Heating must stop when door is opened'), Statechart('Heating does not start if door is opened'), Statechart('Heating must not occur if/when door
 is opened')]

    def test_microwave_with_steps_and_properties(self, microwave, property_statecharts):
        features = ['cooking_human', 'lighting_human', 'safety_human']
    
>       assert 0 == execute_bdd(
            microwave.statechart,
            [os.path.join('docs', 'examples', 'microwave', f+'.feature') for f in features],
            step_filepaths=[os.path.join('docs', 'examples', 'microwave', 'steps.py')],
            property_statecharts=property_statecharts
        )
E       AssertionError: assert 0 == 1
E        +  where 1 = execute_bdd(Statechart('Microwave controller'), ['docs/examples/microwave/cooking_human.feature', 'docs/examples/microwave/lighting_human.feature', 'docs/exam
ples/microwave/safety_human.feature'], step_filepaths=['docs/examples/microwave/steps.py'], property_statecharts=[Statechart('Heating must stop when door is opened'), Statechart('H
eating does not start if door is opened'), Statechart('Heating must not occur if/when door is opened')])
E        +    where Statechart('Microwave controller') = Interpreter(Statechart('Microwave controller')).statechart

tests/test_bdd.py:53: AssertionError
----------------------------- Captured stdout call -----------------------------
USING RUNNER: behave.runner:Runner
Feature: Cooking # docs/examples/microwave/cooking_human.feature:1

  Scenario: Start cooking food                # docs/examples/microwave/cooking_human.feature:3
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    And I press increase power button         # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then heating turns on                     # None

  Scenario: Stop cooking food              # docs/examples/microwave/cooking_human.feature:12
    Given I reproduce "Start cooking food" # sismic/bdd/steps.py:11
    When 2 seconds elapsed                 # sismic/bdd/wrappers.py:39
    Then variable timer equals 3           # sismic/bdd/steps.py:151
    When I press stop button               # sismic/bdd/wrappers.py:39
    Then variable timer equals 0           # sismic/bdd/steps.py:151
    And heating turns off                  # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


  Scenario: Cooking stops after preset time  # docs/examples/microwave/cooking_human.feature:20
    Given I reproduce "Start cooking food"   # sismic/bdd/steps.py:11
    When 5 seconds elapsed                   # sismic/bdd/wrappers.py:39
    Then variable timer equals 0             # sismic/bdd/steps.py:151
    And heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


Feature: Lighting # docs/examples/microwave/lighting_human.feature:1

  Scenario: Lamp is on when door is open  # docs/examples/microwave/lighting_human.feature:3
    When I open the door                  # sismic/bdd/wrappers.py:39
    Then lamp turns on                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp is off when door is closed          # docs/examples/microwave/lighting_human.feature:7
    Given I reproduce "Lamp is on when door is open" # sismic/bdd/steps.py:11
    When I close the door                            # sismic/bdd/wrappers.py:39
    Then lamp turns off                              # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


  Scenario: Lamp is on while cooking          # docs/examples/microwave/lighting_human.feature:12
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then lamp turns on                        # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp turns off after cooking         # docs/examples/microwave/lighting_human.feature:20
    Given I reproduce "Lamp is on while cooking" # sismic/bdd/steps.py:11
    When I press stop button                     # sismic/bdd/wrappers.py:39
    Then lamp turns off                          # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


Feature: Safety criterion # docs/examples/microwave/safety_human.feature:1

  Background: Start cooking food  # docs/examples/microwave/safety_human.feature:3

  Scenario: NO cooking when door is not closed  # docs/examples/microwave/safety_human.feature:9
    Given I open the door                       # sismic/bdd/wrappers.py:35
    And I place an item in the oven             # sismic/bdd/wrappers.py:35
    And I close the door                        # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times   # sismic/bdd/wrappers.py:35
    Given I open the door                       # sismic/bdd/wrappers.py:35
    When I press start button                   # sismic/bdd/wrappers.py:39
    Then heating does not turn on               # None

  Scenario: Opening door interrupts cooking   # docs/examples/microwave/safety_human.feature:14
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    Given I press start button                # sismic/bdd/wrappers.py:35
    And 3 seconds elapsed                     # sismic/bdd/wrappers.py:35
    When I open the door                      # sismic/bdd/wrappers.py:39
    Then heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired



Failing scenarios:
  docs/examples/microwave/cooking_human.feature:12  Stop cooking food
  docs/examples/microwave/cooking_human.feature:20  Cooking stops after preset time
  docs/examples/microwave/lighting_human.feature:3  Lamp is on when door is open
  docs/examples/microwave/lighting_human.feature:7  Lamp is off when door is closed
  docs/examples/microwave/lighting_human.feature:12  Lamp is on while cooking
  docs/examples/microwave/lighting_human.feature:20  Lamp turns off after cooking
  docs/examples/microwave/safety_human.feature:14  Opening door interrupts cooking

Errored scenarios:
  docs/examples/microwave/cooking_human.feature:3  Start cooking food
  docs/examples/microwave/safety_human.feature:9  NO cooking when door is not closed

0 features passed, 1 failed, 2 error, 0 skipped
0 scenarios passed, 7 failed, 2 error, 0 skipped
37 steps passed, 7 failed, 0 skipped, 2 undefined
Took 0m0.123s
----------------------------- Captured stderr call -----------------------------

You can implement step definitions for undefined steps with these snippets:

from behave.api.pending_step import StepNotImplementedError
@then(u'heating turns on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating turns on')


@then(u'Event heating_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event heating_off is fired')


@then(u'Event lamp_switch_on is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_on is fired')


@then(u'Event lamp_switch_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_off is fired')


@then(u'heating does not turn on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating does not turn on')


_______ TestMicrowave.test_microwave_with_steps_and_properties[contract] _______

self = <tests.test_bdd.TestMicrowave object at 0x104d613a0>
microwave = Interpreter(Statechart('Microwave controller with contracts'))
property_statecharts = [Statechart('Heating must stop when door is opened'), Statechart('Heating does not start if door is opened'), Statechart('Heating must not occur if/when door
 is opened')]

    def test_microwave_with_steps_and_properties(self, microwave, property_statecharts):
        features = ['cooking_human', 'lighting_human', 'safety_human']
    
>       assert 0 == execute_bdd(
            microwave.statechart,
            [os.path.join('docs', 'examples', 'microwave', f+'.feature') for f in features],
            step_filepaths=[os.path.join('docs', 'examples', 'microwave', 'steps.py')],
            property_statecharts=property_statecharts
        )
E       AssertionError: assert 0 == 1
E        +  where 1 = execute_bdd(Statechart('Microwave controller with contracts'), ['docs/examples/microwave/cooking_human.feature', 'docs/examples/microwave/lighting_human.featu
re', 'docs/examples/microwave/safety_human.feature'], step_filepaths=['docs/examples/microwave/steps.py'], property_statecharts=[Statechart('Heating must stop when door is opened')
, Statechart('Heating does not start if door is opened'), Statechart('Heating must not occur if/when door is opened')])
E        +    where Statechart('Microwave controller with contracts') = Interpreter(Statechart('Microwave controller with contracts')).statechart

tests/test_bdd.py:53: AssertionError
----------------------------- Captured stdout call -----------------------------
USING RUNNER: behave.runner:Runner
Feature: Cooking # docs/examples/microwave/cooking_human.feature:1

  Scenario: Start cooking food                # docs/examples/microwave/cooking_human.feature:3
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    And I press increase power button         # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then heating turns on                     # None

  Scenario: Stop cooking food              # docs/examples/microwave/cooking_human.feature:12
    Given I reproduce "Start cooking food" # sismic/bdd/steps.py:11
    When 2 seconds elapsed                 # sismic/bdd/wrappers.py:39
    Then variable timer equals 3           # sismic/bdd/steps.py:151
    When I press stop button               # sismic/bdd/wrappers.py:39
    Then variable timer equals 0           # sismic/bdd/steps.py:151
    And heating turns off                  # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


  Scenario: Cooking stops after preset time  # docs/examples/microwave/cooking_human.feature:20
    Given I reproduce "Start cooking food"   # sismic/bdd/steps.py:11
    When 5 seconds elapsed                   # sismic/bdd/wrappers.py:39
    Then variable timer equals 0             # sismic/bdd/steps.py:151
    And heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


Feature: Lighting # docs/examples/microwave/lighting_human.feature:1

  Scenario: Lamp is on when door is open  # docs/examples/microwave/lighting_human.feature:3
    When I open the door                  # sismic/bdd/wrappers.py:39
    Then lamp turns on                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp is off when door is closed          # docs/examples/microwave/lighting_human.feature:7
    Given I reproduce "Lamp is on when door is open" # sismic/bdd/steps.py:11
    When I close the door                            # sismic/bdd/wrappers.py:39
    Then lamp turns off                              # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


  Scenario: Lamp is on while cooking          # docs/examples/microwave/lighting_human.feature:12
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then lamp turns on                        # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp turns off after cooking         # docs/examples/microwave/lighting_human.feature:20
    Given I reproduce "Lamp is on while cooking" # sismic/bdd/steps.py:11
    When I press stop button                     # sismic/bdd/wrappers.py:39
    Then lamp turns off                          # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


Feature: Safety criterion # docs/examples/microwave/safety_human.feature:1

  Background: Start cooking food  # docs/examples/microwave/safety_human.feature:3

  Scenario: NO cooking when door is not closed  # docs/examples/microwave/safety_human.feature:9
    Given I open the door                       # sismic/bdd/wrappers.py:35
    And I place an item in the oven             # sismic/bdd/wrappers.py:35
    And I close the door                        # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times   # sismic/bdd/wrappers.py:35
    Given I open the door                       # sismic/bdd/wrappers.py:35
    When I press start button                   # sismic/bdd/wrappers.py:39
    Then heating does not turn on               # None

  Scenario: Opening door interrupts cooking   # docs/examples/microwave/safety_human.feature:14
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    Given I press start button                # sismic/bdd/wrappers.py:35
    And 3 seconds elapsed                     # sismic/bdd/wrappers.py:35
    When I open the door                      # sismic/bdd/wrappers.py:39
    Then heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired



Failing scenarios:
  docs/examples/microwave/cooking_human.feature:12  Stop cooking food
  docs/examples/microwave/cooking_human.feature:20  Cooking stops after preset time
  docs/examples/microwave/lighting_human.feature:3  Lamp is on when door is open
  docs/examples/microwave/lighting_human.feature:7  Lamp is off when door is closed
  docs/examples/microwave/lighting_human.feature:12  Lamp is on while cooking
  docs/examples/microwave/lighting_human.feature:20  Lamp turns off after cooking
  docs/examples/microwave/safety_human.feature:14  Opening door interrupts cooking

Errored scenarios:
  docs/examples/microwave/cooking_human.feature:3  Start cooking food
  docs/examples/microwave/safety_human.feature:9  NO cooking when door is not closed

0 features passed, 1 failed, 2 error, 0 skipped
0 scenarios passed, 7 failed, 2 error, 0 skipped
37 steps passed, 7 failed, 0 skipped, 2 undefined
Took 0m0.124s
----------------------------- Captured stderr call -----------------------------

You can implement step definitions for undefined steps with these snippets:

from behave.api.pending_step import StepNotImplementedError
@then(u'heating turns on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating turns on')


@then(u'Event heating_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event heating_off is fired')


@then(u'Event lamp_switch_on is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_on is fired')


@then(u'Event lamp_switch_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_off is fired')


@then(u'heating does not turn on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating does not turn on')


___________________________________ test_cli ___________________________________

    def test_cli():
>       assert 0 == cli([
            'docs/examples/microwave/microwave.yaml',
            '--features', 'docs/examples/microwave/heating.feature', 'docs/examples/microwave/cooking_human.feature', 'docs/examples/microwave/lighting_human.feature', 'docs/exampl
es/microwave/safety_human.feature',
            '--steps', 'docs/examples/microwave/steps.py',
            '--properties', 'docs/examples/microwave/heating_on_property.yaml', 'docs/examples/microwave/heating_off_property.yaml'
        ])
E       AssertionError: assert 0 == 1
E        +  where 1 = cli(['docs/examples/microwave/microwave.yaml', '--features', 'docs/examples/microwave/heating.feature', 'docs/examples/mic..._human.feature', 'docs/examples/m
icrowave/lighting_human.feature', 'docs/examples/microwave/safety_human.feature', ...])

tests/test_bdd.py:62: AssertionError
----------------------------- Captured stdout call -----------------------------
USING RUNNER: behave.runner:Runner
Feature: No heating if door is opened # docs/examples/microwave/heating.feature:1

  Scenario: No heating when nothing is done  # docs/examples/microwave/heating.feature:3
    When I do nothing                        # sismic/bdd/steps.py:5
    Then event heating_on is not fired       # sismic/bdd/steps.py:134

  Scenario: No heating when I open the door  # docs/examples/microwave/heating.feature:7
    When I send event door_opened            # sismic/bdd/steps.py:39
    Then event heating_on is not fired       # sismic/bdd/steps.py:134

  Scenario: No heating when item is placed  # docs/examples/microwave/heating.feature:11
    Given I send event door_opened          # sismic/bdd/steps.py:39
    When I send event item_placed           # sismic/bdd/steps.py:39
    Then event heating_on is not fired      # sismic/bdd/steps.py:134

  Scenario: No heating when door is not closed  # docs/examples/microwave/heating.feature:16
    Given I send event door_opened              # sismic/bdd/steps.py:39
    And I send event item_placed                # sismic/bdd/steps.py:39
    When I send event door_closed               # sismic/bdd/steps.py:39
    Then event heating_on is not fired          # sismic/bdd/steps.py:134

  Scenario: Allow heating if door is closed  # docs/examples/microwave/heating.feature:22
    Given I send event door_opened           # sismic/bdd/steps.py:39
    And I send event item_placed             # sismic/bdd/steps.py:39
    And I send event door_closed             # sismic/bdd/steps.py:39
    And I send event timer_inc               # sismic/bdd/steps.py:39
    When I send event cooking_start          # sismic/bdd/steps.py:39
    Then event heating_on is fired           # sismic/bdd/steps.py:115

  Scenario: Opening door interrupts heating             # docs/examples/microwave/heating.feature:30
    Given I reproduce "Allow heating if door is closed" # sismic/bdd/steps.py:11
    When I send event door_opened                       # sismic/bdd/steps.py:39
    Then event heating_off is fired                     # sismic/bdd/steps.py:115

Feature: Cooking # docs/examples/microwave/cooking_human.feature:1

  Scenario: Start cooking food                # docs/examples/microwave/cooking_human.feature:3
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    And I press increase power button         # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then heating turns on                     # None

  Scenario: Stop cooking food              # docs/examples/microwave/cooking_human.feature:12
    Given I reproduce "Start cooking food" # sismic/bdd/steps.py:11
    When 2 seconds elapsed                 # sismic/bdd/wrappers.py:39
    Then variable timer equals 3           # sismic/bdd/steps.py:151
    When I press stop button               # sismic/bdd/wrappers.py:39
    Then variable timer equals 0           # sismic/bdd/steps.py:151
    And heating turns off                  # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


  Scenario: Cooking stops after preset time  # docs/examples/microwave/cooking_human.feature:20
    Given I reproduce "Start cooking food"   # sismic/bdd/steps.py:11
    When 5 seconds elapsed                   # sismic/bdd/wrappers.py:39
    Then variable timer equals 0             # sismic/bdd/steps.py:151
    And heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired


Feature: Lighting # docs/examples/microwave/lighting_human.feature:1

  Scenario: Lamp is on when door is open  # docs/examples/microwave/lighting_human.feature:3
    When I open the door                  # sismic/bdd/wrappers.py:39
    Then lamp turns on                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp is off when door is closed          # docs/examples/microwave/lighting_human.feature:7
    Given I reproduce "Lamp is on when door is open" # sismic/bdd/steps.py:11
    When I close the door                            # sismic/bdd/wrappers.py:39
    Then lamp turns off                              # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


  Scenario: Lamp is on while cooking          # docs/examples/microwave/lighting_human.feature:12
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    When I press start button                 # sismic/bdd/wrappers.py:39
    Then lamp turns on                        # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_on is fired


  Scenario: Lamp turns off after cooking         # docs/examples/microwave/lighting_human.feature:20
    Given I reproduce "Lamp is on while cooking" # sismic/bdd/steps.py:11
    When I press stop button                     # sismic/bdd/wrappers.py:39
    Then lamp turns off                          # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event lamp_switch_off is fired


Feature: Safety criterion # docs/examples/microwave/safety_human.feature:1

  Background: Start cooking food  # docs/examples/microwave/safety_human.feature:3

  Scenario: NO cooking when door is not closed  # docs/examples/microwave/safety_human.feature:9
    Given I open the door                       # sismic/bdd/wrappers.py:35
    And I place an item in the oven             # sismic/bdd/wrappers.py:35
    And I close the door                        # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times   # sismic/bdd/wrappers.py:35
    Given I open the door                       # sismic/bdd/wrappers.py:35
    When I press start button                   # sismic/bdd/wrappers.py:39
    Then heating does not turn on               # None

  Scenario: Opening door interrupts cooking   # docs/examples/microwave/safety_human.feature:14
    Given I open the door                     # sismic/bdd/wrappers.py:35
    And I place an item in the oven           # sismic/bdd/wrappers.py:35
    And I close the door                      # sismic/bdd/wrappers.py:35
    And I press increase timer button 5 times # sismic/bdd/wrappers.py:35
    Given I press start button                # sismic/bdd/wrappers.py:35
    And 3 seconds elapsed                     # sismic/bdd/wrappers.py:35
    When I open the door                      # sismic/bdd/wrappers.py:39
    Then heating turns off                    # sismic/bdd/wrappers.py:59
      Assertion Failed: UNDEFINED SUB-STEP: Then Event heating_off is fired



Failing scenarios:
  docs/examples/microwave/cooking_human.feature:12  Stop cooking food
  docs/examples/microwave/cooking_human.feature:20  Cooking stops after preset time
  docs/examples/microwave/lighting_human.feature:3  Lamp is on when door is open
  docs/examples/microwave/lighting_human.feature:7  Lamp is off when door is closed
  docs/examples/microwave/lighting_human.feature:12  Lamp is on while cooking
  docs/examples/microwave/lighting_human.feature:20  Lamp turns off after cooking
  docs/examples/microwave/safety_human.feature:14  Opening door interrupts cooking

Errored scenarios:
  docs/examples/microwave/cooking_human.feature:3  Start cooking food
  docs/examples/microwave/safety_human.feature:9  NO cooking when door is not closed

1 feature passed, 1 failed, 2 error, 0 skipped
6 scenarios passed, 7 failed, 2 error, 0 skipped
57 steps passed, 7 failed, 0 skipped, 2 undefined
Took 0m0.100s
----------------------------- Captured stderr call -----------------------------

You can implement step definitions for undefined steps with these snippets:

from behave.api.pending_step import StepNotImplementedError
@then(u'heating turns on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating turns on')


@then(u'Event heating_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event heating_off is fired')


@then(u'Event lamp_switch_on is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_on is fired')


@then(u'Event lamp_switch_off is fired')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then Event lamp_switch_off is fired')


@then(u'heating does not turn on')
def step_impl(context):
    raise StepNotImplementedError(u'STEP: Then heating does not turn on')


=========================== short test summary info ============================
FAILED tests/test_bdd.py::TestMicrowave::test_microwave_with_steps[no contract] - AssertionError: assert 0 == 1
FAILED tests/test_bdd.py::TestMicrowave::test_microwave_with_steps[contract] - AssertionError: assert 0 == 1
FAILED tests/test_bdd.py::TestMicrowave::test_microwave_with_steps_and_properties[no contract] - AssertionError: assert 0 == 1
FAILED tests/test_bdd.py::TestMicrowave::test_microwave_with_steps_and_properties[contract] - AssertionError: assert 0 == 1
FAILED tests/test_bdd.py::test_cli - AssertionError: assert 0 == 1
=========== 5 failed, 327 passed, 12 deselected, 1 xpassed in 5.13s ============

These are not observed when running against 1.2.7.dev5.

booxter avatar Feb 02 '25 19:02 booxter

Thanks for reporting this issue. Let's wait until the first stable prerelease of behave 1.2.7. I'll have a deeper look at the issue but it seems the issue is on their side for now.

AlexandreDecan avatar Feb 02 '25 19:02 AlexandreDecan

This could be due to a change related to case-sensitivity. On https://github.com/AlexandreDecan/sismic/blob/fdd74b874b657c940715fa5296505a393d90d69b/docs/examples/microwave/steps.py#L13 "Event" has an uppercase where it shouldn't, perhaps behave is now checking for steps using a case sensitive match. If that's the case and if that's on purpose, the fix on our side will be quite easy to implement.

AlexandreDecan avatar Feb 02 '25 19:02 AlexandreDecan

I know little about the libraries involved (just trying to fix some test errors in a distro, nixpkgs). If it's for behave to fix it, it should be brought up to their attention I guess.

booxter avatar Feb 02 '25 22:02 booxter

Is there any reason why development versions of Behave are used instead of stable ones for nixpkgs?

AlexandreDecan avatar Feb 03 '25 09:02 AlexandreDecan

Apparently the current "stable" version of behave doesn't support latest Python versions: https://github.com/NixOS/nixpkgs/pull/95914

booxter avatar Feb 03 '25 21:02 booxter

Annoying :-/

I've modified our example/test. Could you please test against the master branch? If it works, I can release a patch.

AlexandreDecan avatar Feb 04 '25 08:02 AlexandreDecan