@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);
  }
Exemple #12
0
 public void close() throws IOException {
   reader.close();
 }