### Question:
PropertyConfiguration { @NotNull public Set<String> getKeys() { return orderedPropertySources.stream() .map(PropertySource::getKeys) .flatMap(Set::stream) .collect(Collectors.toSet()); } PropertyConfiguration(@NotNull final List<PropertySource> orderedPropertySources); @NotNull Optional<T> getValueOrEmpty(@NotNull final NullableProperty<T> property); @NotNull T getValueOrDefault(@NotNull final ValuedProperty<T> property); @NotNull Optional<T> getValue(@NotNull final NullableProperty<T> property); @NotNull T getValue(@NotNull final ValuedProperty<T> property); boolean wasKeyProvided(@NotNull final String key); boolean wasPropertyProvided(@NotNull final TypedProperty<T> property); Optional<String> getPropertySource(@NotNull final Property property); Optional<String> getPropertyOrigin(@NotNull final Property property); @NotNull Set<String> getKeys(); Optional<ValueParseException> getPropertyException(@NotNull final TypedProperty<T> property); Optional<String> getRaw(@NotNull final Property property); @NotNull Map<String, String> getRaw(); @NotNull Map<String, String> getRaw(@NotNull final Set<String> keys); @NotNull Map<String, String> getRaw(@NotNull final Predicate<String> predicate); @NotNull Map<String, String> getRaw(@NotNull final PassthroughProperty property);  }### Answer:
@Test public void getKeys() { Assertions.assertEquals(Bds.setOf("example.key", "other.key"), configOf(Pair.of("example.key", UNKNOWN_VALUE), Pair.of("other.key", UNKNOWN_VALUE)).getKeys(), "The set of keys returned is not identical to all those provided."); Assertions.assertEquals(Collections.emptySet(), emptyConfig().getKeys(), "The property was not provided and should not have an origin."); }