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