@Test public void readScalarListWithNulls() throws Exception { ResponseField scalarList = ResponseField.forList("list", "list", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("list", asList(null, "item1", "item2", null, "item3", null)); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(scalarList, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readString(); } })).isEqualTo(asList("item1", "item2", "item3")); }
@Test public void readCustomListWithDecodedNull() throws Exception { final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("responseName", asList("http://", "http://")); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); ResponseField field = ResponseField.forList("responseName", "fieldName", null, false, NO_CONDITIONS); Truth.assertThat(responseReader.readList(field, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readCustomType(URL_CUSTOM_TYPE); } })).isEmpty(); }
@Test public void readCustomList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("successFieldResponseName", asList("2017-04-16", "2017-04-17", "2017-04-18")); recordSet.put("successFieldName", asList("2017-04-19", "2017-04-20")); recordSet.put("classCastExceptionFieldResponseName", "anything"); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(successField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readCustomType(DATE_CUSTOM_TYPE); } })).isEqualTo(asList(DATE_TIME_FORMAT.parse("2017-04-16"), DATE_TIME_FORMAT.parse("2017-04-17"), DATE_TIME_FORMAT.parse("2017-04-18"))); try { responseReader.readList(classCastExceptionField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); fail("expected ClassCastException"); } catch (ClassCastException expected) { // expected } }
@Test public void readListOfScalarList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS);
@Test public void readIntList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("successFieldResponseName", asList(BigDecimal.valueOf(1), BigDecimal.valueOf(2), BigDecimal.valueOf(3))); recordSet.put("successFieldName", asList(BigDecimal.valueOf(4), BigDecimal.valueOf(5))); recordSet.put("classCastExceptionFieldResponseName", "anything"); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(successField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readInt(); } })).isEqualTo(asList(1, 2, 3)); try { responseReader.readList(classCastExceptionField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); fail("expected ClassCastException"); } catch (ClassCastException expected) { // expected } }
@Test public void readLongList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("successFieldResponseName", asList(BigDecimal.valueOf(1), BigDecimal.valueOf(2), BigDecimal.valueOf(3))); recordSet.put("successFieldName", asList(BigDecimal.valueOf(4), BigDecimal.valueOf(5))); recordSet.put("classCastExceptionFieldResponseName", "anything"); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(successField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readInt(); } })).isEqualTo(asList(1, 2, 3)); try { responseReader.readList(classCastExceptionField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); fail("expected ClassCastException"); } catch (ClassCastException expected) { // expected } }
@Test public void readDoubleList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("successFieldResponseName", asList(BigDecimal.valueOf(1), BigDecimal.valueOf(2), BigDecimal.valueOf(3))); recordSet.put("successFieldName", asList(BigDecimal.valueOf(4), BigDecimal.valueOf(5))); recordSet.put("classCastExceptionFieldResponseName", "anything"); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(successField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readDouble(); } })).isEqualTo(asList(1D, 2D, 3D)); try { responseReader.readList(classCastExceptionField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); fail("expected ClassCastException"); } catch (ClassCastException expected) { // expected } }
@Test public void readStringList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("successFieldResponseName", asList("value1", "value2", "value3")); recordSet.put("successFieldName", asList("value4", "value5")); recordSet.put("classCastExceptionFieldResponseName", "anything"); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(successField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readString(); } })).isEqualTo(asList("value1", "value2", "value3")); try { responseReader.readList(classCastExceptionField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); fail("expected ClassCastException"); } catch (ClassCastException expected) { // expected } }
@Test public void readObjectList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS);
@Test public void readBooleanList() throws Exception { ResponseField successField = ResponseField.forList("successFieldResponseName", "successFieldName", null, false, NO_CONDITIONS); ResponseField classCastExceptionField = ResponseField.forList("classCastExceptionFieldResponseName", "classCastExceptionFieldName", null, false, NO_CONDITIONS); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("successFieldResponseName", asList(true, false, true)); recordSet.put("successFieldName", asList(false, false)); recordSet.put("classCastExceptionFieldResponseName", "anything"); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(successField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readBoolean(); } })).isEqualTo(asList(true, false, true)); try { responseReader.readList(classCastExceptionField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); fail("expected ClassCastException"); } catch (ClassCastException expected) { // expected } }
@Test public void read_object_list_with_nulls() throws Exception { final ResponseField listField = ResponseField.forList("list", "list", null, false, NO_CONDITIONS); final ResponseField indexField = ResponseField.forList("index", "index", null, false, NO_CONDITIONS); final List responseObjects = asList(new Object(), new Object(), new Object()); final Map<String, Object> recordSet = new HashMap<>(); recordSet.put("list", asList( null, new UnmodifiableMapBuilder<String, Object>(1) .put("index", "0") .build(), new UnmodifiableMapBuilder<String, Object>(1) .put("index", "1") .build(), null, new UnmodifiableMapBuilder<String, Object>(1) .put("index", "2") .build(), null )); RealResponseReader<Map<String, Object>> responseReader = responseReader(recordSet); assertThat(responseReader.readList(listField, new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return reader.readObject(new ResponseReader.ObjectReader<Object>() { @Override public Object read(ResponseReader reader) { return responseObjects.get(Integer.parseInt(reader.readString(indexField))); } }); } })).isEqualTo(responseObjects); }
@Test public void optionalFieldsIOException() throws Exception { RealResponseReader<Map<String, Object>> responseReader = responseReader(Collections.<String, Object>emptyMap()); responseReader.readString(ResponseField.forString("stringField", "stringField", null, true, NO_CONDITIONS)); responseReader.readInt(ResponseField.forInt("intField", "intField", null, true, NO_CONDITIONS)); responseReader.readLong(ResponseField.forLong("longField", "longField", null, true, NO_CONDITIONS)); responseReader.readDouble(ResponseField.forDouble("doubleField", "doubleField", null, true, NO_CONDITIONS)); responseReader.readBoolean(ResponseField.forBoolean("booleanField", "booleanField", null, true, NO_CONDITIONS)); responseReader.readObject(ResponseField.forObject("objectField", "objectField", null, true, NO_CONDITIONS), new ResponseReader.ObjectReader<Object>() { @Override public Object read(ResponseReader reader) { return null; } }); responseReader.readList(ResponseField.forList("scalarListField", "scalarListField", null, true, NO_CONDITIONS), new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null; } }); responseReader.readCustomType((ResponseField.CustomTypeField) ResponseField.forCustomType("customTypeField", "customTypeField", null, true, DATE_CUSTOM_TYPE, NO_CONDITIONS)); }
responseReader.readList(ResponseField.forList("scalarListField", "scalarListField", null, false, NO_CONDITIONS), new ResponseReader.ListReader() { @Override public Object read(ResponseReader.ListItemReader reader) { return null;