| /** |
| * 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<Object> piterator = parsedNativeData.iterator(); |
| Iterator<Object> niterator = nativeData.iterator(); |
| while (piterator.hasNext()) { |
| Object obj1 = niterator.next(); |
| Object obj2 = piterator.next(); |
| if (obj1 instanceof Map) { |
| @SuppressWarnings("unchecked") |
| Map<Object, Object> map1 = (Map<Object, Object>) obj1; |
| @SuppressWarnings("unchecked") |
| Map<Object, Object> map2 = (Map<Object, Object>) obj2; |
| if (!map1.keySet().equals(map2.keySet())) { |
| throw new AssertionFailedError("Keyset: " + map1.keySet() + "; but was: " |
| + map2.keySet()); |
| } |
| for (Iterator<Object> 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; |
| } |
| } |