public final void endNode() throws IOException {
tracker.endNode();
context = context.endNode(codecs.getSchemaContext(), writer);
-
- if (context instanceof JSONStreamWriterRootContext) {
- context.endNode(codecs.getSchemaContext(), writer);
- }
}
@Override
}
final void closeWriter() throws IOException {
+ if (!(context instanceof JSONStreamWriterRootContext)) {
+ throw new IOException("Unexpected root context " + context);
+ }
+
+ context.endNode(codecs.getSchemaContext(), writer);
writer.close();
}
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkState;
+import com.google.common.base.MoreObjects;
+import com.google.common.base.MoreObjects.ToStringHelper;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
import java.net.URI;
}
return parent;
}
+
+ @Override
+ public final String toString() {
+ return addToStringAttributes(MoreObjects.toStringHelper(this)).toString();
+ }
+
+ protected ToStringHelper addToStringAttributes(final ToStringHelper helper) {
+ return helper;
+ }
}
import org.junit.AfterClass;
import org.junit.BeforeClass;
+import org.opendaylight.yangtools.yang.common.Empty;
+import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
+import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
+import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
+import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
public abstract class AbstractComplexJsonTest {
+ static final QName CONT_1 = QName.create("ns:complex:json", "2014-08-11", "cont1");
+ private static final QName EMPTY_LEAF = QName.create(CONT_1, "empty");
+
+ static final ContainerNode CONT1_WITH_EMPTYLEAF = Builders.containerBuilder()
+ .withNodeIdentifier(new NodeIdentifier(CONT_1))
+ .addChild(ImmutableNodes.leafNode(EMPTY_LEAF, Empty.getInstance()))
+ .build();
static SchemaContext schemaContext;
static JSONCodecFactory lhotkaCodecFactory;
public class AnyXmlSupportTest extends AbstractComplexJsonTest {
- private static final QName CONT_1 = QName.create("ns:complex:json", "2014-08-11", "cont1");
private static final QName LF12_ANY = QName.create(CONT_1, "lf12-any");
private static final QName LF13_ANY = QName.create(CONT_1, "lf13-any");
private static final QName LF14_ANY = QName.create(CONT_1, "lf14-any");
import java.io.StringReader;
import java.net.URISyntaxException;
import org.junit.Test;
-import org.opendaylight.yangtools.yang.common.Empty;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
-import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
* Each test tests whether json input is correctly transformed to normalized node structure.
*/
public class JsonStreamToNormalizedNodeTest extends AbstractComplexJsonTest {
-
- private static final QName CONT_1 = QName.create("ns:complex:json", "2014-08-11", "cont1");
- private static final QName EMPTY_LEAF = QName.create(CONT_1,"empty");
-
@Test
public void leafNodeInContainer() throws IOException, URISyntaxException {
final String inputJson = loadTextFile("/complexjson/leaf-node-in-container.json");
@Test
public void emptyTypeTest() throws IOException, URISyntaxException {
final String inputJson = loadTextFile("/complexjson/type-empty.json");
- final ContainerNode awaitedStructure = containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(CONT_1))
- .addChild(leafNode(EMPTY_LEAF, Empty.getInstance()))
- .build();
-
- verifyTransformationToNormalizedNode(inputJson, awaitedStructure);
+ verifyTransformationToNormalizedNode(inputJson, CONT1_WITH_EMPTYLEAF);
}
/**
import java.util.HashSet;
import java.util.Iterator;
import org.junit.Test;
-import org.opendaylight.yangtools.yang.common.Empty;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
-import org.opendaylight.yangtools.yang.data.impl.schema.Builders;
-import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
import org.opendaylight.yangtools.yang.model.api.SchemaPath;
/**
* via gson as structure of json elements which are walked and compared with awaited values.
*/
public class NormalizedNodeToJsonStreamTest extends AbstractComplexJsonTest {
-
- private static final QName CONT_1 = QName.create("ns:complex:json", "2014-08-11", "cont1");
- private static final QName EMPTY_LEAF = QName.create(CONT_1, "empty");
-
@Test
public void leafNodeInContainer() throws IOException {
final String jsonOutput = normalizedNodeToJsonStreamTransformation(
@Test
public void emptyTypeTest() throws IOException {
- final String jsonOutput = normalizedNodeToJsonStreamTransformation(Builders.containerBuilder()
- .withNodeIdentifier(new NodeIdentifier(CONT_1))
- .addChild(ImmutableNodes.leafNode(EMPTY_LEAF, Empty.getInstance()))
- .build());
+ final String jsonOutput = normalizedNodeToJsonStreamTransformation(CONT1_WITH_EMPTYLEAF);
final JsonObject cont1 = resolveCont1(jsonOutput);
final JsonElement emptyObj = cont1.get("empty");
assertNotNull(emptyObj);
--- /dev/null
+/*
+ * Copyright (c) 2019 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang.data.codec.gson;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import org.junit.Test;
+import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeWriter;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
+
+public class YT1029Test extends AbstractComplexJsonTest {
+ @Test
+ public void testMultipleRootChildren() throws IOException {
+ final Writer writer = new StringWriter();
+ final NormalizedNodeStreamWriter jsonStream = JSONNormalizedNodeStreamWriter.createExclusiveWriter(
+ lhotkaCodecFactory, SchemaPath.ROOT, null, JsonWriterFactory.createJsonWriter(writer, 2));
+ try (NormalizedNodeWriter nodeWriter = NormalizedNodeWriter.forStreamWriter(jsonStream)) {
+ nodeWriter.write(CONT1_WITH_EMPTYLEAF);
+ nodeWriter.write(CONT1_WITH_EMPTYLEAF);
+ }
+
+ assertEquals("{\n"
+ + " \"complexjson:cont1\": {\n"
+ + " \"empty\": [\n"
+ + " null\n"
+ + " ]\n"
+ + " },\n"
+ + " \"complexjson:cont1\": {\n"
+ + " \"empty\": [\n"
+ + " null\n"
+ + " ]\n"
+ + " }\n"
+ + "}", writer.toString());
+ }
+}