1include(${CMAKE_CURRENT_LIST_DIR}/test_utils.cmake)
2
3# No keywords that miss any values, _KEYWORDS_MISSING_VALUES should not be defined
4cmake_parse_arguments(PREF "" "P1" "P2" P1 p1 P2 p2_a p2_b)
5
6TEST(PREF_KEYWORDS_MISSING_VALUES "UNDEFINED")
7
8# Keyword should even be deleted from the actual scope
9set(PREF_KEYWORDS_MISSING_VALUES "What ever")
10cmake_parse_arguments(PREF "" "" "")
11
12TEST(PREF_KEYWORDS_MISSING_VALUES "UNDEFINED")
13
14# Given missing keywords as only option
15cmake_parse_arguments(PREF "" "P1" "P2" P1)
16
17TEST(PREF_KEYWORDS_MISSING_VALUES "P1")
18TEST(PREF_P1 "UNDEFINED")
19TEST(PREF_UNPARSED_ARGUMENTS "UNDEFINED")
20
21# Mixed with unparsed arguments
22cmake_parse_arguments(UPREF "" "P1" "P2" A B P2 C P1)
23TEST(UPREF_KEYWORDS_MISSING_VALUES "P1")
24TEST(UPREF_UNPARSED_ARGUMENTS A B)
25
26# one_value_keyword followed by option
27cmake_parse_arguments(REF "OP" "P1" "" P1 OP)
28TEST(REF_KEYWORDS_MISSING_VALUES "P1")
29TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
30TEST(REF_OP "TRUE")
31
32# Counter Test
33cmake_parse_arguments(REF "OP" "P1" "" P1 p1 OP)
34TEST(REF_KEYWORDS_MISSING_VALUES "UNDEFINED")
35TEST(REF_P1 "p1")
36TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
37TEST(REF_OP "TRUE")
38
39# one_value_keyword followed by a one_value_keyword
40cmake_parse_arguments(REF "" "P1;P2" "" P1 P2 p2)
41TEST(REF_KEYWORDS_MISSING_VALUES "P1")
42TEST(REF_P1 "UNDEFINED")
43TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
44TEST(REF_P2 "p2")
45
46# Counter Test
47cmake_parse_arguments(REF "" "P1;P2" "" P1 p1 P2 p2)
48TEST(REF_KEYWORDS_MISSING_VALUES "UNDEFINED")
49TEST(REF_P1 "p1")
50TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
51TEST(REF_P2 "p2")
52
53# one_value_keyword followed by a multi_value_keywords
54cmake_parse_arguments(REF "" "P1" "P2" P1 P2 p1 p2)
55TEST(REF_KEYWORDS_MISSING_VALUES "P1")
56TEST(REF_P1 "UNDEFINED")
57TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
58TEST(REF_P2 p1 p2)
59
60# Counter Examples
61cmake_parse_arguments(REF "" "P1" "P2" P1 p1 P2 p1 p2)
62TEST(REF_KEYWORDS_MISSING_VALUES "UNDEFINED")
63TEST(REF_P1 "p1")
64TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
65TEST(REF_P2 p1 p2)
66
67# multi_value_keywords as only option
68cmake_parse_arguments(REF "" "P1" "P2" P2)
69TEST(REF_KEYWORDS_MISSING_VALUES "P2")
70TEST(REF_P1 "UNDEFINED")
71TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
72TEST(REF_P2 "UNDEFINED")
73
74# multi_value_keywords followed by option
75cmake_parse_arguments(REF "O1" "" "P1" P1 O1)
76TEST(REF_KEYWORDS_MISSING_VALUES "P1")
77TEST(REF_P1 "UNDEFINED")
78TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
79TEST(REF_O1 "TRUE")
80
81# counter test
82cmake_parse_arguments(REF "O1" "" "P1" P1 p1 p2 O1)
83TEST(REF_KEYWORDS_MISSING_VALUES "UNDEFINED")
84TEST(REF_P1 "p1;p2")
85TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
86TEST(REF_O1 "TRUE")
87
88# multi_value_keywords followed by one_value_keyword
89cmake_parse_arguments(REF "" "P1" "P2" P2 P1 p1)
90TEST(REF_KEYWORDS_MISSING_VALUES "P2")
91TEST(REF_P1 "p1")
92TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
93TEST(REF_P2 "UNDEFINED")
94
95# counter test
96cmake_parse_arguments(REF "" "P1" "P2" P2 p2 P1 p1)
97TEST(REF_KEYWORDS_MISSING_VALUES "UNDEFINED")
98TEST(REF_P1 "p1")
99TEST(REF_UNPARSED_ARGUMENTS "UNDEFINED")
100TEST(REF_P2 "p2")
101
102# one_value_keyword as last argument
103cmake_parse_arguments(REF "" "P1" "P2" A P2 p2 P1)
104TEST(REF_KEYWORDS_MISSING_VALUES "P1")
105TEST(REF_P1 "UNDEFINED")
106TEST(REF_UNPARSED_ARGUMENTS "A")
107TEST(REF_P2 "p2")
108
109# multi_value_keywords as last argument
110cmake_parse_arguments(REF "" "P1" "P2" P1 p1 P2)
111TEST(REF_KEYWORDS_MISSING_VALUES "P2")
112TEST(REF_P1 "p1")
113TEST(REF_P2 "UNDEFINED")
114
115# Multiple one_value_keyword and multi_value_keywords at different places
116cmake_parse_arguments(REF "O1;O2" "P1" "P2" P1 O1 P2 O2)
117TEST(REF_KEYWORDS_MISSING_VALUES P1 P2)
118TEST(REF_P1 "UNDEFINED")
119TEST(REF_P2 "UNDEFINED")
120
121# Duplicated missing keywords
122cmake_parse_arguments(REF "O1;O2" "P1" "P2" P1 O1 P2 O2 P1 P2)
123TEST(REF_KEYWORDS_MISSING_VALUES P1 P2)
124TEST(REF_P1 "UNDEFINED")
125TEST(REF_P2 "UNDEFINED")
126
127# make sure keywords that are never used, don't get added to KEYWORDS_MISSING_VALUES
128cmake_parse_arguments(REF "O1;O2" "P1" "P2")
129TEST(REF_KEYWORDS_MISSING_VALUES "UNDEFINED")
130TEST(REF_O1 FALSE)
131TEST(REF_O2 FALSE)
132TEST(REF_P1 UNDEFINED)
133TEST(REF_P2 UNDEFINED)
134