Skip to content

Commit

Permalink
kconfig: tests: test randconfig for choice in choice
Browse files Browse the repository at this point in the history
Commit 3b9a19e ("kconfig: loop as long as we changed some symbols
in randconfig") fixed randconfig where a choice contains a sub-choice.
Prior to that commit, the sub-choice values were not set.

I am not sure whether this is an intended feature or just something
people discovered works, but it is used in the real world;
drivers/usb/gadget/legacy/Kconfig is source'd in a choice context,
then creates a sub-choice in it.

For the test case in this commit, there are 3 possible results.

Case 1:
  CONFIG_A=y
  # CONFIG_B is not set

Case 2:
  # CONFIG_A is not set
  CONFIG_B=y
  CONFIG_C=y
  # CONFIG_D is not set

Case 3:
  # CONFIG_A is not set
  CONFIG_B=y
  # CONFIG_C is not set
  CONFIG_D=y
  CONFIG_E=y

So, this test iterates several times, and checks if the result is
either of the three.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Reviewed-by: Ulf Magnusson <ulfalizer@gmail.com>
  • Loading branch information
Masahiro Yamada committed Mar 25, 2018
1 parent beaaddb commit 3e4888c
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 0 deletions.
33 changes: 33 additions & 0 deletions scripts/kconfig/tests/rand_nested_choice/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
choice
prompt "choice"

config A
bool "A"

config B
bool "B"

if B
choice
prompt "sub choice"

config C
bool "C"

config D
bool "D"

if D
choice
prompt "subsub choice"

config E
bool "E"

endchoice
endif # D

endchoice
endif # B

endchoice
16 changes: 16 additions & 0 deletions scripts/kconfig/tests/rand_nested_choice/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
Set random values recursively in nested choices.
Kconfig can create a choice-in-choice structure by using 'if' statement.
randconfig should correctly set random choice values.
Related Linux commit: 3b9a19e08960e5cdad5253998637653e592a3c29
"""


def test(conf):
for i in range(20):
assert conf.randconfig() == 0
assert (conf.config_contains('expected_stdout0') or
conf.config_contains('expected_stdout1') or
conf.config_contains('expected_stdout2'))
2 changes: 2 additions & 0 deletions scripts/kconfig/tests/rand_nested_choice/expected_stdout0
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONFIG_A=y
# CONFIG_B is not set
4 changes: 4 additions & 0 deletions scripts/kconfig/tests/rand_nested_choice/expected_stdout1
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# CONFIG_A is not set
CONFIG_B=y
CONFIG_C=y
# CONFIG_D is not set
5 changes: 5 additions & 0 deletions scripts/kconfig/tests/rand_nested_choice/expected_stdout2
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# CONFIG_A is not set
CONFIG_B=y
# CONFIG_C is not set
CONFIG_D=y
CONFIG_E=y

0 comments on commit 3e4888c

Please sign in to comment.