/* * Copyright (c) 2012-2014 Isode Limited, London, England. * All rights reserved. */ /* * Copyright (c) 2010 Remko Tronçon * All rights reserved. */ package com.isode.stroke.parser.payloadparsers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import org.junit.BeforeClass; import org.junit.Test; import com.isode.stroke.elements.Form; import com.isode.stroke.elements.Form.Type; import com.isode.stroke.elements.FormField; import com.isode.stroke.elements.FormField.Option; import com.isode.stroke.elements.FormItem; import com.isode.stroke.elements.FormSection; import com.isode.stroke.elements.FormText; import com.isode.stroke.elements.FormPage; import com.isode.stroke.elements.FormReportedRef; import com.isode.stroke.elements.Payload; import com.isode.stroke.eventloop.DummyEventLoop; import com.isode.stroke.jid.JID; import java.util.List; import java.util.ArrayList; public class FormParserTest { @BeforeClass public static void init() throws Exception { } private static Form parse(String xmlString) { DummyEventLoop eventLoop = new DummyEventLoop(); PayloadsParserTester parser = new PayloadsParserTester(eventLoop); assertTrue(parser.parse(xmlString)); Payload payload = null; do { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } eventLoop.processEvents(); payload = parser.getPayload(); } while (payload == null); return (Form) payload; } @Test public void testParse_FormInformation() throws Exception { Form payload = parse("" + "Bot Configuration" + "Hello!" + "Fill out this form to configure your new bot!" + ""); assertEquals("Bot Configuration", payload.getTitle()); assertEquals("Hello!\nFill out this form to configure your new bot!", payload.getInstructions()); assertEquals(Type.SUBMIT_TYPE, payload.getType()); } @Test public void testParse() { Form payload = parse("" + "" + "jabber:bot" + "" + "" + "" + "someText" + "" + "" + "" + "" + "itemValue" + "" + "" + "Section 1: Bot Info" + "" + "This is a bot.A quite good one actually" + "" + "" + "1" + "" + "" + "" + "news" + "search" + "" + "" + "" + "" + "" + "" + "" + "20" + "" + "" + "" + "" + "" + "" + "" + "" + "Tell all your friends about your new bot!" + "foo@bar.com" + "baz@fum.org" + "" + "" + "foo" + "" + ""); assertEquals(10, payload.getFields().size()); assertEquals("jabber:bot", payload.getFields().get(0).getValues().get(0)); assertEquals("FORM_TYPE", payload.getFields().get(0).getName()); assertTrue(!payload.getFields().get(0).getRequired()); assertEquals("description", payload.getReportedFields().get(0).getLabel()); assertEquals("someText", payload.getReportedFields().get(0).getValues().get(0)); assertEquals("itemField", payload.getItems().get(0).getItemFields().get(0).getLabel()); assertEquals("itemValue", payload.getItems().get(0).getItemFields().get(0).getValues().get(0)); assertEquals("Section 1: Bot Info", payload.getFields().get(1).getValues().get(0)); assertEquals("The name of your bot", payload.getFields().get(2) .getLabel()); assertEquals("This is a bot.\nA quite good one actually", payload.getFields().get(3).getTextMultiValue()); assertEquals(Boolean.TRUE, payload.getFields() .get(4).getBoolValue()); assertTrue(payload.getFields().get(4).getRequired()); assertEquals("1", payload.getFields().get(4).getValues().get(0)); assertEquals("news", payload.getFields().get(6).getValues().get(0)); assertEquals("search", payload.getFields().get(6).getValues().get(1)); assertEquals(5, payload.getFields().get(6).getOptions().size()); assertEquals("Contests", payload.getFields().get(6).getOptions().get(0).label_); assertEquals("contests", payload.getFields().get(6).getOptions().get(0).value_); assertEquals("News", payload.getFields().get(6).getOptions().get(1).label_); assertEquals("news", payload.getFields().get(6).getOptions().get(1).value_); assertEquals("20", payload.getFields().get(7).getValues().get(0)); assertEquals(new JID("foo@bar.com"), payload .getFields().get(8).getJIDMultiValue(0)); assertEquals(new JID("baz@fum.org"), payload .getFields().get(8).getJIDMultiValue(1)); assertEquals("Tell all your friends about your new bot!", payload .getFields().get(8).getDescription()); assertEquals("foo", payload.getFields().get(9).getValues().get(0)); } @Test public void testParse_FormLayout() { // P1 = page one, S1 = section one, F1 = field one, T1 = text one Form payload = parse( "" + "" + "" + "P1T1" + "" + "
" + "P1S1T1" + "" + "
" + "
" + "" + "
" + "
" + "
" + "
" + "
" + "" + "" + "" + ""); assertEquals(0, payload.getFields().size()); // PAGE ONE - parsing of element types assertEquals("P1", payload.getPages().get(0).getLabel()); assertNotNull(payload.getPages().get(0).getReportedRefs().get(0)); assertEquals("P1T1", payload.getPages().get(0).getTextElements().get(0).getTextString()); assertEquals("P1F1", payload.getPages().get(0).getFields().get(0).getName()); assertEquals("P1S1", payload.getPages().get(0).getChildSections().get(0).getLabel()); assertEquals("P1S1T1", payload.getPages().get(0).getChildSections().get(0).getTextElements().get(0).getTextString()); assertEquals("P1S1F1", payload.getPages().get(0).getChildSections().get(0).getFields().get(0).getName()); // PAGE TWO - parsing of nested elements assertEquals("P2", payload.getPages().get(1).getLabel()); assertEquals("P2S1", payload.getPages().get(1).getChildSections().get(0).getLabel()); assertEquals("P2S2", payload.getPages().get(1).getChildSections().get(0).getChildSections().get(0).getLabel()); assertEquals("P2S3", payload.getPages().get(1).getChildSections().get(0).getChildSections().get(0).getChildSections().get(0).getLabel()); } @Test public void testParse_FormItems() { Form dataForm = parse( "" + "" + "jabber:iq:search" + "" + "" + "" + "" + "" + "" + "" + "" + "Benvolio" + "Montague" + "benvolio@montague.net" + "male" + "" + "" + "Romeo" + "Montague" + "romeo@montague.net" + "male" + "" + ""); assertNotNull(dataForm); List reported = dataForm.getReportedFields(); assertEquals(4, reported.size()); List items = dataForm.getItems(); assertEquals(2, items.size()); FormItem item = items.get(0); assertEquals(4, item.getItemFields().size()); assertEquals("Benvolio", item.getItemFields().get(0).getValues().get(0)); assertEquals("first", item.getItemFields().get(0).getName()); assertEquals("Montague", item.getItemFields().get(1).getValues().get(0)); assertEquals("last", item.getItemFields().get(1).getName()); FormField jidField = item.getItemFields().get(2); assertEquals(new JID("benvolio@montague.net"), jidField.getJIDSingleValue()); assertEquals("jid", item.getItemFields().get(2).getName()); assertEquals("male", item.getItemFields().get(3).getValues().get(0)); assertEquals("x-gender", item.getItemFields().get(3).getName()); item = items.get(1); assertEquals(4, item.getItemFields().size()); assertEquals("Romeo", item.getItemFields().get(0).getValues().get(0)); assertEquals("first", item.getItemFields().get(0).getName()); assertEquals("Montague", item.getItemFields().get(1).getValues().get(0)); assertEquals("last", item.getItemFields().get(1).getName()); jidField = item.getItemFields().get(2); assertNotNull(jidField); assertEquals(new JID("romeo@montague.net"), jidField.getJIDSingleValue()); assertEquals("jid", item.getItemFields().get(2).getName()); assertEquals("male", item.getItemFields().get(3).getValues().get(0)); assertEquals("x-gender", item.getItemFields().get(3).getName()); } }