/* * Copyright 2002-2009 the original author or authors. * * 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 net.sf.json.xml; import net.sf.json.JSON; import org.custommonkey.xmlunit.XMLTestCase; /** * @author Tobias Sodergren <tobias.sodergren@infomaker.se> */ public class TestArrayAutoExpansion extends XMLTestCase { private static final String FIXTURE = "<Document DOMVersion=\"8.0\" Self=\"d\">" + "<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27\">" + "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">" + "<rdf:Description rdf:about=\"\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">" + "<dc:format>application/x-indesign</dc:format>" + "</rdf:Description>" + "<rdf:Description rdf:about=\"\" xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\">" + "<xmp:CreatorTool>Adobe InDesign CS6 (Macintosh)</xmp:CreatorTool>" + "</rdf:Description>" + "<rdf:Description rdf:about=\"\" xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\">" + "<xmpMM:InstanceID>xmp.iid:D093CC710A2068118083AFA2F0AAE3ED</xmpMM:InstanceID>" + "</rdf:Description>" + "</rdf:RDF>" + "</x:xmpmeta>" + "</Document>"; private static final String FIXTURE_2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<TextFrame Self=\"u11f6\" ParentStory=\"u11e4\" PreviousTextFrame=\"n\" NextTextFrame=\"n\" ContentType=\"TextType\" NewspilotId=\"0 0\" ImtoolsWritebackType=\"0\" ImtoolsMacroData=\"\" ImtoolsArticleParts=\"103416\" ImtoolsFramedata=\"{21889731;93073;89;1;1;12127681;0;0;0;1;1;Artikel;;103416}\" ImtoolsExportedSelection=\"0\" ImtoolsLayoutId=\"21889731\" ImtoolsArticleId=\"93073\" ImtoolsArticleTypeId=\"89\" ImtoolsArticlePartName=\"Artikel\" ImtoolsArticlePartNumber=\"1\" ImtoolsPartOrder=\"1\" ImtoolsOption=\"\" ImtoolsIsUnresolved=\"true\" ImtoolsContentId=\"0\" ImtoolsContentType=\"0\" ImtoolsTemplateInfoData=\"60 89\" ImtoolsTemplateName=\"Normal\" ImtoolsParagraphData=\"{headline}\" ParentInterfaceChangeCount=\"138508 2034277516 138558 1409276294\" TargetInterfaceChangeCount=\"\" LastUpdatedInterfaceChangeCount=\"\" OverriddenPageItemProps=\"\" HorizontalLayoutConstraints=\"FlexibleDimension FixedDimension FlexibleDimension\" VerticalLayoutConstraints=\"FlexibleDimension FixedDimension FlexibleDimension\" FillColor=\"Color/Paper\" GradientFillStart=\"-140.31496000000004 20\" GradientFillLength=\"280.62992\" GradientFillAngle=\"0\" GradientStrokeStart=\"-140.31496000000004 20\" GradientStrokeLength=\"280.62992\" GradientStrokeAngle=\"0\" ItemLayer=\"u126\" Locked=\"false\" LocalDisplaySetting=\"Default\" GradientFillHiliteLength=\"0\" GradientFillHiliteAngle=\"0\" GradientStrokeHiliteLength=\"0\" GradientStrokeHiliteAngle=\"0\" AppliedObjectStyle=\"ObjectStyle/$ID/[Normal Text Frame]\" Visible=\"true\" Name=\"$ID/\" ItemTransform=\"1 0 0 1 -610.8661466929134 -420.2831501574803\">" + "<Properties>" + "<PathGeometry>" + "<GeometryPathType PathOpen=\"false\">" + "<PathPointArray>" + "<PathPointType Anchor=\"-140.31496000000004 -29.999999448818926\" LeftDirection=\"-140.31496000000004 -29.999999448818926\" RightDirection=\"-140.31496000000004 -29.999999448818926\"/>" + "<PathPointType Anchor=\"-140.31496000000004 20\" LeftDirection=\"-140.31496000000004 20\" RightDirection=\"-140.31496000000004 20\"/>" + "<PathPointType Anchor=\"140.31495999999999 20\" LeftDirection=\"140.31495999999999 20\" RightDirection=\"140.31495999999999 20\"/>" + "<PathPointType Anchor=\"140.31495999999999 -29.999999448818926\" LeftDirection=\"140.31495999999999 -29.999999448818926\" RightDirection=\"140.31495999999999 -29.999999448818926\"/>" + "</PathPointArray>" + "</GeometryPathType>" + "</PathGeometry>" + "</Properties>" + "</TextFrame>"; private static final String FIXTURE_3 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<Properties>" + "<PathGeometry class=\"object\">" + "<GeometryPathType PathOpen=\"false\" class=\"object\" >" + "<PathPointArray class=\"array\">" + "<PathPointType Anchor=\"-140.31496000000004 -29.999999448818926\" LeftDirection=\"-140.31496000000004 -29.999999448818926\" RightDirection=\"-140.31496000000004 -29.999999448818926\" class=\"object\"/>" + "<PathPointType Anchor=\"-140.31496000000004 20\" LeftDirection=\"-140.31496000000004 20\" RightDirection=\"-140.31496000000004 20\" class=\"object\"/>" + "<PathPointType Anchor=\"140.31495999999999 20\" LeftDirection=\"140.31495999999999 20\" RightDirection=\"140.31495999999999 20\" class=\"object\"/>" + "<PathPointType Anchor=\"140.31495999999999 -29.999999448818926\" LeftDirection=\"140.31495999999999 -29.999999448818926\" RightDirection=\"140.31495999999999 -29.999999448818926\" class=\"object\"/>" + "</PathPointArray>" + "</GeometryPathType>" + "</PathGeometry>" + "</Properties>"; public static void main( String[] args ) { junit.textui.TestRunner.run( TestArrayAutoExpansion.class ); } public TestArrayAutoExpansion( String name ) { super( name ); } public void testShouldCreateAutomaticExpansionWhenContainingArrayOfObjects() throws Exception { XMLSerializer serializer = new XMLSerializer(); serializer.setTypeHintsEnabled( false ); serializer.setPerformAutoExpansion( true ); serializer.setRootName( "Document" ); JSON jsonRepresentation = serializer.read( FIXTURE ); final String writtenBack = serializer.write( jsonRepresentation ); assertXMLEqual( FIXTURE, writtenBack ); } public void test_keep_array_name() throws Exception { XMLSerializer serializer = new XMLSerializer(); serializer.setTypeHintsEnabled( false ); serializer.setPerformAutoExpansion( true ); serializer.setKeepArrayName( true ); serializer.setEscapeLowerChars( true ); serializer.setRootName( "TextFrame" ); JSON jsonRepresentation = serializer.read( FIXTURE_2 ); final String writtenBack = serializer.write( jsonRepresentation ); assertXMLEqual( FIXTURE_2, writtenBack ); } public void test_keep_array_name_with_type_hints_should_throw_exception() throws Exception { XMLSerializer serializer = new XMLSerializer(); serializer.setTypeHintsEnabled( true ); serializer.setKeepArrayName( true ); JSON jsonRepresentation = serializer.read( FIXTURE_3 ); try{ serializer.write( jsonRepresentation ); fail( "Type hints are not compatible with KeepArrayName" ); }catch( IllegalStateException e ){ assertEquals( "Type Hints cannot be used together with 'keepArrayName'", e.getMessage() ); } } }