/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include #include #include #include using namespace Swift; class FormSerializerTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE(FormSerializerTest); CPPUNIT_TEST(testSerializeFormInformation); CPPUNIT_TEST(testSerializeLayout); CPPUNIT_TEST(testSerializeFields); CPPUNIT_TEST(testSerializeFormItems); CPPUNIT_TEST_SUITE_END(); public: void testSerializeFormInformation() { FormSerializer testling; std::shared_ptr
form(new Form(Form::FormType)); form->setTitle("Bot Configuration"); form->setInstructions("Hello!\nFill out this form to configure your new bot!"); CPPUNIT_ASSERT_EQUAL(std::string( "" "Bot Configuration" "Hello!" "Fill out this form to configure your new bot!" ""), testling.serialize(form)); } void testSerializeLayout() { FormSerializer testling; std::shared_ptr form(new Form(Form::FormType)); FormPage::page page = std::make_shared(); page->setLabel("P1"); FormReportedRef::ref reportedRef = std::make_shared(); page->addReportedRef(reportedRef); FormText::text formText = std::make_shared(); formText->setTextString("P1T1"); page->addTextElement(formText); FormField::ref field = std::make_shared(FormField::TextSingleType); field->setName("P1F1"); field->setLabel("field one"); page->addField(field); FormSection::section section = std::make_shared(); section->setLabel("P1S1"); formText = std::make_shared(); formText->setTextString("P1S1T1"); section->addTextElement(formText); field = std::make_shared(FormField::TextSingleType); field->setName("P1S1F1"); field->setLabel("field two"); section->addField(field); page->addChildSection(section); form->addPage(page); page = std::make_shared(); page->setLabel("P2"); section = std::make_shared(); section->setLabel("P2S1"); FormSection::section subSection = std::make_shared(); subSection->setLabel("P2S2"); FormSection::section subSection2 = std::make_shared(); 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 CPPUNIT_ASSERT_EQUAL(std::string( "" "" "P1T1" "" "" "
" "P1S1T1" "" "
" "
" "" "
" "
" "
" "
" "
" "" "" "" ""), testling.serialize(form)); } void testSerializeFields() { FormSerializer testling; std::shared_ptr form(new Form(Form::FormType)); FormField::ref field = std::make_shared(FormField::HiddenType, "jabber:bot"); field->setName("FORM_TYPE"); form->addField(field); form->addField(std::make_shared(FormField::FixedType, "Section 1: Bot Info")); field = std::make_shared(FormField::TextSingleType); field->setName("botname"); field->setLabel("The name of your bot"); form->addField(field); field = std::make_shared(FormField::TextMultiType); 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 = std::make_shared(FormField::BooleanType, "1"); field->setName("public"); field->setLabel("Public bot?"); field->setRequired(true); form->addField(field); field = std::make_shared(FormField::TextPrivateType); field->setName("password"); field->setLabel("Password for special access"); form->addField(field); field = std::make_shared(FormField::ListMultiType); field->addValue("news"); field->addValue("search"); field->setName("features"); field->setLabel("What features will the bot support?"); field->addOption(FormField::Option("Contests", "contests")); field->addOption(FormField::Option("News", "news")); field->addOption(FormField::Option("Polls", "polls")); field->addOption(FormField::Option("Reminders", "reminders")); field->addOption(FormField::Option("Search", "search")); form->addField(field); field = std::make_shared(FormField::ListSingleType, "20"); field->setName("maxsubs"); field->setLabel("Maximum number of subscribers"); field->addOption(FormField::Option("10", "10")); field->addOption(FormField::Option("20", "20")); field->addOption(FormField::Option("30", "30")); field->addOption(FormField::Option("50", "50")); field->addOption(FormField::Option("100", "100")); field->addOption(FormField::Option("", "none")); form->addField(field); std::vector jids; field = std::make_shared(FormField::JIDMultiType); 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); CPPUNIT_ASSERT_EQUAL(std::string( "" "" "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)); } void testSerializeFormItems() { FormSerializer testling; std::shared_ptr form(new Form(Form::ResultType)); FormField::ref field = std::make_shared(FormField::HiddenType, "jabber:iq:search"); field->setName("FORM_TYPE"); form->addField(field); // reported fields field = std::make_shared(FormField::TextSingleType); field->setName("first"); field->setLabel("Given Name"); form->addReportedField(field); field = std::make_shared(FormField::TextSingleType); field->setName("last"); field->setLabel("Family Name"); form->addReportedField(field); field = std::make_shared(FormField::JIDSingleType); field->setName("jid"); field->setLabel("Jabber ID"); form->addReportedField(field); field = std::make_shared(FormField::ListSingleType); field->setName("x-gender"); field->setLabel("Gender"); form->addReportedField(field); Form::FormItem firstItem; field = std::make_shared(FormField::TextSingleType, "Benvolio"); field->setName("first"); firstItem.push_back(field); field = std::make_shared(FormField::TextSingleType, "Montague"); field->setName("last"); firstItem.push_back(field); field = std::make_shared(FormField::JIDSingleType, JID("benvolio@montague.net")); field->setName("jid"); firstItem.push_back(field); field = std::make_shared(FormField::ListSingleType, "male"); field->setName("x-gender"); firstItem.push_back(field); Form::FormItem secondItem; field = std::make_shared(FormField::TextSingleType, "Romeo"); field->setName("first"); secondItem.push_back(field); field = std::make_shared(FormField::TextSingleType, "Montague"); field->setName("last"); secondItem.push_back(field); field = std::make_shared(FormField::JIDSingleType, JID("romeo@montague.net")); field->setName("jid"); secondItem.push_back(field); field = std::make_shared(FormField::ListSingleType, "male"); field->setName("x-gender"); secondItem.push_back(field); form->addItem(firstItem); form->addItem(secondItem); CPPUNIT_ASSERT_EQUAL(std::string( "" "" "jabber:iq:search" "" "" "" "" "" "" "" "" "Benvolio" "Montague" "benvolio@montague.net" "male" "" "" "Romeo" "Montague" "romeo@montague.net" "male" "" ""), testling.serialize(form)); } }; CPPUNIT_TEST_SUITE_REGISTRATION(FormSerializerTest);