View Javadoc

1   /***
2    * Copyright (C) 2009, Gajo Csaba
3    *
4    * This file is free software; the author gives unlimited 
5    * permission to copy and/or distribute it, with or without
6    * modifications, as long as this notice is preserved.
7    * 
8    * For more information read the LICENSE file that came
9    * with this distribution. 
10   */
11  package net.sourceforge.makefileparser.test;
12  
13  import java.io.IOException;
14  import java.io.StringReader;
15  import java.text.ParseException;
16  
17  import net.sourceforge.makefileparser.Parser;
18  import net.sourceforge.makefileparser.managers.VariableManager;
19  import net.sourceforge.makefileparser.objects.Target;
20  
21  import junit.framework.TestCase;
22  
23  /***
24   * Test the Parser
25   * @author cgajo
26   */
27  public class ParserTest extends TestCase {
28  
29  	private VariableManager varManager = null;
30  	
31  	protected void setUp() throws Exception {
32  		super.setUp();
33  		varManager = new VariableManager();
34  	}
35  	
36  	public void testVar1() {
37  		try {
38  			StringReader in = new StringReader(
39  					"AAA =BBB\n" +
40  					"BBB= $(CCC)\n" +
41  					"CCC=xxx\n" +
42  					"DDD = $(AAA)\n" +
43  					"EEE                         =                \t\thello world $(CCC) \n" +
44  					"FFF = the quick brown fox # jumps over the slow dog\n" +
45  					"GGG = this is//\n" +
46  					"a multiline text");
47  			Parser parser = new Parser(varManager);
48  			parser.parse(in);
49  			assertEquals("BBB", varManager.getValue("AAA"));
50  			assertEquals("BBB", varManager.getValue("DDD"));
51  			assertEquals("xxx", varManager.getValue("BBB"));
52  			assertEquals("hello world xxx ", varManager.getValue("EEE"));
53  			assertEquals("the quick brown fox ", varManager.getValue("FFF"));
54  			assertEquals("this is a multiline text", varManager.getValue("GGG"));
55  		} catch (ParseException pex) {
56  			fail(pex.toString());
57  		} catch (IOException iex) {
58  			fail(iex.toString());
59  		}
60  	}
61  	
62  	public void testVar2() {
63  		try {
64  			StringReader in = new StringReader(
65  					"AAA = egy\n" +
66  					"BBB := ketto\n" +
67  					"CCC := $(EEE)\n" +
68  					"DDD := $(FFF)\n" +
69  					"EEE = harom\n" +
70  					"FFF := $(AAA)\n" +
71  					"GGG ?= negy\n" +
72  					"GGG ?= ot\n" +
73  					"HHH += het\n" +
74  					"HHH += nyolc\n" +
75  					"III = $(JJJ)\n" +
76  					"JJJ = kilenc\n" +
77  					"JJJ = tiz");
78  			Parser parser = new Parser(varManager);
79  			parser.parse(in);
80  			
81  			assertEquals("egy", varManager.getValue("AAA"));
82  			assertEquals("ketto", varManager.getValue("BBB"));
83  			assertEquals("", varManager.getValue("CCC"));
84  			assertEquals("", varManager.getValue("DDD"));
85  			assertEquals("harom", varManager.getValue("EEE"));
86  			assertEquals("egy", varManager.getValue("FFF"));
87  			assertEquals("negy", varManager.getValue("GGG"));
88  			assertEquals("het nyolc", varManager.getValue("HHH"));
89  			assertEquals("tiz", varManager.getValue("III"));
90  			assertEquals("tiz", varManager.getValue("JJJ"));
91  		} catch (Throwable t) {
92  			fail(t.toString());
93  		}
94  	}
95  	
96  	public void testTarget1() {
97  		try {
98  			StringReader in = new StringReader(
99  					"AAA = egy\n" +
100 					"BBB := ketto\n" +
101 					"\n" +
102 					"first_target: \n" +
103 					"\t@echo hello\n" +
104 					"\n" +
105 					"second_target : first_target\n" +
106 					"\t@echo \"world\"");
107 			Parser parser = new Parser(varManager);
108 			parser.parse(in);
109 			
110 			assertEquals("egy", varManager.getValue("AAA"));
111 			assertEquals("ketto", varManager.getValue("BBB"));
112 			assertEquals(2, parser.getTargets().size());
113 			Target target1 = parser.getTargets().get(0);
114 			Target target2 = parser.getTargets().get(1);
115 			assertEquals("first_target", target1.getName());
116 			assertEquals("second_target", target2.getName());
117 			assertTrue(target1.getNormalPrerequisites().isEmpty());
118 			assertFalse(target2.getNormalPrerequisites().isEmpty());
119 			assertEquals("first_target", target2.getNormalPrerequisites().get(0));
120 			assertTrue(target2.getOrderOnlyPrerequisites().isEmpty());
121 			assertFalse(target1.getCommands().isEmpty());
122 			assertFalse(target2.getCommands().isEmpty());
123 			assertEquals("@echo hello", target1.getCommands().get(0).getValue());
124 			assertEquals("@echo \"world\"", target2.getCommands().get(0).getValue());
125 		} catch (ParseException pex) {
126 			fail(pex.toString());
127 		} catch (IOException iex) {
128 			fail(iex.toString());
129 		}
130 	}
131 	
132 	public void testTarget2() {
133 		try {
134 			StringReader in = new StringReader(
135 					"# the base directory\n" +
136 					"TOP = ..\n" +
137 					"IMGS = $(TOP)/img/\n" +
138 					"CFLAGS = -o test.o\n" +
139 					"TARGET = $(TOP)/target\n" +
140 					"\n" +
141 					"install: compile do_stuff | test\n" +
142 					"\t@zip -r9 pack.zip $(TARGET)\n" +
143 					"compile :: \n" +
144 					"\t$(CC) $(CFLAGS) *.cc\n" +
145 					/*
146 					"\n" +
147 					"define multivar\n" +
148 					"aaa\n" +
149 					"bbb\n" +
150 					"endef\n" +
151 					*/
152 					"\n" +
153 					"\n" +
154 					"# this is a random comment //\n" +
155 					"  which happens to go on multiple lines...\n" +
156 					"test:\n" +
157 					"\t$(CC) -g *.cc\n" +
158 					"\n" +
159 					"compile::do_stuff\n" +
160 					"\t@echo hello\n" +
161 					"\n" +
162 					"do_stuff : # this target does some stuff\n" +
163 					"\t@echo XXX!!!\n" +
164 					"\t@echo hello //\n" +
165 					"world!\n" +
166 					"\n" +
167 					"# and for the end, a variable!\n" +
168 					"XXX ?= $(IMGS)\n +" +
169 					"# and some more complex stuff\n" +
170 					"override WWW := zzz\n" +
171 					"WWW := not zzz");
172 			Parser parser = new Parser(varManager);
173 			parser.parse(in);
174 			
175 			assertEquals("..", varManager.getValue("TOP"));
176 			assertEquals("../img/", varManager.getValue("IMGS"));
177 			assertEquals("-o test.o", varManager.getValue("CFLAGS"));
178 			assertEquals("../target", varManager.getValue("TARGET"));
179 			assertEquals("../img/", varManager.getValue("XXX"));
180 			assertEquals("zzz", varManager.getValue("WWW"));
181 			
182 			assertEquals(5, parser.getTargets().size());
183 			assertEquals("install", parser.getTargets().get(0).getName());
184 			assertEquals("compile", parser.getTargets().get(1).getName());
185 			assertEquals("test", parser.getTargets().get(2).getName());
186 			assertEquals("compile", parser.getTargets().get(3).getName());
187 			assertEquals("do_stuff", parser.getTargets().get(4).getName());
188 			
189 			assertEquals("compile", parser.getTargets().get(0).getNormalPrerequisites().get(0));
190 			assertEquals("do_stuff", parser.getTargets().get(0).getNormalPrerequisites().get(1));
191 			assertEquals("test", parser.getTargets().get(0).getOrderOnlyPrerequisites().get(0));
192 			assertEquals("@zip -r9 pack.zip $(TARGET)", parser.getTargets().get(0).getCommands().get(0).getValue());
193 			parser.getTargets().get(0).getCommands().get(0).expandVariables(varManager);
194 			assertEquals("@zip -r9 pack.zip ../target", parser.getTargets().get(0).getCommands().get(0).getValue());
195 			assertEquals(2, parser.getTargets().get(4).getCommands().size());
196 			assertEquals("@echo hello world!", parser.getTargets().get(4).getCommands().get(1).getValue());
197 			
198 		} catch (ParseException pex) {
199 			fail(pex.toString());
200 		} catch (IOException iex) {
201 			fail(iex.toString());
202 		}
203 	}
204 	
205 	public void testTarget3() {
206 		try {
207 			StringReader in = new StringReader(
208 					"XXX = aaa\n" +
209 					"override XXX = bbb\n" +
210 					"XXX = ccc\n" +
211 					"\n" +
212 					"override AAA = aaa\n" +
213 					"override AAA = bbb\n" +
214 					"AAA = ccc\n" +
215 					"\n" +
216 					"override CCC := aaa\n" +
217 					"CCC := bbb\n" +
218 					"override CCC = ccc");
219 			Parser parser = new Parser(varManager);
220 			parser.parse(in);
221 			
222 			assertEquals("bbb", varManager.getValue("XXX"));
223 			assertEquals("bbb", varManager.getValue("AAA"));
224 			assertEquals("ccc", varManager.getValue("CCC"));
225 			
226 		} catch (ParseException pex) {
227 			fail(pex.toString());
228 		} catch (IOException iex) {
229 			fail(iex.toString());
230 		}
231 	}
232 	
233 	public void testVarDef() {
234 		try {
235 			StringReader in = new StringReader(
236 					"define aaa   \n" +
237 					"hello\n" +
238 					"world\n" +
239 					"endef\n" +
240 					"#the end");
241 			Parser parser = new Parser(varManager);
242 			parser.parse(in);
243 			
244 			assertEquals("hello\nworld\n", varManager.getValue("aaa"));
245 			
246 		} catch (ParseException pex) {
247 			fail(pex.toString());
248 		} catch (IOException iex) {
249 			fail(iex.toString());
250 		}
251 	}
252 
253 }