Home | History | Annotate | Download | only in parser
      1 /**
      2  * Copyright (c) 2008, http://www.snakeyaml.org
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *     http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package org.yaml.snakeyaml.parser;
     17 
     18 import java.util.LinkedList;
     19 
     20 import junit.framework.TestCase;
     21 
     22 import org.yaml.snakeyaml.error.Mark;
     23 import org.yaml.snakeyaml.events.DocumentEndEvent;
     24 import org.yaml.snakeyaml.events.DocumentStartEvent;
     25 import org.yaml.snakeyaml.events.Event;
     26 import org.yaml.snakeyaml.events.ImplicitTuple;
     27 import org.yaml.snakeyaml.events.MappingEndEvent;
     28 import org.yaml.snakeyaml.events.MappingStartEvent;
     29 import org.yaml.snakeyaml.events.ScalarEvent;
     30 import org.yaml.snakeyaml.events.SequenceEndEvent;
     31 import org.yaml.snakeyaml.events.SequenceStartEvent;
     32 import org.yaml.snakeyaml.events.StreamEndEvent;
     33 import org.yaml.snakeyaml.events.StreamStartEvent;
     34 import org.yaml.snakeyaml.reader.StreamReader;
     35 
     36 public class ParserImplTest extends TestCase {
     37 
     38     private void check(LinkedList<Event> etalonEvents, Parser parser) {
     39         while (parser.checkEvent(null)) {
     40             Event event = parser.getEvent();
     41             if (etalonEvents.isEmpty()) {
     42                 fail("unexpected event: " + event);
     43             }
     44             assertEquals(etalonEvents.removeFirst(), event);
     45         }
     46         assertFalse("Must contain no more events: " + parser.getEvent(), parser.checkEvent(null));
     47     }
     48 
     49     public void testGetEvent() {
     50         String data = "string: abcd";
     51         StreamReader reader = new StreamReader(data);
     52         Parser parser = new ParserImpl(reader);
     53         Mark dummyMark = new Mark("dummy", 0, 0, 0, "", 0);
     54         LinkedList<Event> etalonEvents = new LinkedList<Event>();
     55         etalonEvents.add(new StreamStartEvent(dummyMark, dummyMark));
     56         etalonEvents.add(new DocumentStartEvent(dummyMark, dummyMark, false, null, null));
     57         etalonEvents.add(new MappingStartEvent(null, null, true, dummyMark, dummyMark,
     58                 Boolean.FALSE));
     59         etalonEvents.add(new ScalarEvent(null, null, new ImplicitTuple(true, false), "string",
     60                 dummyMark, dummyMark, (char) 0));
     61         etalonEvents.add(new ScalarEvent(null, null, new ImplicitTuple(true, false), "abcd",
     62                 dummyMark, dummyMark, (char) 0));
     63         etalonEvents.add(new MappingEndEvent(dummyMark, dummyMark));
     64         etalonEvents.add(new DocumentEndEvent(dummyMark, dummyMark, false));
     65         etalonEvents.add(new StreamEndEvent(dummyMark, dummyMark));
     66         check(etalonEvents, parser);
     67     }
     68 
     69     public void testGetEvent2() {
     70         String data = "american:\n  - Boston Red Sox";
     71         StreamReader reader = new StreamReader(data);
     72         Parser parser = new ParserImpl(reader);
     73         Mark dummyMark = new Mark("dummy", 0, 0, 0, "", 0);
     74         LinkedList<Event> etalonEvents = new LinkedList<Event>();
     75         etalonEvents.add(new StreamStartEvent(dummyMark, dummyMark));
     76         etalonEvents.add(new DocumentStartEvent(dummyMark, dummyMark, false, null, null));
     77         etalonEvents
     78                 .add(new MappingStartEvent(null, null, true, dummyMark, dummyMark, Boolean.TRUE));
     79         etalonEvents.add(new ScalarEvent(null, null, new ImplicitTuple(true, false), "american",
     80                 dummyMark, dummyMark, (char) 0));
     81         etalonEvents.add(new SequenceStartEvent(null, null, true, dummyMark, dummyMark,
     82                 Boolean.FALSE));
     83         etalonEvents.add(new ScalarEvent(null, null, new ImplicitTuple(true, false),
     84                 "Boston Red Sox", dummyMark, dummyMark, (char) 0));
     85         etalonEvents.add(new SequenceEndEvent(dummyMark, dummyMark));
     86         etalonEvents.add(new MappingEndEvent(dummyMark, dummyMark));
     87         etalonEvents.add(new DocumentEndEvent(dummyMark, dummyMark, false));
     88         etalonEvents.add(new StreamEndEvent(dummyMark, dummyMark));
     89         check(etalonEvents, parser);
     90     }
     91 }
     92