diff options
| author | Ulf Magnusson <ulfalizer@gmail.com> | 2018-08-23 10:45:42 +0200 |
|---|---|---|
| committer | Ulf Magnusson <ulfalizer@gmail.com> | 2018-08-23 11:42:49 +0200 |
| commit | 3aca83eaf20f5e278b6d260cb255e6a9385590db (patch) | |
| tree | 895b9683a32f5e90be4c38c3bf1a4f0cf512fafd | |
| parent | 9b7751103e7985c9184b41d89d8454249ed36875 (diff) | |
Fix recursive 'source' error reporting
The recursive 'source' detection was still fine, but the error reporting
had broken due a missed variable renaming.
The test suite didn't catch it, because a different type of KconfigError
was raised instead, due to a separate error in the test suite (need to
include tests/Krecursive{1,2}, since paths are relative to $srctree).
Fix the variable name and tighten up the tests to check that the
KconfigError message is the one we except. Tighten up the dependency
loop detection tests in the same way too.
| -rw-r--r-- | kconfiglib.py | 2 | ||||
| -rw-r--r-- | tests/Krecursive1 | 2 | ||||
| -rw-r--r-- | tests/Krecursive2 | 2 | ||||
| -rw-r--r-- | testsuite.py | 106 |
4 files changed, 102 insertions, 10 deletions
diff --git a/kconfiglib.py b/kconfiglib.py index 3b4e8d7..a16a215 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -1551,7 +1551,7 @@ class Kconfig(object): "\n{}:{}: Recursive 'source' of '{}' detected. Check that " "environment variables are set correctly.\n" "Backtrace:\n{}" - .format(self._filename, self._linenr, filename, + .format(self._filename, self._linenr, rel_filename, "\n".join("{}:{}".format(name, linenr) for name, linenr, _ in reversed(self._filestack)))) diff --git a/tests/Krecursive1 b/tests/Krecursive1 index c4008c2..35b521a 100644 --- a/tests/Krecursive1 +++ b/tests/Krecursive1 @@ -1 +1 @@ -source "Kconfiglib/tests/Krecursive2" +source "tests/Krecursive2" diff --git a/tests/Krecursive2 b/tests/Krecursive2 index 5032b29..9f9f00e 100644 --- a/tests/Krecursive2 +++ b/tests/Krecursive2 @@ -1 +1 @@ -source "Kconfiglib/tests/Krecursive1" +source "tests/Krecursive1" diff --git a/testsuite.py b/testsuite.py index 5c90f33..0cc472e 100644 --- a/testsuite.py +++ b/testsuite.py @@ -1038,20 +1038,27 @@ g try: Kconfig("tests/Krecursive1") - except KconfigError: - pass + except KconfigError as e: + verify_equal(str(e), """ +tests/Krecursive2:1: Recursive 'source' of 'tests/Krecursive1' detected. Check that environment variables are set correctly. +Backtrace: +tests/Krecursive2:1 +tests/Krecursive1:1 +"""[:-1]) except: fail("recursive 'source' raised wrong exception") else: fail("recursive 'source' did not raise exception") # Verify that source and rsource throw exceptions for missing files + # TODO: Make an exception test helper try: Kconfig("tests/Kmissingsource") - except KconfigError: - pass + except KconfigError as e: + if "does not exist" not in str(e): + fail("'source' with missing file raised wrong KconfigError") except: fail("'source' with missing file raised wrong exception") else: @@ -1059,8 +1066,9 @@ g try: Kconfig("tests/Kmissingrsource") - except KconfigError: - pass + except KconfigError as e: + if "does not exist" not in str(e): + fail("'rsource' with missing file raised wrong KconfigError") except: fail("'rsource' with missing file raised wrong exception") else: @@ -2186,10 +2194,94 @@ CONFIG_G=-1 try: Kconfig(filename) except KconfigError as e: - pass + if "Dependency loop" not in str(e): + fail("dependency loop in {} raised wrong KconfigError" + .format(filename)) + except: + fail("dependency loop in {} raised wrong exception" + .format(filename)) else: fail("dependency loop in {} not detected".format(filename)) + # Check the most complicated message completely + try: + Kconfig("Kconfiglib/tests/Kdeploop10") + except KconfigError as e: + verify_equal(str(e), """ +Dependency loop +=============== + +A (defined at Kconfiglib/tests/Kdeploop10:1), with definition... + +config A + bool + depends on B + +...depends on B (defined at Kconfiglib/tests/Kdeploop10:5), with definition... + +config B + bool + depends on C = 7 + +...depends on C (defined at Kconfiglib/tests/Kdeploop10:9), with definition... + +config C + int + range D 8 + +...depends on D (defined at Kconfiglib/tests/Kdeploop10:13), with definition... + +config D + int + default 3 if E + default 8 + +...depends on E (defined at Kconfiglib/tests/Kdeploop10:18), with definition... + +config E + bool + +(select-related dependencies: F && G) + +...depends on G (defined at Kconfiglib/tests/Kdeploop10:25), with definition... + +config G + bool + depends on H + +...depends on the choice symbol H (defined at Kconfiglib/tests/Kdeploop10:32), with definition... + +config H + bool + prompt "H" if I && <choice> + depends on I && <choice> + +...depends on the choice symbol I (defined at Kconfiglib/tests/Kdeploop10:41), with definition... + +config I + bool + prompt "I" if <choice> + depends on <choice> + +...depends on <choice> (defined at Kconfiglib/tests/Kdeploop10:38), with definition... + +choice + bool + prompt "choice" if J + +...depends on J (defined at Kconfiglib/tests/Kdeploop10:46), with definition... + +config J + bool + depends on A + +...depends again on A (defined at Kconfiglib/tests/Kdeploop10:1) +"""[:-1]) + except: + fail("Loop detection message check raised wrong exception") + else: + fail("Loop detection message check did not raise exception") + print("Testing preprocessor") |
