mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
kconfig: tests: add a test for randconfig with dependent choices
Since commit3b9a19e089
("kconfig: loop as long as we changed some symbols in randconfig"), conf_set_all_new_symbols() is repeated until there is no more choice left to be shuffled. The motivation was to shuffle a choice nested in another choice. Although commit09d5873e4d
("kconfig: allow only 'config', 'comment', and 'if' inside 'choice'") disallowed the nested choice structure, we must still keep3b9a19e089
because there are still cases where conf_set_all_new_symbols() must iterate. scripts/kconfig/tests/choice_randomize/Kconfig is the test case. The second choice depends on 'B', which is the member of the first choice. With3b9a19e089
reverted, we would never get the pattern specified by scripts/kconfig/tests/choice_randomize/expected_config2. A real example can be found in lib/Kconfig.debug. Without3b9a19e089
, the randconfig would not shuffle the "Compressed Debug information" choice, which depends on DEBUG_INFO, which is derived from another choice "Debug information". My goal is to refactor Kconfig so that randconfig will work more simply, without using the loop. For now, let's add a test case to ensure all dependent choices are shuffled, as it is a somewhat tricky case for the current Kconfig. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
This commit is contained in:
parent
c9aa7d8621
commit
47ad16894c
22
scripts/kconfig/tests/choice_randomize/Kconfig
Normal file
22
scripts/kconfig/tests/choice_randomize/Kconfig
Normal file
@ -0,0 +1,22 @@
|
||||
choice
|
||||
prompt "choose A or B"
|
||||
|
||||
config A
|
||||
bool "A"
|
||||
|
||||
config B
|
||||
bool "B"
|
||||
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "choose X or Y"
|
||||
depends on B
|
||||
|
||||
config X
|
||||
bool "X"
|
||||
|
||||
config Y
|
||||
bool "Y"
|
||||
|
||||
endchoice
|
34
scripts/kconfig/tests/choice_randomize/__init__.py
Normal file
34
scripts/kconfig/tests/choice_randomize/__init__.py
Normal file
@ -0,0 +1,34 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
"""
|
||||
Randomize all dependent choices
|
||||
|
||||
This is a somewhat tricky case for randconfig; the visibility of one choice is
|
||||
determined by a member of another choice. Randconfig should be able to generate
|
||||
all possible patterns.
|
||||
"""
|
||||
|
||||
|
||||
def test(conf):
|
||||
|
||||
expected0 = False
|
||||
expected1 = False
|
||||
expected2 = False
|
||||
|
||||
for i in range(100):
|
||||
assert conf.randconfig(seed=i) == 0
|
||||
|
||||
if conf.config_matches('expected_config0'):
|
||||
expected0 = True
|
||||
elif conf.config_matches('expected_config1'):
|
||||
expected1 = True
|
||||
elif conf.config_matches('expected_config2'):
|
||||
expected2 = True
|
||||
else:
|
||||
assert False
|
||||
|
||||
if expected0 and expected1 and expected2:
|
||||
break
|
||||
|
||||
assert expected0
|
||||
assert expected1
|
||||
assert expected2
|
6
scripts/kconfig/tests/choice_randomize/expected_config0
Normal file
6
scripts/kconfig/tests/choice_randomize/expected_config0
Normal file
@ -0,0 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Main menu
|
||||
#
|
||||
CONFIG_A=y
|
||||
# CONFIG_B is not set
|
8
scripts/kconfig/tests/choice_randomize/expected_config1
Normal file
8
scripts/kconfig/tests/choice_randomize/expected_config1
Normal file
@ -0,0 +1,8 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Main menu
|
||||
#
|
||||
# CONFIG_A is not set
|
||||
CONFIG_B=y
|
||||
CONFIG_X=y
|
||||
# CONFIG_Y is not set
|
8
scripts/kconfig/tests/choice_randomize/expected_config2
Normal file
8
scripts/kconfig/tests/choice_randomize/expected_config2
Normal file
@ -0,0 +1,8 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Main menu
|
||||
#
|
||||
# CONFIG_A is not set
|
||||
CONFIG_B=y
|
||||
# CONFIG_X is not set
|
||||
CONFIG_Y=y
|
Loading…
Reference in New Issue
Block a user