@Test public void parseXml() { // @formatter:off sensei .assertParseXml( "<pobox>P.O. Box 1234;</pobox>" + "<ext>Apt, 11</ext>" + "<street>123 Main St</street>" + "<locality>Austin</locality>" + "<region>TX</region>" + "<code>12345</code>" + "<country>USA</country>") .run(is(withAllFields)); sensei .assertParseXml( "<pobox>P.O. Box 1234;</pobox>" + "<locality>Austin</locality>" + "<region>TX</region>" + "<code>12345</code>" + "<country></country>") .run(is(withSomeFields)); sensei.assertParseXml("").run(is(empty)); // @formatter:on }
@Test public void parseJson() { JCardValue value = JCardValue.structured( "P.O. Box 1234;", "Apt, 11", "123 Main St", "Austin", "TX", "12345", "USA"); sensei.assertParseJson(value).run(is(withAllFields)); value = JCardValue.structured("P.O. Box 1234;", "", "", "Austin", "TX", "12345", ""); sensei.assertParseJson(value).run(is(withSomeFields)); value = JCardValue.structured("", null, "", "", "", "", ""); sensei.assertParseJson(value).run(is(empty)); value = JCardValue.structured(); sensei.assertParseJson(value).run(is(empty)); value = JCardValue.structured("P.O. Box 1234;", "Apt, 11", "123 Main St", "Austin"); sensei .assertParseJson(value) .run( new Check<Address>() { public void check(Address property) { assertEquals("P.O. Box 1234;", property.getPoBox()); assertEquals("Apt, 11", property.getExtendedAddress()); assertEquals("123 Main St", property.getStreetAddress()); assertEquals("Austin", property.getLocality()); assertNull(property.getRegion()); assertNull(property.getPostalCode()); assertNull(property.getCountry()); } }); }
@Test public void parseHtml() { // @formatter:off sensei .assertParseHtml( "<div>" + "<span class=\"post-office-box\">P.O. Box 1234;</span>" + "<span class=\"extended-address\">Apt, 11</span>" + "<span class=\"street-address\">123 Main St</span>" + "<span class=\"locality\">Austin</span>" + "<span class=\"region\">TX</span>" + "<span class=\"postal-code\">12345</span>" + "<span class=\"country-name\">USA</span>" + "</div>") .run(is(withAllFields)); sensei .assertParseHtml( "<div>" + "<span class=\"post-office-box\">P.O. Box 1234;</span>" + "<span class=\"locality\">Austin</span>" + "<span class=\"region\">TX</span>" + "<span class=\"postal-code\">12345</span>" + "</div>") .run(is(withSomeFields)); sensei.assertParseHtml("<div></div>").run(is(empty)); // @formatter:on }
/** * If properties contain "PREF" parameters and they're being marshalled to 2.1/3.0, then it should * find the type with the lowest PREF value and add "TYPE=pref" to it. */ @Test public void prepareParameters_pref_parameter() { // TODO move this test to VCardPropertyScribeTest (except for the "label" part) VCard vcard = new VCard(); Address adr2 = new Address(); adr2.setPref(2); vcard.addAddress(adr2); Address adr1 = new Address(); adr1.setPref(1); vcard.addAddress(adr1); Address adr3 = new Address(); vcard.addAddress(adr3); // 2.1 and 3.0 converts the lowest PREF parameter to "TYPE=pref", and removes all the rest sensei .assertPrepareParams(adr1) .versions(V2_1, V3_0) .vcard(vcard) .expected("TYPE", "pref") .run(); sensei.assertPrepareParams(adr2).versions(V2_1, V3_0).vcard(vcard).run(); sensei.assertPrepareParams(adr3).versions(V2_1, V3_0).vcard(vcard).run(); // 4.0 keeps it sensei.assertPrepareParams(adr1).versions(V4_0).vcard(vcard).expected("PREF", "1").run(); sensei.assertPrepareParams(adr2).versions(V4_0).vcard(vcard).expected("PREF", "2").run(); sensei.assertPrepareParams(adr3).versions(V4_0).vcard(vcard).run(); }
@Test public void writeText() { sensei .assertWriteText(withAllFields) .run("P.O. Box 1234\\;;Apt\\, 11;123 Main St;Austin;TX;12345;USA"); sensei.assertWriteText(withSomeFields).run("P.O. Box 1234\\;;;;Austin;TX;12345;"); sensei.assertWriteText(empty).run(";;;;;;"); }
@Test public void parseText() { sensei .assertParseText("P.O. Box 1234\\;;Apt\\, 11;123 Main St;Austin;TX;12345;USA") .run(is(withAllFields)); sensei.assertParseText("P.O. Box 1234\\;;;;Austin;TX;12345;").run(is(withSomeFields)); sensei.assertParseText(";;;;;;").run(is(empty)); sensei.assertParseText("").run(is(empty)); }
/** * If a property contains a "TYPE=pref" parameter and it's being marshalled to 4.0, it should * replace "TYPE=pref" with "PREF=1". */ @Test public void prepareParameters_type_pref() { Address property = new Address(); property.addType(AddressType.PREF); // 2.1 and 3.0 keep it sensei.assertPrepareParams(property).versions(V2_1, V3_0).expected("TYPE", "pref").run(); // 4.0 converts it to "PREF=1" sensei.assertPrepareParams(property).versions(V4_0).expected("PREF", "1").run(); }
@Test public void prepareParameters_label() { Address property = new Address(); property.setLabel("label"); // 2.1 and 3.0 should remove it sensei.assertPrepareParams(property).versions(V2_1, V3_0).run(); // 4.0 should keep it sensei.assertPrepareParams(property).versions(V4_0).expected("LABEL", "label").run(); }
@Test public void writeJson() { sensei .assertWriteJson(withAllFields) .run( JCardValue.structured( "P.O. Box 1234;", "Apt, 11", "123 Main St", "Austin", "TX", "12345", "USA")); sensei .assertWriteJson(withSomeFields) .run(JCardValue.structured("P.O. Box 1234;", "", "", "Austin", "TX", "12345", "")); sensei.assertWriteJson(empty).run(JCardValue.structured("", "", "", "", "", "", "")); }
@Test public void parseHtml() { Email expected = new Email("*****@*****.**"); // @formatter:off sensei.assertParseHtml("<a href=\"mailto:[email protected]\">Email Me</a>").run(expected); sensei.assertParseHtml("<a href=\"MAILTO:[email protected]\">Email Me</a>").run(expected); sensei .assertParseHtml("<a href=\"http://www.example.com\">[email protected]</a>") .run(expected); sensei.assertParseHtml("<div>[email protected]</div>").run(expected); // @formatter:on }
@Test public void prepareParameters_pref_parameter() { Email property = new Email("*****@*****.**"); property.setPref(1); VCard vcard = new VCard(); vcard.addEmail(property); sensei .assertPrepareParams(property) .versions(V2_1, V3_0) .vcard(vcard) .expected("TYPE", "pref") .run(); sensei.assertPrepareParams(property).versions(V4_0).vcard(vcard).expected("PREF", "1").run(); }
@Test public void prepareParameters_type_pref() { Email property = new Email("*****@*****.**"); property.addType(EmailType.PREF); sensei.assertPrepareParams(property).versions(V2_1, V3_0).expected("TYPE", "pref").run(); sensei.assertPrepareParams(property).versions(V4_0).expected("PREF", "1").run(); }
@Test public void parseXml_no_child_elements() { sensei .assertParseXml("value") .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("value", property.value); assertNull(property.parsedDataType); } }); }
@Test public void parseHtml() { sensei .assertParseHtml("<div>value<del>ignore</del>value</div>") .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("valuevalue", property.value); assertNull(property.parsedDataType); } }); }
@Test public void parseXml_unknown() { sensei .assertParseXml("<unknown>value</unknown>") .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("value", property.value); assertEquals(null, property.parsedDataType); } }); }
@Test public void parseXml_no_xcard_element() { sensei .assertParseXml( "<one xmlns=\"http://example.com\">1</one><two xmlns=\"http://example.com\">2</two>") .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("12", property.value); assertNull(property.parsedDataType); } }); }
@Test public void parseHtml_types() { Email expected = new Email("*****@*****.**"); expected.addType(EmailType.HOME); // @formatter:off sensei .assertParseHtml( "<a href=\"mailto:[email protected]\">" + "<span class=\"type\">Home</span> Email" + "</a>") .run(expected); // @formatter:on }
@Test public void parseJson_list() { JCardValue value = JCardValue.multi("value1", "val,;ue2"); sensei .assertParseJson(value) .dataType(VCardDataType.TEXT) .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("value1,val\\,\\;ue2", property.value); } }); }
@Test public void writeXml() { // @formatter:off sensei .assertWriteXml(withAllFields) .run( "<pobox>P.O. Box 1234;</pobox>" + "<ext>Apt, 11</ext>" + "<street>123 Main St</street>" + "<locality>Austin</locality>" + "<region>TX</region>" + "<code>12345</code>" + "<country>USA</country>"); sensei .assertWriteXml(withSomeFields) .run( "<pobox>P.O. Box 1234;</pobox>" + "<ext/>" + "<street/>" + "<locality>Austin</locality>" + "<region>TX</region>" + "<code>12345</code>" + "<country/>"); sensei .assertWriteXml(empty) .run( "<pobox/>" + "<ext/>" + "<street/>" + "<locality/>" + "<region/>" + "<code/>" + "<country/>"); // @formatter:on }
@Test public void parseJson_structured() { JCardValue value = JCardValue.structured(null, "value1", "val,;ue2", Arrays.asList("value3", "value4")); sensei .assertParseJson(value) .dataType(VCardDataType.TEXT) .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals(";value1;val\\,\\;ue2;value3,value4", property.value); } }); }
@Test public void parseText() { final VCardParameters params = new VCardParameters(); sensei .assertParseText("value") .dataType(VCardDataType.TEXT) .warnings(1) .params(params) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("value", property.value); assertEquals(VCardDataType.TEXT, property.parsedDataType); assertSame(params, property.getParameters()); } }); }
@Test public void parseJson_single() { final VCardParameters params = new VCardParameters(); JCardValue value = JCardValue.single("value"); sensei .assertParseJson(value) .dataType(VCardDataType.TEXT) .params(params) .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("value", property.value); assertSame(params, property.getParameters()); } }); }
@Test public void parseXml() { final VCardParameters params = new VCardParameters(); // @formatter:off sensei .assertParseXml( "<ignore xmlns=\"http://example.com\">ignore-me</ignore>" + "<integer>value</integer>" + "<text>ignore-me</text>") .params(params) .warnings(1) .run( new Check<TestProperty>() { public void check(TestProperty property) { assertEquals("value", property.value); assertEquals(VCardDataType.INTEGER, property.parsedDataType); assertSame(params, property.getParameters()); } }); // @formatter:on }
@Test public void parseHtml_type_parameters() { // @formatter:off sensei .assertParseHtml( "<div>" + "<span class=\"type\">home</span>" + "<span class=\"type\">postal</span>" + "<span class=\"type\">other</span>" + "<span class=\"post-office-box\">P.O. Box 1234;</span>" + "<span class=\"extended-address\">Apt, 11</span>" + "<span class=\"street-address\">123 Main St</span>" + "<span class=\"locality\">Austin</span>" + "<span class=\"region\">TX</span>" + "<span class=\"postal-code\">12345</span>" + "<span class=\"country-name\">USA</span>" + "</div>") .run( new Check<Address>() { public void check(Address property) { assertEquals("P.O. Box 1234;", property.getPoBox()); assertEquals("Apt, 11", property.getExtendedAddress()); assertEquals("123 Main St", property.getStreetAddress()); assertEquals("Austin", property.getLocality()); assertEquals("TX", property.getRegion()); assertEquals("12345", property.getPostalCode()); assertEquals("USA", property.getCountry()); assertSetEquals( property.getTypes(), AddressType.HOME, AddressType.POSTAL, AddressType.get("other")); } }); // @formatter:on }
@Test public void parseText() { Email expected = new Email("*****@*****.**"); sensei.assertParseText("*****@*****.**").run(expected); }
@Test public void writeJson() { TestProperty property = new TestProperty("value"); sensei.assertWriteJson(property).run("value"); }
@Test public void dataType_default() { TestProperty property = new TestProperty("value"); sensei.assertDataType(property).run(VCardDataType.TEXT); }
@Test public void writeXml() { TestProperty prop = new TestProperty("value"); sensei.assertWriteXml(prop).run("<text>value</text>"); }