@@ -32,80 +32,75 @@ def test_recursively_expanded():
3232 value = symbol_table .fetch ("CFLAGS" )
3333 assert value == "-g -Wall" , value
3434
35- @pytest .mark .skip (reason = "FIXME push/pop" )
36- def test_simple_push_pop ():
35+ def test_simple_layer ():
3736 symbol_table = symtable .SymbolTable ()
38- symbol_table .add ("target" , [ "abcdefghijklmnopqrstuvwxyz" ] )
37+ symbol_table .add ("target" , "abcdefghijklmnopqrstuvwxyz" )
3938
40- symbol_table .push ( "target" )
41- symbol_table .add ("target" , [ "12345" ] )
39+ symbol_table .push_layer ( )
40+ symbol_table .add ("target" , "12345" )
4241 value = symbol_table .fetch ("target" )
43- assert value == [ "12345" ]
42+ assert value == "12345"
4443
45- symbol_table .pop ( "target" )
44+ symbol_table .pop_layer ( )
4645 value = symbol_table .fetch ("target" )
47- assert value == [ "abcdefghijklmnopqrstuvwxyz" ]
46+ assert value == "abcdefghijklmnopqrstuvwxyz"
4847
49- @pytest .mark .skip (reason = "FIXME push/pop" )
5048def test_push_push_pop_pop ():
5149 symbol_table = symtable .SymbolTable ()
52- symbol_table .add ("target" , [ "abcdefghijklmnopqrstuvwxyz" ] )
50+ symbol_table .add ("target" , "abcdefghijklmnopqrstuvwxyz" )
5351
54- symbol_table .push ( "target" )
55- symbol_table .add ("target" , [ "12345" ] )
52+ symbol_table .push_layer ( )
53+ symbol_table .add ("target" , "12345" )
5654
57- symbol_table .push ( "target" )
58- symbol_table .add ("target" , [ "67890" ] )
55+ symbol_table .push_layer ( )
56+ symbol_table .add ("target" , "67890" )
5957
6058 value = symbol_table .fetch ("target" )
61- assert value == [ "67890" ]
59+ assert value == "67890"
6260
63- symbol_table .pop ( "target" )
61+ symbol_table .pop_layer ( )
6462 value = symbol_table .fetch ("target" )
65- assert value == [ "12345" ]
63+ assert value == "12345"
6664
67- symbol_table .pop ( "target" )
65+ symbol_table .pop_layer ( )
6866 value = symbol_table .fetch ("target" )
69- assert value == [ "abcdefghijklmnopqrstuvwxyz" ]
67+ assert value == "abcdefghijklmnopqrstuvwxyz"
7068
71- @pytest .mark .skip (reason = "FIXME push/pop" )
7269def test_push_pop_undefined ():
7370 # "If var was undefined before the foreach function call, it is undefined after the call."
7471 symbol_table = symtable .SymbolTable ()
7572
76- symbol_table .push ( "target" )
77- symbol_table .add ("target" , [ "12345" ] )
73+ symbol_table .push_layer ( )
74+ symbol_table .add ("target" , "12345" )
7875 value = symbol_table .fetch ("target" )
79- assert value == [ "12345" ]
76+ assert value == "12345"
8077
81- symbol_table .pop ( "target" )
78+ symbol_table .pop_layer ( )
8279 value = symbol_table .fetch ("target" )
8380 assert value == ""
8481
85- @pytest .mark .skip (reason = "FIXME push/pop" )
8682def test_push_pop_pop ():
8783 # too many pops
8884 symbol_table = symtable .SymbolTable ()
89- symbol_table .add ("target" , [ "abcdefghijklmnopqrstuvwxyz" ] )
85+ symbol_table .add ("target" , "abcdefghijklmnopqrstuvwxyz" )
9086
91- symbol_table .push ( "target" )
92- symbol_table .add ("target" , [ "12345" ] )
87+ symbol_table .push_layer ( )
88+ symbol_table .add ("target" , "12345" )
9389 value = symbol_table .fetch ("target" )
94- assert value == [ "12345" ]
90+ assert value == "12345"
9591
96- symbol_table .pop ( "target" )
92+ symbol_table .pop_layer ( )
9793 value = symbol_table .fetch ("target" )
98- assert value == [ "abcdefghijklmnopqrstuvwxyz" ]
94+ assert value == "abcdefghijklmnopqrstuvwxyz"
9995
10096 try :
101- symbol_table .pop ( "target" )
97+ symbol_table .pop_layer ( )
10298 except IndexError :
10399 pass
104100 else :
105101 # expected IndexError
106102 assert 0
107103
108- @pytest .mark .skip (reason = "FIXME push/pop" )
109104def test_env_var ():
110105 # environment variables should act like regular vars
111106 symbol_table = symtable .SymbolTable ()
@@ -115,12 +110,12 @@ def test_env_var():
115110 assert save_path
116111 assert symbol_table .origin ("PATH" ) == "environment"
117112
118- symbol_table .push ( "PATH" )
113+ symbol_table .push_layer ( )
119114 symbol_table .add ("PATH" , "a:b:c:" )
120115 value = symbol_table .fetch ("PATH" )
121116 assert value == "a:b:c:"
122117
123- symbol_table .pop ( "PATH" )
118+ symbol_table .pop_layer ( )
124119
125120 path = symbol_table .fetch ("PATH" )
126121 assert path == save_path
@@ -144,6 +139,13 @@ def test_is_defined():
144139 symbol_table .add ("FOO" , "BAR" )
145140 assert symbol_table .is_defined ("FOO" )
146141
142+ assert not symbol_table .is_defined ("DAVE" )
143+ symbol_table .push_layer ()
144+ symbol_table .add ("DAVE" ,"dave" )
145+ assert symbol_table .is_defined ("DAVE" )
146+ symbol_table .pop_layer ()
147+ assert not symbol_table .is_defined ("DAVE" )
148+
147149def test_maybe_add ():
148150 symbol_table = symtable .SymbolTable ()
149151
@@ -286,5 +288,58 @@ def test_command_line_multiple_var():
286288 assert symbol_table .origin ("FOO" ) == "command line"
287289
288290def test_layers ():
289- pass
291+ symbol_table = symtable .SymbolTable ()
292+ symbol_table .add ("FOO" , Literal ("foo" ))
293+ symbol_table .push_layer ()
294+ value = symbol_table .fetch ("FOO" )
295+ assert value == "foo" # unchanged
296+
297+ def test_layers_variables ():
298+ symbol_table = symtable .SymbolTable ()
299+
300+ symbol_table .add ("FOO" , Literal ("foo" ))
301+ varlist = symbol_table .variables (None )
302+ assert "FOO" in varlist
303+
304+ symbol_table .push_layer ()
305+ varlist = symbol_table .variables (None )
306+ assert "FOO" in varlist
307+
308+ @pytest .mark .skip ("undefine FIXME" )
309+ def test_layers_undefine ():
310+ symbol_table = symtable .SymbolTable ()
311+
312+ symbol_table .add ("FOO" , Literal ("foo" ))
313+ symbol_table .push_layer ()
314+ symbol_table .add ("FOO" , Literal ("bar" ))
315+
316+ symbol_table .undefine ("FOO" )
317+ varlist = symbol_table .variables (None )
318+ assert "FOO" not in varlist
319+ symbol_table .pop_layer ()
320+ varlist = symbol_table .variables (None )
321+ assert "FOO" in varlist
322+
323+ @pytest .mark .skip ("foo" )
324+ def test_layer_append ():
325+ symbol_table = symtable .SymbolTable ()
326+
327+ symbol_table .add ("FOO" , Literal ("foo" ))
328+ symbol_table .push_layer ()
329+ symbol_table .append ("FOO" , Literal ("bar" ))
330+ value = symbol_table .fetch ("FOO" )
331+ # assert value=="foobar"
332+ symbol_table .pop_layer ()
333+ value = symbol_table .fetch ("FOO" )
334+ # assert value=="foo"
335+
336+ def test_global_export_layers ():
337+ makefile = """
338+ export
339+
340+ all:FOO:=bar
341+ all:
342+ printenv FOO
343+ """
344+ run .simple_test (makefile )
290345
0 commit comments