From 306a513137ec93a5053d415319e24bd4057d4045 Mon Sep 17 00:00:00 2001 From: James Addison Date: Sat, 20 Feb 2021 16:44:48 +0000 Subject: [PATCH] fuzzer: add special-case for multi-line EOF TokenError (#1991) * 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 * 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 357b7cc03bdb19dd924f1accd428352f4bb44e5c. Co-authored-by: Zac Hatfield-Dodds --- fuzz.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/fuzz.py b/fuzz.py index 6330c58..6e20686 100644 --- a/fuzz.py +++ b/fuzz.py @@ -5,10 +5,13 @@ generation. You can run this file with `python`, `pytest`, or (soon) 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 @@ -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) -- 2.39.5