Current behaviour
As of v0.9.0, Flake8-AAA considers that all with statements wrapping the Act block are part of that Act block. So for a simple test using open() this is the current required layout:
def test():
with open('f.txt') as f:
result = f.read()
assert result == 'Hello World!\n'
Analysis shows that the with open() statement has been absorbed into the Act block:
$ python -m flake8_aaa test.py
------+------------------------------------------------------------------------
1 DEF|def test():
2 ACT| with open('f.txt') as f:
3 ACT| result = f.read()
4 BL |
5 ASS| assert result == 'Hello World!\n'
------+------------------------------------------------------------------------
0 | ERRORS
======+========================================================================
PASSED!
Doing an open() on a file is an Arrange operation - it's preparing for the test. Therefore it should be part of the Arrange block. That means that the Act block just consists of the result assignment line result = f.read().
Now for the layout - the README states:
each test is broken down into three distinct parts separated by blank lines.
Therefore there must be a blank line before the result assignment. It is inside the with statement block and the test is laid out as:
def test():
with open('f.txt') as f:
result = f.read()
assert result == 'Hello World!\n'
However, using this layout with the current version of Flake8-AAA gives an error - analysis shows:
$ python -m flake8_aaa test.py
------+------------------------------------------------------------------------
1 DEF|def test():
2 ACT| with open('f.txt') as f:
3 BL |
^ AAA05 blank line in block
4 ACT| result = f.read()
5 BL |
6 ASS| assert result == 'Hello World!\n'
------+------------------------------------------------------------------------
1 | ERROR
======+========================================================================
FAILED with 1 ERROR
Expected behaviour
No error is raised from the example above, analysis gives line 2 as an Arrange block:
$ python -m flake8_aaa test.py
------+------------------------------------------------------------------------
1 DEF|def test():
2 ARR| with open('f.txt') as f:
3 BL |
4 ACT| result = f.read()
5 BL |
6 ASS| assert result == 'Hello World!\n'
------+------------------------------------------------------------------------
0 | ERRORS
======+========================================================================
PASSED!
Checklist
Current behaviour
As of v0.9.0, Flake8-AAA considers that all
withstatements wrapping the Act block are part of that Act block. So for a simple test usingopen()this is the current required layout:Analysis shows that the
with open()statement has been absorbed into the Act block:Doing an
open()on a file is an Arrange operation - it's preparing for the test. Therefore it should be part of the Arrange block. That means that the Act block just consists of the result assignment lineresult = f.read().Now for the layout - the README states:
Therefore there must be a blank line before the result assignment. It is inside the
withstatement block and the test is laid out as:However, using this layout with the current version of Flake8-AAA gives an error - analysis shows:
Expected behaviour
No error is raised from the example above, analysis gives line 2 as an Arrange block:
Checklist
Remove Act block building code that vacuums up parent
withstatements.Add new examples to good files:
within Arrange,within Assert,withspanning whole testAdd bad examples for: non-assertive
withwrapping Act (assignment and raises types).Run
pytestagainst new / edited good and bad examples. All examples should be executable tests and passing.Check how black likes to format
withstatements - there may be incompatibility.Update documentation on "Build Act Block" https://flake8-aaa.readthedocs.io/en/stable/discovery.html#build-act-block
Update CHANGELOG