diff options
| -rw-r--r-- | kconfiglib.py | 9 | ||||
| -rw-r--r-- | testsuite.py | 14 |
2 files changed, 18 insertions, 5 deletions
diff --git a/kconfiglib.py b/kconfiglib.py index cbb7e5e..f27e93a 100644 --- a/kconfiglib.py +++ b/kconfiglib.py @@ -3272,8 +3272,13 @@ def _get_visibility(sc): vis = sc._config._eval_max(vis, cond_expr) if isinstance(sc, Symbol) and sc._is_choice_sym: - if sc._type == TRISTATE and vis == "m" and \ - sc._parent.get_mode() == "y": + if sc._parent._type == TRISTATE and sc._type != TRISTATE and \ + sc._parent.get_mode() != "y": + # Non-tristate choice symbols in tristate choices depend on the + # choice being in mode "y" + vis = "n" + elif sc._type == TRISTATE and vis == "m" and \ + sc._parent.get_mode() == "y": # Choice symbols with visibility "m" are not visible if the # choice has mode "y" vis = "n" diff --git a/testsuite.py b/testsuite.py index 870195f..906a697 100644 --- a/testsuite.py +++ b/testsuite.py @@ -996,8 +996,18 @@ def run_selftests(): verify_sym_visibility("BOOL_menu_m", "n", "y") # Promoted verify_sym_visibility("BOOL_menu_y", "y", "y") verify_sym_visibility("BOOL_choice_n", "n", "n") - verify_sym_visibility("BOOL_choice_m", "n", "y") # Promoted + + # Non-tristate symbols in tristate choices are only visible if the choice + # is in "y" mode + verify_sym_visibility("BOOL_choice_m", "n", "n") + verify_sym_visibility("BOOL_choice_y", "y", "n") + c["TRISTATE_choice_m"].set_user_value("y") + c["TRISTATE_choice_y"].set_user_value("y") + # Still limited by the visibility of the choice + verify_sym_visibility("BOOL_choice_m", "n", "n") + # This one should become visible now though verify_sym_visibility("BOOL_choice_y", "y", "y") + verify_sym_visibility("TRISTATE_if_n", "n", "n") verify_sym_visibility("TRISTATE_if_m", "n", "m") verify_sym_visibility("TRISTATE_if_y", "y", "y") @@ -1030,8 +1040,6 @@ def run_selftests(): choice_tristate_menu_n_and_y \ = c.get_choices()[3:] - verify(choice_bool_n.get_name() == "BOOL_CHOICE_n", "Ops - testing the wrong choices") - verify_choice_visibility(choice_bool_n, "n", "n") verify_choice_visibility(choice_bool_m, "n", "y") # Promoted verify_choice_visibility(choice_bool_y, "y", "y") |
