• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2008, SnakeYAML
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14 package org.yaml.snakeyaml.comment;
15 
16 import static org.junit.Assert.assertEquals;
17 import static org.junit.Assert.fail;
18 
19 import java.util.Arrays;
20 import java.util.List;
21 import org.junit.Test;
22 import org.yaml.snakeyaml.events.Event;
23 import org.yaml.snakeyaml.events.Event.ID;
24 import org.yaml.snakeyaml.parser.Parser;
25 import org.yaml.snakeyaml.parser.ParserImpl;
26 import org.yaml.snakeyaml.reader.StreamReader;
27 
28 public class ParserWithCommentEnabledTest {
29 
30   private final boolean DEBUG = false;
31 
println(String s)32   private void println(String s) {
33     if (DEBUG) {
34       System.out.println(s);
35     }
36   }
37 
println()38   private void println() {
39     if (DEBUG) {
40       System.out.println();
41     }
42   }
43 
44 
assertEventListEquals(List<ID> expectedEventIdList, Parser parser)45   private void assertEventListEquals(List<ID> expectedEventIdList, Parser parser) {
46     for (ID expectedEventId : expectedEventIdList) {
47       parser.checkEvent(expectedEventId);
48       Event event = parser.getEvent();
49       println("Expected: " + expectedEventId);
50       println("Got: " + event);
51       println();
52       if (event == null) {
53         fail("Missing event: " + expectedEventId);
54       }
55       assertEquals(expectedEventId, event.getEventId());
56     }
57   }
58 
59   @SuppressWarnings("unused")
printEventList(Parser parser)60   private void printEventList(Parser parser) {
61     for (Event event = parser.getEvent(); event != null; event = parser.getEvent()) {
62       println("Got: " + event);
63       println();
64     }
65   }
66 
createParser(String data)67   private Parser createParser(String data) {
68     return new ParserImpl(new StreamReader(data), true);
69   }
70 
71   @Test
testEmpty()72   public void testEmpty() {
73     List<ID> expectedEventIdList = Arrays.asList(ID.StreamStart, ID.StreamEnd);
74     String data = "";
75     Parser sut = createParser(data);
76     assertEventListEquals(expectedEventIdList, sut);
77   }
78 
79   @Test
testParseWithOnlyComment()80   public void testParseWithOnlyComment() {
81     String data = "# Comment";
82     List<ID> expectedEventIdList = Arrays.asList(//
83         ID.StreamStart, //
84         ID.Comment, //
85         ID.StreamEnd //
86     );
87     Parser sut = createParser(data);
88     assertEventListEquals(expectedEventIdList, sut);
89   }
90 
91   @Test
testCommentEndingALine()92   public void testCommentEndingALine() {
93     String data = "" + //
94         "key: # Comment\n" + //
95         "  value\n";
96 
97     List<ID> expectedEventIdList = Arrays.asList(ID.StreamStart, //
98         ID.DocumentStart, //
99         ID.MappingStart, //
100         ID.Scalar, ID.Comment, ID.Scalar, //
101         ID.MappingEnd, //
102         ID.DocumentEnd, //
103         ID.StreamEnd);
104     Parser sut = createParser(data);
105     assertEventListEquals(expectedEventIdList, sut);
106   }
107 
108   @Test
testMultiLineComment()109   public void testMultiLineComment() {
110     String data = "" + //
111         "key: # Comment\n" + //
112         "     # lines\n" + //
113         "  value\n" + //
114         "\n";
115     List<ID> expectedEventIdList = Arrays.asList(ID.StreamStart, //
116         ID.DocumentStart, //
117         ID.MappingStart, //
118         ID.Scalar, ID.Comment, ID.Comment, ID.Scalar, //
119         ID.Comment, //
120         ID.MappingEnd, //
121         ID.DocumentEnd, //
122         ID.StreamEnd);
123     Parser sut = createParser(data);
124     assertEventListEquals(expectedEventIdList, sut);
125   }
126 
127   @Test
testBlankLine()128   public void testBlankLine() {
129     String data = "" + //
130         "\n";
131     List<ID> expectedEventIdList = Arrays.asList(ID.StreamStart, //
132         ID.Comment, //
133         ID.StreamEnd);
134     Parser sut = createParser(data);
135     assertEventListEquals(expectedEventIdList, sut);
136   }
137 
138   @Test
testBlankLineComments()139   public void testBlankLineComments() {
140     String data = "" + //
141         "\n" + //
142         "abc: def # commment\n" + //
143         "\n" + //
144         "\n";
145 
146     List<ID> expectedEventIdList = Arrays.asList(ID.StreamStart, //
147         ID.Comment, //
148         ID.DocumentStart, //
149         ID.MappingStart, //
150         ID.Scalar, ID.Scalar, ID.Comment, //
151         ID.Comment, //
152         ID.Comment, //
153         ID.MappingEnd, //
154         ID.DocumentEnd, //
155         ID.StreamEnd);
156     Parser sut = createParser(data);
157     assertEventListEquals(expectedEventIdList, sut);
158   }
159 
160   @Test
test_blockScalar()161   public void test_blockScalar() {
162     String data = "" + //
163         "abc: > # Comment\n" + //
164         "    def\n" + //
165         "    hij\n" + //
166         "\n";
167 
168     List<ID> expectedEventIdList = Arrays.asList(//
169         ID.StreamStart, //
170         ID.DocumentStart, //
171         ID.MappingStart, //
172         ID.Scalar, ID.Comment, //
173         ID.Scalar, //
174         ID.MappingEnd, //
175         ID.DocumentEnd, //
176         ID.StreamEnd //
177     );
178     Parser sut = createParser(data);
179     assertEventListEquals(expectedEventIdList, sut);
180   }
181 
182   @Test
testDirectiveLineEndComment()183   public void testDirectiveLineEndComment() {
184     String data = "%YAML 1.1 #Comment\n";
185     List<ID> expectedEventIdList = Arrays.asList(//
186         ID.StreamStart, //
187         ID.StreamEnd //
188     );
189     Parser sut = createParser(data);
190     assertEventListEquals(expectedEventIdList, sut);
191   }
192 
193   @Test
testSequence()194   public void testSequence() {
195     String data = "" + //
196         "# Comment\n" + //
197         "list: # InlineComment1\n" + //
198         "# Block Comment\n" + //
199         "- item # InlineComment2\n" + //
200         "# Comment\n";
201 
202     List<ID> expectedEventIdList = Arrays.asList(//
203         ID.StreamStart, //
204         ID.Comment, //
205         ID.DocumentStart, //
206         ID.MappingStart, //
207         ID.Scalar, ID.Comment, ID.Comment, //
208         ID.SequenceStart, //
209         ID.Scalar, ID.Comment, //
210         ID.Comment, //
211         ID.SequenceEnd, //
212         ID.MappingEnd, //
213         ID.DocumentEnd, //
214         ID.StreamEnd //
215     );
216     Parser sut = createParser(data);
217     assertEventListEquals(expectedEventIdList, sut);
218   }
219 
220   @Test
testAllComments1()221   public void testAllComments1() throws Exception {
222     String data = "" + //
223         "# Block Comment1\n" + //
224         "# Block Comment2\n" + //
225         "key: # Inline Comment1a\n" + //
226         "     # Inline Comment1b\n" + //
227         "  # Block Comment3a\n" + //
228         "  # Block Comment3b\n" + //
229         "  value # Inline Comment2\n" + //
230         "# Block Comment4\n" + //
231         "list: # InlineComment3a\n" + //
232         "      # InlineComment3b\n" + //
233         "# Block Comment5\n" + //
234         "- item1 # InlineComment4\n" + //
235         "- item2: [ value2a, value2b ] # InlineComment5\n" + //
236         "- item3: { key3a: [ value3a1, value3a2 ], key3b: value3b } # InlineComment6\n" + //
237         "# Block Comment6\n" + //
238         "---\n" + //
239         "# Block Comment7\n" + //
240         "";
241 
242     List<ID> expectedEventIdList = Arrays.asList(//
243         ID.StreamStart, //
244         ID.Comment, //
245         ID.Comment, //
246         ID.DocumentStart, //
247         ID.MappingStart, //
248         ID.Scalar, ID.Comment, ID.Comment, //
249 
250         ID.Comment, ID.Comment, //
251         ID.Scalar, ID.Comment, //
252 
253         ID.Comment, //
254         ID.Scalar, ID.Comment, ID.Comment, //
255         ID.Comment, //
256 
257         ID.SequenceStart, //
258         ID.Scalar, ID.Comment, //
259         ID.MappingStart, //
260         ID.Scalar, ID.SequenceStart, ID.Scalar, ID.Scalar, ID.SequenceEnd, ID.Comment, //
261         ID.MappingEnd,
262 
263         ID.MappingStart, //
264         ID.Scalar, // value=item3
265         ID.MappingStart, //
266         ID.Scalar, // value=key3a
267         ID.SequenceStart, //
268         ID.Scalar, // value=value3a
269         ID.Scalar, // value=value3a2
270         ID.SequenceEnd, //
271         ID.Scalar, // value=key3b
272         ID.Scalar, // value=value3b
273         ID.MappingEnd, //
274         ID.Comment, // type=IN_LINE, value= InlineComment6
275         ID.Comment, //
276         ID.MappingEnd, //
277         ID.SequenceEnd, //
278         ID.MappingEnd, ID.DocumentEnd, //
279 
280         ID.DocumentStart, //
281         ID.Comment, //
282         ID.Scalar, // Empty
283         ID.DocumentEnd, //
284         ID.StreamEnd //
285     );
286     Parser sut = createParser(data);
287     // printEventList(sut);
288     assertEventListEquals(expectedEventIdList, sut);
289   }
290 
291   @Test
testAllComments2()292   public void testAllComments2() throws Exception {
293     String data = "" + //
294         "# Block Comment1\n" + //
295         "# Block Comment2\n" + //
296         "- item1 # Inline Comment1a\n" + //
297         "        # Inline Comment1b\n" + //
298         "# Block Comment3a\n" + //
299         "# Block Comment3b\n" + //
300         "- item2: value # Inline Comment2\n" + //
301         "# Block Comment4\n" + //
302         "";
303 
304     List<ID> expectedEventIdList = Arrays.asList(//
305         ID.StreamStart, //
306         ID.Comment, //
307         ID.Comment, //
308         ID.DocumentStart, //
309         ID.SequenceStart, //
310         ID.Scalar, ID.Comment, ID.Comment, //
311         ID.Comment, //
312         ID.Comment, //
313         ID.MappingStart, //
314         ID.Scalar, ID.Scalar, ID.Comment, //
315         ID.Comment, //
316         ID.MappingEnd, //
317         ID.SequenceEnd, //
318         ID.DocumentEnd, //
319         ID.StreamEnd //
320     );
321     Parser sut = createParser(data);
322     assertEventListEquals(expectedEventIdList, sut);
323   }
324 
325   @Test
testAllComments3()326   public void testAllComments3() throws Exception {
327     String data = "" + //
328         "# Block Comment1\n" + //
329         "[ item1, item2: value2, {item3: value3} ] # Inline Comment1\n" + //
330         "# Block Comment2\n" + //
331         "";
332 
333     List<ID> expectedEventIdList = Arrays.asList(//
334         ID.StreamStart, //
335         ID.Comment, //
336         ID.DocumentStart, //
337         ID.SequenceStart, //
338         ID.Scalar, ID.MappingStart, //
339         ID.Scalar, ID.Scalar, //
340         ID.MappingEnd, //
341         ID.MappingStart, //
342         ID.Scalar, ID.Scalar, //
343         ID.MappingEnd, //
344         ID.SequenceEnd, //
345         ID.Comment, //
346         ID.Comment, //
347         ID.DocumentEnd, //
348         ID.StreamEnd //
349     );
350     Parser sut = createParser(data);
351     // printEventList(sut);
352     assertEventListEquals(expectedEventIdList, sut);
353   }
354 
355   @Test
testKeepingNewLineInsideSequence()356   public void testKeepingNewLineInsideSequence() throws Exception {
357     String data = "" + "\n" + "key:\n" + "\n" + "- item1\n" + "\n" + // Per Spec this is part of
358     // plain scalar above
359         "- item2\n" + "\n" + // Per Spec this is part of plain scalar above
360         "- item3\n" + "\n" + // FIXME: ?Should be comment?
361         "key2: value2\n" + "\n" + // FIXME: ?Should be comment?
362         "key3: value3\n" + "\n" + // FIXME: ?Should be comment?
363         "";
364     List<ID> expectedEventIdList = Arrays.asList(//
365         ID.StreamStart, //
366         ID.Comment, //
367         ID.DocumentStart, //
368         ID.MappingStart, //
369         ID.Scalar, //
370         ID.Comment, //
371         ID.SequenceStart, //
372         ID.Scalar, //
373         ID.Scalar, //
374         ID.Scalar, //
375         ID.Comment, //
376         ID.SequenceEnd, //
377         ID.Scalar, //
378         ID.Scalar, //
379         ID.Comment, //
380         ID.Scalar, //
381         ID.Scalar, //
382         ID.Comment, //
383         ID.MappingEnd, //
384         ID.DocumentEnd, //
385         ID.StreamEnd //
386     );
387     Parser sut = new ParserImpl(new StreamReader(data), true);
388     // printEventList(sut);
389     assertEventListEquals(expectedEventIdList, sut);
390   }
391 
392   @Test
testCommentsInFlowMapping()393   public void testCommentsInFlowMapping() {
394     String data = "" + "# Beginning\n" + "{\n" + "    # Hello\n" + "    key1: meow,\n"
395         + "    # World\n" + "    key2: purr\n" + "}\n";
396 
397     List<ID> expectedEventIdList = Arrays.asList(ID.StreamStart, ID.Comment, ID.DocumentStart,
398         ID.MappingStart, ID.Comment, ID.Scalar, ID.Scalar, ID.Comment, ID.Scalar, ID.Scalar,
399         ID.MappingEnd, ID.DocumentEnd, ID.StreamEnd);
400     Parser sut = new ParserImpl(new StreamReader(data), true);
401     // printEventList(sut);
402     assertEventListEquals(expectedEventIdList, sut);
403   }
404 }
405