View Javadoc

    1   /**
    2    * Copyright (c) 2008-2011, 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
    17  package org.yaml.snakeyaml;
    18
    19  import java.io.ByteArrayOutputStream;
    20  import java.io.InputStream;
    21  import java.io.OutputStreamWriter;
    22  import java.io.UnsupportedEncodingException;
    23  import java.util.ArrayList;
    24  import java.util.Iterator;
    25  import java.util.List;
    26  import java.util.Map;
    27
    28  import junit.framework.AssertionFailedError;
    29
    30  public class YamlStream {
    31      private List<Object> nativeData = new ArrayList<Object>();
    32
    33      public YamlStream(String sourceName) {
    34          InputStream input = YamlDocument.class.getClassLoader().getResourceAsStream(
    35                  YamlDocument.ROOT + sourceName);
    36          Yaml yaml = new Yaml();
    37          for (Object document : yaml.loadAll(input)) {
    38              nativeData.add(document);
    39          }
    40          ByteArrayOutputStream output = new ByteArrayOutputStream();
    41          yaml.dumpAll(nativeData.iterator(), new OutputStreamWriter(output));
    42          String presentation;
    43          try {
    44              presentation = output.toString("UTF-8");
    45          } catch (UnsupportedEncodingException e) {
    46              throw new RuntimeException(e);
    47          }
    48          // try to read generated presentation to prove that the presentation
    49          // is identical to the source
    50          List<Object> parsedNativeData = new ArrayList<Object>();
    51          for (Object document : yaml.loadAll(presentation)) {
    52              parsedNativeData.add(document);
    53          }
    54          if (nativeData.getClass() != parsedNativeData.getClass()) {
    55              throw new AssertionFailedError("Different class: " + parsedNativeData.getClass());
    56          }
    57          if (nativeData.size() != parsedNativeData.size()) {
    58              throw new AssertionFailedError("Different size.");
    59          }
    60          Iterator<Object> piterator = parsedNativeData.iterator();
    61          Iterator<Object> niterator = nativeData.iterator();
    62          while (piterator.hasNext()) {
    63              Object obj1 = niterator.next();
    64              Object obj2 = piterator.next();
    65              if (obj1 instanceof Map) {
    66                  @SuppressWarnings("unchecked")
    67                  Map<Object, Object> map1 = (Map<Object, Object>) obj1;
    68                  @SuppressWarnings("unchecked")
    69                  Map<Object, Object> map2 = (Map<Object, Object>) obj2;
    70                  if (!map1.keySet().equals(map2.keySet())) {
    71                      throw new AssertionFailedError("Keyset: " + map1.keySet() + "; but was: "
    72                              + map2.keySet());
    73                  }
    74                  for (Iterator<Object> iterator = map1.keySet().iterator(); iterator.hasNext();) {
    75                      Object key = iterator.next();
    76                      Object o1 = map1.get(key);
    77                      Object o2 = map2.get(key);
    78                      if (!o1.equals(o2)) {
    79                          throw new AssertionFailedError("Values: " + o1 + "; but was: " + o2);
    80                      }
    81                  }
    82              }
    83              if (!obj1.equals(obj2)) {
    84                  throw new AssertionFailedError("Expected: " + obj1 + "; but was: " + obj2);
    85              }
    86          }
    87          if (!parsedNativeData.equals(nativeData)) {
    88              throw new AssertionFailedError("Generated presentation is not the same: "
    89                      + presentation);
    90          }
    91      }
    92
    93      public List<Object> getNativeData() {
    94          return nativeData;
    95      }
    96  }