/* * Copyright (c) 2012-2014 Isode Limited, London, England. * All rights reserved. */ /* * Copyright (c) 2010 Remko Tronçon * All rights reserved. */ package com.isode.stroke.serializer.payloadserializers; import static org.junit.Assert.assertEquals; 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.jid.JID; public class FormSerializerTest { @BeforeClass public static void init() throws Exception { } @Test public void testSerializeFormInformation() { FormSerializer testling = new FormSerializer(); Form form = new Form(Type.FORM_TYPE); form.setTitle("Bot Configuration"); form .setInstructions("Hello!\nFill out this form to configure your new bot!"); assertEquals( "" + "Bot Configuration" + "Hello!" + "Fill out this form to configure your new bot!" + "", testling.serialize(form)); } @Test public void testSerializeFields() { FormSerializer testling = new FormSerializer(); Form form = new Form(Form.Type.FORM_TYPE); FormField field = new FormField(FormField.Type.HIDDEN_TYPE, "jabber:bot"); field.setName("FORM_TYPE"); form.addField(field); form.addField(new FormField(FormField.Type.FIXED_TYPE, "Section 1: Bot Info")); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE); field.setName("botname"); field.setLabel("The name of your bot"); form.addField(field); field = new FormField(FormField.Type.TEXT_MULTI_TYPE); field.setTextMultiValue("This is a bot.\nA quite good one actually"); field.setName("description"); field.setLabel("Helpful description of your bot"); form.addField(field); field = new FormField(FormField.Type.BOOLEAN_TYPE, "1"); field.setName("public"); field.setLabel("Public bot?"); field.setRequired(true); form.addField(field); field = new FormField(FormField.Type.TEXT_PRIVATE_TYPE); field.setName("password"); field.setLabel("Password for special access"); form.addField(field); field = new FormField(FormField.Type.LIST_MULTI_TYPE); field.addValue("news"); field.addValue("search"); field.setName("features"); field.setLabel("What features will the bot support?"); field.addOption(new FormField.Option("Contests", "contests")); field.addOption(new FormField.Option("News", "news")); field.addOption(new FormField.Option("Polls", "polls")); field.addOption(new FormField.Option("Reminders", "reminders")); field.addOption(new FormField.Option("Search", "search")); form.addField(field); field = new FormField(FormField.Type.LIST_SINGLE_TYPE, "20"); field.setName("maxsubs"); field.setLabel("Maximum number of subscribers"); field.addOption(new FormField.Option("10", "10")); field.addOption(new FormField.Option("20", "20")); field.addOption(new FormField.Option("30", "30")); field.addOption(new FormField.Option("50", "50")); field.addOption(new FormField.Option("100", "100")); field.addOption(new FormField.Option("", "none")); form.addField(field); field = new FormField(FormField.Type.JID_MULTI_TYPE); field.addValue("foo@bar.com"); field.addValue("baz@fum.org"); field.setName("invitelist"); field.setLabel("People to invite"); field.setDescription("Tell all your friends about your new bot!"); form.addField(field); assertEquals( "" + "" + "jabber:bot" + "" + "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" + "" + "", testling.serialize(form)); } @Test public void testSerializeLayout() { FormSerializer testling = new FormSerializer(); Form form = new Form(Type.FORM_TYPE); FormPage page = new FormPage(); page.setLabel("P1"); FormReportedRef reportedRef = new FormReportedRef(); page.addReportedRef(reportedRef); FormText formText = new FormText(); formText.setTextString("P1T1"); page.addTextElement(formText); FormField field = new FormField(FormField.Type.TEXT_SINGLE_TYPE); field.setName("P1F1"); field.setLabel("field one"); page.addField(field); FormSection section = new FormSection(); section.setLabel("P1S1"); formText = new FormText(); formText.setTextString("P1S1T1"); section.addTextElement(formText); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE); field.setName("P1S1F1"); field.setLabel("field two"); section.addField(field); page.addChildSection(section); form.addPage(page); page = new FormPage(); page.setLabel("P2"); section = new FormSection(); section.setLabel("P2S1"); FormSection subSection = new FormSection(); subSection.setLabel("P2S2"); FormSection subSection2 = new FormSection(); subSection2.setLabel("P2S3"); subSection.addChildSection(subSection2); section.addChildSection(subSection); page.addChildSection(section); form.addPage(page); // P1 = page one, S1 = section one, F1 = field one, T1 = text one assertEquals( "" + "" + "P1T1" + "" + "" + "
" + "P1S1T1" + "" + "
" + "
" + "" + "
" + "
" + "
" + "
" + "
" + "" + "" + "" + "", testling.serialize(form)); } @Test public void testSerializeFormItems() { FormSerializer testling = new FormSerializer(); Form form = new Form(Type.RESULT_TYPE); FormField field = new FormField(FormField.Type.HIDDEN_TYPE, "jabber:iq:search"); field.setName("FORM_TYPE"); form.addField(field); // reported fields field = new FormField(FormField.Type.TEXT_SINGLE_TYPE); field.setName("first"); field.setLabel("Given Name"); form.addReportedField(field); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE); field.setName("last"); field.setLabel("Family Name"); form.addReportedField(field); field = new FormField(FormField.Type.JID_SINGLE_TYPE); field.setName("jid"); field.setLabel("Jabber ID"); form.addReportedField(field); field = new FormField(FormField.Type.LIST_SINGLE_TYPE); field.setName("x-gender"); field.setLabel("Gender"); form.addReportedField(field); FormItem firstItem = new FormItem(); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE, "Benvolio"); field.setName("first"); firstItem.addItemField(field); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE, "Montague"); field.setName("last"); firstItem.addItemField(field); field = new FormField(FormField.Type.JID_SINGLE_TYPE, "benvolio@montague.net"); field.setName("jid"); firstItem.addItemField(field); field = new FormField(FormField.Type.LIST_SINGLE_TYPE, "male"); field.setName("x-gender"); firstItem.addItemField(field); FormItem secondItem = new FormItem(); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE, "Romeo"); field.setName("first"); secondItem.addItemField(field); field = new FormField(FormField.Type.TEXT_SINGLE_TYPE, "Montague"); field.setName("last"); secondItem.addItemField(field); field = new FormField(FormField.Type.JID_SINGLE_TYPE, "romeo@montague.net"); field.setName("jid"); secondItem.addItemField(field); field = new FormField(FormField.Type.LIST_SINGLE_TYPE, "male"); field.setName("x-gender"); secondItem.addItemField(field); form.addItem(firstItem); form.addItem(secondItem); assertEquals( "" + "" + "jabber:iq:search" + "" + "" + "" + "" + "" + "" + "" + "" + "Benvolio" + "Montague" + "benvolio@montague.net" + "male" + "" + "" + "Romeo" + "Montague" + "romeo@montague.net" + "male" + "" + "", testling.serialize(form)); } }