Skip to content

Commit

Permalink
fuzzer: add special-case for multi-line EOF TokenError (#1991)
Browse files Browse the repository at this point in the history
* Add special-case for multi-line EOF TokenError under Python3.7

* Update conditional check to correspond to original issue description (and include issue hyperlink)

* Add warning and hint regarding replaying the fuzzer code generation

* Include code review suggestion (with modifications for this to follow)

Co-authored-by: Zac Hatfield-Dodds <[email protected]>

* Remove Python version check, since this issue does exist across more recent Python versions than 3.7

* Update explanatory comment

* Add clarification for potentially-ambiguous blib2to3 import

* Update explanatory comment

* Bring comment into consistent format with previous comment

* Revert "Add clarification for potentially-ambiguous blib2to3 import"

This reverts commit 357b7cc.

Co-authored-by: Zac Hatfield-Dodds <[email protected]>
  • Loading branch information
jayaddison and Zac-HD authored Feb 20, 2021
1 parent 97b8496 commit 306a513
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions fuzz.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@
a coverage-guided fuzzer I'm working on.
"""

import re

import hypothesmith
from hypothesis import HealthCheck, given, settings, strategies as st

import black
from blib2to3.pgen2.tokenize import TokenError


# This test uses the Hypothesis and Hypothesmith libraries to generate random
Expand Down Expand Up @@ -46,6 +49,16 @@ def test_idempotent_any_syntatically_valid_python(
# able to cope with it. See issues #970, #1012, #1358, and #1557.
# TODO: remove this try-except block when issues are resolved.
return
except TokenError as e:
if (
e.args[0] == "EOF in multi-line statement"
and re.search(r"\r?\n\\\r?\n", src_contents) is not None
):
# This is a bug - if it's valid Python code, as above, Black should be
# able to cope with it. See issue #1012.
# TODO: remove this block when the issue is resolved.
return
raise

# And check that we got equivalent and stable output.
black.assert_equivalent(src_contents, dst_contents)
Expand Down

0 comments on commit 306a513

Please sign in to comment.