/** * Copyright (c) 2008-2011, http://www.snakeyaml.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.yaml.snakeyaml; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import junit.framework.AssertionFailedError; public class YamlStream { private List<Object> nativeData = new ArrayList<Object>(); public YamlStream(String sourceName) { InputStream input = YamlDocument.class.getClassLoader().getResourceAsStream( YamlDocument.ROOT + sourceName); Yaml yaml = new Yaml(); for (Object document : yaml.loadAll(input)) { nativeData.add(document); } ByteArrayOutputStream output = new ByteArrayOutputStream(); yaml.dumpAll(nativeData.iterator(), new OutputStreamWriter(output)); String presentation; try { presentation = output.toString("UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } // try to read generated presentation to prove that the presentation // is identical to the source List<Object> parsedNativeData = new ArrayList<Object>(); for (Object document : yaml.loadAll(presentation)) { parsedNativeData.add(document); } if (nativeData.getClass() != parsedNativeData.getClass()) { throw new AssertionFailedError("Different class: " + parsedNativeData.getClass()); } if (nativeData.size() != parsedNativeData.size()) { throw new AssertionFailedError("Different size."); } Iterator piterator = parsedNativeData.iterator(); Iterator niterator = nativeData.iterator(); while (piterator.hasNext()) { Object obj1 = niterator.next(); Object obj2 = piterator.next(); if (obj1 instanceof Map) { Map map1 = (Map) obj1; Map map2 = (Map) obj2; if (!map1.keySet().equals(map2.keySet())) { throw new AssertionFailedError("Keyset: " + map1.keySet() + "; but was: " + map2.keySet()); } for (Iterator iterator = map1.keySet().iterator(); iterator.hasNext();) { Object key = iterator.next(); Object o1 = map1.get(key); Object o2 = map2.get(key); if (!o1.equals(o2)) { throw new AssertionFailedError("Values: " + o1 + "; but was: " + o2); } } } if (!obj1.equals(obj2)) { throw new AssertionFailedError("Expected: " + obj1 + "; but was: " + obj2); } } if (!parsedNativeData.equals(nativeData)) { throw new AssertionFailedError("Generated presentation is not the same: " + presentation); } } public List<Object> getNativeData() { return nativeData; } }