@Test public void basic() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "[\"prop1\", {}, \"text\", \"one\"]," + "[\"prop2\", {}, \"integer\", 2]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener).beginVCard(); verify(listener) .readProperty( null, "prop1", new VCardParameters(), VCardDataType.TEXT, JCardValue.single("one")); verify(listener) .readProperty( null, "prop2", new VCardParameters(), VCardDataType.INTEGER, JCardValue.single(2L)); verifyNoMoreInteractions(listener); }
@Test public void multi_value() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "[\"prop\", {}, \"text\", \"one\", \"two\", \"three\" ]," + "[\"prop\", {}, \"text\", \"one\" ]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener).beginVCard(); verify(listener) .readProperty( null, "prop", new VCardParameters(), VCardDataType.TEXT, JCardValue.multi("one", "two", "three")); verify(listener) .readProperty( null, "prop", new VCardParameters(), VCardDataType.TEXT, JCardValue.multi("one")); verifyNoMoreInteractions(listener); }
@Test public void parameters() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "[\"prop\", { \"a\": \"one\", \"b\": [\"two\"], \"c\": [\"three\", \"four\"] }, \"text\", \"value\"]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); VCardParameters expected = new VCardParameters(); expected.put("a", "one"); expected.put("b", "two"); expected.put("c", "three"); expected.put("c", "four"); verify(listener).beginVCard(); verify(listener) .readProperty(null, "prop", expected, VCardDataType.TEXT, JCardValue.single("value")); verifyNoMoreInteractions(listener); }
@Test public void different_data_types() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "[\"prop\", {}, \"text\", false, true, 1.1, 1, null, \"text\" ]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener).beginVCard(); verify(listener) .readProperty( null, "prop", new VCardParameters(), VCardDataType.TEXT, JCardValue.multi(false, true, 1.1, 1L, null, "text")); verifyNoMoreInteractions(listener); }
@Test public void ignore_other_json() throws Throwable { // @formatter:off String json = "{" + "\"website\": \"example.com\"," + "\"vcard\":" + "[\"vcard\"," + "[" + "[\"prop\", {}, \"text\", \"value\"]" + "]," + "[" + "]" + "]" + "}"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener).beginVCard(); verify(listener) .readProperty( null, "prop", new VCardParameters(), VCardDataType.TEXT, JCardValue.single("value")); verifyNoMoreInteractions(listener); }
@Test public void no_vcard() throws Throwable { // @formatter:off String json = "{" + "\"foo\": \"bar\"" + "}"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener, never()).beginVCard(); verifyNoMoreInteractions(listener); }
@Test public void empty_properties_array() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener).beginVCard(); verifyNoMoreInteractions(listener); }
@Test public void data_type_unknown() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "[\"prop\", {}, \"unknown\", \"value\"]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); verify(listener).beginVCard(); verify(listener) .readProperty(null, "prop", new VCardParameters(), null, JCardValue.single("value")); verifyNoMoreInteractions(listener); }
@Override protected VCard _readNext() throws IOException { if (reader.eof()) { return null; } warnings.clear(); JCardDataStreamListenerImpl listener = new JCardDataStreamListenerImpl(); reader.readNext(listener); VCard vcard = listener.vcard; if (vcard != null && !listener.versionFound) { warnings.add(reader.getLineNum(), null, 29); } return vcard; }
@Test public void complex_value() throws Throwable { // @formatter:off String json = "[\"vcard\"," + "[" + "[\"prop\", {}, \"text\", {" + "\"a\":[\"one\",\"two\"]," + "\"b\":{" + "\"c\":[\"three\"]," + "\"d\":{}" + "}" + "}, \"four\" ]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); reader.readNext(listener); List<JsonValue> expectedValues = new ArrayList<JsonValue>(); Map<String, JsonValue> m = new HashMap<String, JsonValue>(); { // @formatter:off m.put("a", new JsonValue(Arrays.asList(new JsonValue("one"), new JsonValue("two")))); Map<String, JsonValue> m2 = new HashMap<String, JsonValue>(); { m2.put("c", new JsonValue(Arrays.asList(new JsonValue("three")))); m2.put("d", new JsonValue(new HashMap<String, JsonValue>())); } m.put("b", new JsonValue(m2)); // @formatter:on } expectedValues.add(new JsonValue(m)); expectedValues.add(new JsonValue("four")); JCardValue expected = new JCardValue(expectedValues); verify(listener).beginVCard(); verify(listener) .readProperty(null, "prop", new VCardParameters(), VCardDataType.TEXT, expected); verifyNoMoreInteractions(listener); }
@Test public void bad_snytax() throws Throwable { // @formatter:off String json = "[" + "[\"vcard\"," + "[" + "[\"prop1\", {}, \"text\", \"one\"]," + "[\"prop2\", {}, []]" + "]" + "]," + "[\"vcard\"," + "[" + "[\"prop1\", {}, \"text\", \"one\"]," + "[\"prop2\", {}, \"integer\", 2]" + "]" + "]" + "]"; // @formatter:on JCardRawReader reader = createReader(json); JCardDataStreamListener listener = mock(JCardDataStreamListener.class); try { reader.readNext(listener); fail("JCardParseException expected."); } catch (JCardParseException e) { assertEquals(JsonToken.VALUE_STRING, e.getExpectedToken()); assertEquals(JsonToken.START_ARRAY, e.getActualToken()); } reader.readNext(listener); verify(listener, times(2)).beginVCard(); verify(listener, times(2)) .readProperty( null, "prop1", new VCardParameters(), VCardDataType.TEXT, JCardValue.single("one")); verify(listener) .readProperty( null, "prop2", new VCardParameters(), VCardDataType.INTEGER, JCardValue.single(2L)); verifyNoMoreInteractions(listener); }
public void close() throws IOException { reader.close(); }