/*
* ModeShape (http://www.modeshape.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.modeshape.schematic.internal.document;
import static org.junit.Assert.assertEquals;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.modeshape.schematic.Schematic;
import org.modeshape.schematic.document.Document;
import org.modeshape.schematic.document.EditableDocument;
import org.modeshape.schematic.internal.annotation.FixFor;
public class JsonWriterTest {
protected JsonWriter writer;
protected JsonReader reader;
protected boolean print;
protected EditableDocument doc1;
protected Document doc2;
@Before
public void beforeTest() {
writer = new PrettyJsonWriter();
reader = new JsonReader();
print = false;
}
@After
public void afterTest() {
writer = null;
reader = null;
doc1 = null;
doc2 = null;
}
@Test
public void shouldWriteEmptyDocument() throws Exception {
doc1 = Schematic.newDocument();
String s = writer.write(doc1);
doc2 = reader.read(s);
assertMatch(doc1, doc2);
}
@Test
public void shouldWriteDocumentWithOneField() throws Exception {
doc1 = Schematic.newDocument("field1", "value1");
String s = writer.write(doc1);
doc2 = reader.read(s);
assertMatch(doc1, doc2);
}
@Test
public void shouldWriteDocumentWithTwoFields() throws Exception {
doc1 = Schematic.newDocument("field1", "value1", "field2", 3);
String s = writer.write(doc1);
doc2 = reader.read(s);
assertMatch(doc1, doc2);
}
@Test
@FixFor( "MODE-2309" )
public void shouldWriteDocumentWithEscapedCharacters() throws Exception {
doc1 = Schematic.newDocument("field1", "value1", "field2", 3);
doc1.setString("field3", "This has\nmultiple\nlines");
doc1.setString("field4", "This has\r\nmultiple\r\n lines");
String s = writer.write(doc1);
// System.out.println(s);
doc2 = reader.read(s);
assertMatch(doc1, doc2);
}
@Test
@FixFor( "MODE-2309" )
public void shouldParseJsonWithNonAsciiCharactersInFields() throws Exception {
doc1 = Schematic.newDocument();
doc1.setString("field1", "basic ascii");
doc1.setString("field2", "basic ascii with some arabic: هذه هي قصة من مكتبة على الشارع الرئيسي");
doc1.setString("field3",
"basic ascii with some german: Dies ist die Geschichte von einer Buchhandlung an der Hauptstraße");
doc1.setString("field4", "basic ascii with some chinese: 這是在主要街道一家書店的故事");
doc1.setString("Hauptstraße", "Main street");
String s = writer.write(doc1);
// System.out.println(s);
doc2 = reader.read(s);
assertMatch(doc1, doc2);
}
protected void assertMatch( Document doc1,
Document doc2 ) {
assertEquals(doc1.size(), doc2.size());
for (Document.Field field1 : doc1.fields()) {
if (field1.getValue() instanceof Document) {
assertMatch(field1.getValueAsDocument(), doc2.getDocument(field1.getName()));
} else {
Object value2 = doc2.get(field1.getName());
assertEquals(field1.getValue(), value2);
}
}
}
}