/** * * Copyright 2014 Anno van Vliet, All rights reserved. * * 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.jivesoftware.smackx.xdatalayout.packet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import java.util.logging.Logger; import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smackx.xdata.packet.DataForm; import org.jivesoftware.smackx.xdata.provider.DataFormProvider; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Fieldref; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Reportedref; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Section; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Text; import org.jivesoftware.smackx.xdatalayout.provider.DataLayoutProvider; import org.junit.Test; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; /** * Unit tests for DataForm reading and parsing. * * @author Anno van Vliet * */ public class DataLayoutTest { private static final String TEST_OUTPUT_2 = "
SectionText
PageText
"; private static final String TEST_OUTPUT_SPECIAL = "
SectionText - & \u00E9 \u00E1
PageText - & \u00E9 \u00E1
<html><font color='red'><em>DO NOT DELAY</em></font><br/>supply further information</html>
"; private static final String TEST_INPUT_1 = "xdata-layout-sample.xml"; private static Logger logger = Logger.getLogger(DataLayoutTest.class.getName()); @Test public void testLayout() throws XmlPullParserException, IOException, SmackException { DataLayout layout = new DataLayout("Label"); Fieldref reffield = new Fieldref("testField1"); layout.getPageLayout().add(reffield); Section section = new Section("section Label"); section.getSectionLayout().add(new Text("SectionText")); layout.getPageLayout().add(section); layout.getPageLayout().add(new Text( "PageText")); assertNotNull( layout.toXML()); String output = layout.toXML().toString(); logger.finest(output); assertEquals(TEST_OUTPUT_2, output); XmlPullParser parser = getParser(output); layout = DataLayoutProvider.parse(parser); assertEquals(3 , layout.getPageLayout().size()); assertEquals("Label", layout.getLabel()); assertNotNull( layout.toXML()); output = layout.toXML().toString(); logger.finest(output); assertEquals(TEST_OUTPUT_2, output); } @Test public void testLayoutSpecialCharacters() throws XmlPullParserException, IOException, SmackException { DataLayout layout = new DataLayout("Label - & \u00E9 \u00E1 "); Fieldref reffield = new Fieldref("testField1"); layout.getPageLayout().add(reffield); Section section = new Section("section Label - & \u00E9 \u00E1 "); section.getSectionLayout().add(new Text( "SectionText - & \u00E9 \u00E1 ")); layout.getPageLayout().add(section); layout.getPageLayout().add(new Text( "PageText - & \u00E9 \u00E1 ")); section = new Section("Number of Persons by
Nationality and Status"); section.getSectionLayout().add(new Reportedref()); layout.getPageLayout().add(section); layout.getPageLayout().add(new Text( "DO NOT DELAY
supply further information")); assertNotNull( layout.toXML()); String output = layout.toXML().toString(); logger.finest(output); assertEquals(TEST_OUTPUT_SPECIAL, output); XmlPullParser parser = getParser(output); layout = DataLayoutProvider.parse(parser); assertEquals(5 , layout.getPageLayout().size()); assertEquals("Label - & \u00E9 \u00E1 ", layout.getLabel()); section = (Section) layout.getPageLayout().get(1); assertEquals("section Label - & \u00E9 \u00E1 ", section.getLabel()); Text text = (Text)layout.getPageLayout().get(2); assertEquals("PageText - & \u00E9 \u00E1 ", text.getText()); section = (Section) layout.getPageLayout().get(3); assertEquals("Number of Persons by
Nationality and Status", section.getLabel()); text = (Text) layout.getPageLayout().get(4); assertEquals("DO NOT DELAY
supply further information", text.getText()); assertNotNull( layout.toXML()); output = layout.toXML().toString(); logger.finest(output); assertEquals(TEST_OUTPUT_SPECIAL, output); } @Test public void testLayoutFromFile() throws XmlPullParserException, IOException, SmackException { DataFormProvider pr = new DataFormProvider(); XmlPullParser parser = PacketParserUtils.newXmppParser(); parser.setInput(new InputStreamReader(this.getClass().getResourceAsStream(TEST_INPUT_1), "UTF-8")); parser.next(); DataForm form = pr.parse(parser); assertNotNull( form); assertEquals(1 , form.getExtensionElements().size()); DataLayout layout = (DataLayout) form.getExtensionElements().get(0); assertEquals(5 , layout.getPageLayout().size()); assertEquals("Label - & \u00E9 \u00E1 ", layout.getLabel()); Section section = (Section) layout.getPageLayout().get(1); assertEquals("section Label - & \u00E9 \u00E1 ", section.getLabel()); Text text = (Text)layout.getPageLayout().get(2); assertEquals("PageText - & \u00E9 \u00E1 ", text.getText()); section = (Section) layout.getPageLayout().get(3); assertEquals("Number of Persons by
Nationality and Status", section.getLabel()); text = (Text) layout.getPageLayout().get(4); assertEquals("DO NOT DELAY
supply further information", text.getText()); assertNotNull( layout.toXML()); String output = layout.toXML().toString(); logger.finest(output); assertEquals(TEST_OUTPUT_SPECIAL, output); } /** * @param output * @return * @throws XmlPullParserException * @throws IOException */ private XmlPullParser getParser(String output) throws XmlPullParserException, IOException { logger.finest("getParser"); XmlPullParser parser = PacketParserUtils.newXmppParser(); parser.setInput(new StringReader(output)); parser.next(); return parser; } }