Here are the test cases I used for developing the text expansion feature.
Unified · Split
| @@ -0,0 +1,27 @@ | ||
| 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)) | |
| @@ -0,0 +1,9 @@ | ||
| 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') | |
| @@ -0,0 +1,5 @@ | ||
| 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 | |
| @@ -0,0 +1 @@ | ||
| 1 | +hello world 0 | |
| @@ -0,0 +1,5 @@ | ||
| 1 | +# SPDX-License-Identifier: GPL-2.0 | |
| 2 | + | |
| 3 | +X = $(Y) | |
| 4 | +Y = $(X) | |
| 5 | +$(info $(X)) | |
| @@ -0,0 +1,11 @@ | ||
| 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') | |
| @@ -0,0 +1 @@ | ||
| 1 | +Kconfig:5: Recursive variable 'X' references itself (eventually) | |
| @@ -0,0 +1,44 @@ | ||
| 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)) | |
| @@ -0,0 +1,8 @@ | ||
| 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') | |
| @@ -0,0 +1,10 @@ | ||
| 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: $( | |
| @@ -0,0 +1,53 @@ | ||
| 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)) | |
| @@ -0,0 +1,8 @@ | ||
| 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') | |
| @@ -0,0 +1,9 @@ | ||
| 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. | |