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
147
148
149
150
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 }