/** * Creates a matcher that matches if the examined {@link DisplayData.Item} has the specified * value. */ public static Matcher<DisplayData.Item> hasValue(Object value) { return hasValue(is(value)); }
private static Matcher<DisplayData> hasDisplayItem( String key, DisplayData.Type type, Object value) { DisplayData.FormattedItemValue formattedValue = type.format(value); return hasDisplayItem( allOf(hasKey(key), hasType(type), hasValue(formattedValue.getLongValue()))); }
@Test public void testHasValue() { Matcher<DisplayData> matcher = hasDisplayItem(hasValue("bar")); assertFalse(matcher.matches(createDisplayDataWithItem("foo", "baz"))); assertThat(createDisplayDataWithItem("foo", "bar"), matcher); }
@Test public void testStaticValueProviderDate() { final Instant value = Instant.now(); DisplayData data = DisplayData.from( new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder.add(DisplayData.item("foo", StaticValueProvider.of(value))); } }); @SuppressWarnings("unchecked") DisplayData.Item item = (DisplayData.Item) data.items().toArray()[0]; @SuppressWarnings("unchecked") Matcher<Item> matchesAllOf = allOf( hasKey("foo"), hasType(DisplayData.Type.TIMESTAMP), hasValue(ISO_FORMATTER.print(value))); assertThat(item, matchesAllOf); }
@Test public void testDisplayDataInheritanceNamespace() { ExtendsBaseOptions options = PipelineOptionsFactory.as(ExtendsBaseOptions.class); options.setFoo("bar"); DisplayData displayData = DisplayData.from(options); assertThat( displayData, hasDisplayItem( allOf(hasKey("foo"), hasValue("bar"), hasNamespace(ExtendsBaseOptions.class)))); }
@Test @Category(ValidatesRunner.class) public void testPrimitiveReadDisplayData() { DisplayDataEvaluator evaluator = DisplayDataEvaluator.create(); TextIO.Read read = TextIO.read().from("foobar"); Set<DisplayData> displayData = evaluator.displayDataForPrimitiveSourceTransforms(read); assertThat( "TextIO.Read should include the file prefix in its primitive display data", displayData, hasItem(hasDisplayItem(hasValue(startsWith("foobar"))))); }
@Test public void testDoFnDisplayData() { DoFn<String, String> fn = new DoFn<String, String>() { @ProcessElement public void processElement(ProcessContext c) {} @Override public void populateDisplayData(Builder builder) { builder.add(DisplayData.item("doFnMetadata", "bar")); } }; SingleOutput<String, String> parDo = ParDo.of(fn); DisplayData displayData = DisplayData.from(parDo); assertThat( displayData, hasDisplayItem( allOf( hasKey("fn"), hasType(DisplayData.Type.JAVA_CLASS), DisplayDataMatchers.hasValue(fn.getClass().getName())))); assertThat(displayData, includesDisplayDataFor("fn", fn)); }
@Test public void testItemProperties() { final Instant value = Instant.now(); DisplayData data = DisplayData.from( new HasDisplayData() { @Override public void populateDisplayData(DisplayData.Builder builder) { builder.add( DisplayData.item("now", value) .withLabel("the current instant") .withLinkUrl("http://time.gov") .withNamespace(DisplayDataTest.class)); } }); @SuppressWarnings("unchecked") DisplayData.Item item = (DisplayData.Item) data.items().toArray()[0]; @SuppressWarnings("unchecked") Matcher<Item> matchesAllOf = allOf( hasNamespace(DisplayDataTest.class), hasKey("now"), hasType(DisplayData.Type.TIMESTAMP), hasValue(ISO_FORMATTER.print(value)), hasShortValue(nullValue(String.class)), hasLabel("the current instant"), hasUrl(is("http://time.gov"))); assertThat(item, matchesAllOf); }
transform.getClass(), subComponent1.getClass(), subComponent2.getClass())), hasType(notNullValue(DisplayData.Type.class)), hasValue(not(isEmptyOrNullString())))));
@Test public void testPopulateDisplayData() { DisplayData displayData = DisplayData.from( config.withProjectId(PROJECT_ID).withInstanceId(INSTANCE_ID).withTableId(TABLE_ID) ::populateDisplayData); assertThat( displayData, hasDisplayItem( allOf( hasKey("projectId"), hasLabel("Bigtable Project Id"), hasValue(PROJECT_ID.get())))); assertThat( displayData, hasDisplayItem( allOf( hasKey("instanceId"), hasLabel("Bigtable Instance Id"), hasValue(INSTANCE_ID.get())))); assertThat( displayData, hasDisplayItem( allOf(hasKey("tableId"), hasLabel("Bigtable Table Id"), hasValue(TABLE_ID.get())))); }
@Test public void testDisplayDataItemProperties() { PipelineOptions options = PipelineOptionsFactory.create(); options.setTempLocation("myTemp"); DisplayData displayData = DisplayData.from(options); assertThat( displayData, hasDisplayItem( allOf( hasKey("tempLocation"), hasType(DisplayData.Type.STRING), hasValue("myTemp"), hasNamespace(PipelineOptions.class)))); }
hasKey("projectId"), hasLabel("Bigtable Project Id"), hasValue("RuntimeValueProvider{propertyName=bigtableProject, default=null}")))); assertThat( displayData, hasKey("instanceId"), hasLabel("Bigtable Instance Id"), hasValue("RuntimeValueProvider{propertyName=bigtableInstanceId, default=null}")))); assertThat( displayData, hasKey("tableId"), hasLabel("Bigtable Table Id"), hasValue("RuntimeValueProvider{propertyName=bigtableTableId, default=null}"))));
@Test public void testReadingDisplayData() { RowFilter rowFilter = RowFilter.newBuilder().setRowKeyRegexFilter(ByteString.copyFromUtf8("foo.*")).build(); ByteKeyRange keyRange = ByteKeyRange.ALL_KEYS.withEndKey(ByteKey.of(0xab, 0xcd)); BigtableIO.Read read = BigtableIO.read() .withBigtableOptions(BIGTABLE_OPTIONS) .withTableId("fooTable") .withRowFilter(rowFilter) .withKeyRange(keyRange); DisplayData displayData = DisplayData.from(read); assertThat( displayData, hasDisplayItem( allOf(hasKey("tableId"), hasLabel("Bigtable Table Id"), hasValue("fooTable")))); assertThat(displayData, hasDisplayItem("rowFilter", rowFilter.toString())); assertThat(displayData, hasDisplayItem("keyRange 0", keyRange.toString())); // BigtableIO adds user-agent to options; assert only on key and not value. assertThat(displayData, hasDisplayItem("bigtableOptions")); }