History

kconfig: test: add Kconfig macro language tests

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

Masahiro Yamada committed 8 years ago

Commit 2bece881 parent 316d55d13 files · +191 −0Browse files

Showing the changes to scripts (13 of 13 files). Show all

Unified · Split

13 files
  1. scripts/kconfig/tests/preprocess/builtin_func/Kconfig +27 −0
  2. scripts/kconfig/tests/preprocess/builtin_func/__init__.py +9 −0
  3. scripts/kconfig/tests/preprocess/builtin_func/expected_stderr +5 −0
  4. scripts/kconfig/tests/preprocess/builtin_func/expected_stdout +1 −0
  5. scripts/kconfig/tests/preprocess/circular_expansion/Kconfig +5 −0
  6. scripts/kconfig/tests/preprocess/circular_expansion/__init__.py +11 −0
  7. scripts/kconfig/tests/preprocess/circular_expansion/expected_stderr +1 −0
  8. scripts/kconfig/tests/preprocess/escape/Kconfig +44 −0
  9. scripts/kconfig/tests/preprocess/escape/__init__.py +8 −0
  10. scripts/kconfig/tests/preprocess/escape/expected_stderr +10 −0
  11. scripts/kconfig/tests/preprocess/variable/Kconfig +53 −0
  12. scripts/kconfig/tests/preprocess/variable/__init__.py +8 −0
  13. scripts/kconfig/tests/preprocess/variable/expected_stderr +9 −0
scripts/kconfig/tests/preprocess/builtin_func/Kconfig+27−0
@@ -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))
scripts/kconfig/tests/preprocess/builtin_func/__init__.py+9−0
@@ -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')
scripts/kconfig/tests/preprocess/builtin_func/expected_stderr+5−0
@@ -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
scripts/kconfig/tests/preprocess/builtin_func/expected_stdout+1−0
@@ -0,0 +1 @@
1+hello world 0
scripts/kconfig/tests/preprocess/circular_expansion/Kconfig+5−0
@@ -0,0 +1,5 @@
1+# SPDX-License-Identifier: GPL-2.0
2+
3+X = $(Y)
4+Y = $(X)
5+$(info $(X))
scripts/kconfig/tests/preprocess/circular_expansion/__init__.py+11−0
@@ -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')
scripts/kconfig/tests/preprocess/circular_expansion/expected_stderr+1−0
@@ -0,0 +1 @@
1+Kconfig:5: Recursive variable 'X' references itself (eventually)
scripts/kconfig/tests/preprocess/escape/Kconfig+44−0
@@ -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))
scripts/kconfig/tests/preprocess/escape/__init__.py+8−0
@@ -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')
scripts/kconfig/tests/preprocess/escape/expected_stderr+10−0
@@ -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: $(
scripts/kconfig/tests/preprocess/variable/Kconfig+53−0
@@ -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))
scripts/kconfig/tests/preprocess/variable/__init__.py+8−0
@@ -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')
scripts/kconfig/tests/preprocess/variable/expected_stderr+9−0
@@ -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.