Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

kconfig: test: add Kconfig macro language tests

Here are the test cases I used for developing the text expansion
feature.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

+191
+27
scripts/kconfig/tests/preprocess/builtin_func/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + 3 + # 'info' prints the argument to stdout. 4 + $(info,hello world 0) 5 + 6 + # 'warning-if', if the first argument is y, sends the second argument to stderr, 7 + # and the message is prefixed with the current file name and line number. 8 + $(warning-if,y,hello world 1) 9 + 10 + # 'error-if' is similar, but it terminates the parsing immediately. 11 + # The following is just no-op since the first argument is not y. 12 + $(error-if,n,this should not be printed) 13 + 14 + # Shorthand 15 + warning = $(warning-if,y,$(1)) 16 + 17 + # 'shell' executes a command, and returns its stdout. 18 + $(warning,$(shell,echo hello world 3)) 19 + 20 + # Every newline in the output is replaced with a space, 21 + # but any trailing newlines are deleted. 22 + $(warning,$(shell,printf 'hello\nworld\n\n4\n\n\n')) 23 + 24 + # 'filename' is expanded to the currently parsed file name, 25 + # 'lineno' to the line number. 26 + $(warning,filename=$(filename)) 27 + $(warning,lineno=$(lineno))
+9
scripts/kconfig/tests/preprocess/builtin_func/__init__.py
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + """ 3 + Built-in function tests. 4 + """ 5 + 6 + def test(conf): 7 + assert conf.oldaskconfig() == 0 8 + assert conf.stdout_contains('expected_stdout') 9 + assert conf.stderr_matches('expected_stderr')
+5
scripts/kconfig/tests/preprocess/builtin_func/expected_stderr
··· 1 + Kconfig:8: hello world 1 2 + Kconfig:18: hello world 3 3 + Kconfig:22: hello world 4 4 + Kconfig:26: filename=Kconfig 5 + Kconfig:27: lineno=27
+1
scripts/kconfig/tests/preprocess/builtin_func/expected_stdout
··· 1 + hello world 0
+5
scripts/kconfig/tests/preprocess/circular_expansion/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + 3 + X = $(Y) 4 + Y = $(X) 5 + $(info $(X))
+11
scripts/kconfig/tests/preprocess/circular_expansion/__init__.py
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + """ 3 + Detect circular variable expansion. 4 + 5 + If a recursively expanded variable references itself (eventually), 6 + it should fail with an error message. 7 + """ 8 + 9 + def test(conf): 10 + assert conf.oldaskconfig() != 0 11 + assert conf.stderr_matches('expected_stderr')
+1
scripts/kconfig/tests/preprocess/circular_expansion/expected_stderr
··· 1 + Kconfig:5: Recursive variable 'X' references itself (eventually)
+44
scripts/kconfig/tests/preprocess/escape/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + 3 + # Shorthand 4 + warning = $(warning-if,y,$(1)) 5 + 6 + # You can not pass commas directly to a function since they are treated as 7 + # delimiters. You can use the following trick to do so. 8 + comma := , 9 + $(warning,hello$(comma) world) 10 + 11 + # Like Make, single quotes, double quotes, spaces are treated verbatim. 12 + # The following prints the text as-is. 13 + $(warning, ' " '" ' ''' "'") 14 + 15 + # Unlike Make, '$' has special meaning only when it is followed by '('. 16 + # No need to escape '$' itself. 17 + $(warning,$) 18 + $(warning,$$) 19 + $ := 1 20 + $(warning,$($)) 21 + 22 + # You need a trick to escape '$' followed by '(' 23 + # The following should print "$(X)". It should not be expanded further. 24 + dollar := $ 25 + $(warning,$(dollar)(X)) 26 + 27 + # You need a trick to treat unbalanced parentheses. 28 + # The following should print "(". 29 + left_paren := ( 30 + $(warning,$(left_paren)) 31 + 32 + # A simple expanded should not be expanded multiple times. 33 + # The following should print "$(X)". It should not be expanded further. 34 + Y := $(dollar)(X) 35 + $(warning,$(Y)) 36 + 37 + # The following should print "$(X)" as well. 38 + Y = $(dollar)(X) 39 + $(warning,$(Y)) 40 + 41 + # The following should print "$(". 42 + # It should not be emit "unterminated reference" error. 43 + unterminated := $(dollar)( 44 + $(warning,$(unterminated))
+8
scripts/kconfig/tests/preprocess/escape/__init__.py
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + """ 3 + Escape sequence tests. 4 + """ 5 + 6 + def test(conf): 7 + assert conf.oldaskconfig() == 0 8 + assert conf.stderr_matches('expected_stderr')
+10
scripts/kconfig/tests/preprocess/escape/expected_stderr
··· 1 + Kconfig:9: hello, world 2 + Kconfig:13: ' " '" ' ''' "'" 3 + Kconfig:17: $ 4 + Kconfig:18: $$ 5 + Kconfig:20: 1 6 + Kconfig:25: $(X) 7 + Kconfig:30: ( 8 + Kconfig:35: $(X) 9 + Kconfig:39: $(X) 10 + Kconfig:44: $(
+53
scripts/kconfig/tests/preprocess/variable/Kconfig
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + 3 + # Shorthand 4 + warning = $(warning-if,y,$(1)) 5 + 6 + # Simply expanded variable. 7 + X := 1 8 + SIMPLE := $(X) 9 + X := 2 10 + $(warning,SIMPLE = $(SIMPLE)) 11 + 12 + # Recursively expanded variable. 13 + X := 1 14 + RECURSIVE = $(X) 15 + X := 2 16 + $(warning,RECURSIVE = $(RECURSIVE)) 17 + 18 + # Append something to a simply expanded variable. 19 + Y := 3 20 + SIMPLE += $(Y) 21 + Y := 4 22 + $(warning,SIMPLE = $(SIMPLE)) 23 + 24 + # Append something to a recursively expanded variable. 25 + Y := 3 26 + RECURSIVE += $(Y) 27 + Y := 4 28 + $(warning,RECURSIVE = $(RECURSIVE)) 29 + 30 + # Use += operator to an undefined variable. 31 + # This works as a recursively expanded variable. 32 + Y := 3 33 + UNDEFINED_VARIABLE += $(Y) 34 + Y := 4 35 + $(warning,UNDEFINED_VARIABLE = $(UNDEFINED_VARIABLE)) 36 + 37 + # You can use variable references for the lefthand side of assignment statement. 38 + X := A 39 + Y := B 40 + $(X)$(Y) := 5 41 + $(warning,AB = $(AB)) 42 + 43 + # User-defined function. 44 + greeting = $(1), my name is $(2). 45 + $(warning,$(greeting,Hello,John)) 46 + 47 + # The number of arguments is not checked for user-defined functions. 48 + # If some arguments are optional, it is useful to pass fewer parameters. 49 + # $(2) will be blank in this case. 50 + $(warning,$(greeting,Hello)) 51 + 52 + # Unreferenced parameters are just ignored. 53 + $(warning,$(greeting,Hello,John,ignored,ignored))
+8
scripts/kconfig/tests/preprocess/variable/__init__.py
··· 1 + # SPDX-License-Identifier: GPL-2.0 2 + """ 3 + Variable and user-defined function tests. 4 + """ 5 + 6 + def test(conf): 7 + assert conf.oldaskconfig() == 0 8 + assert conf.stderr_matches('expected_stderr')
+9
scripts/kconfig/tests/preprocess/variable/expected_stderr
··· 1 + Kconfig:10: SIMPLE = 1 2 + Kconfig:16: RECURSIVE = 2 3 + Kconfig:22: SIMPLE = 1 3 4 + Kconfig:28: RECURSIVE = 2 4 5 + Kconfig:35: UNDEFINED_VARIABLE = 4 6 + Kconfig:41: AB = 5 7 + Kconfig:45: Hello, my name is John. 8 + Kconfig:50: Hello, my name is . 9 + Kconfig:53: Hello, my name is John.