JsonCnd { static <B, D, K extends KeyDefinitionToken<B, D>> void internalReadAllTo(final @NotNull NamePathResolver resolver, final @NotNull B builder, final @NotNull JsonValue parentValue, final @NotNull K[] tokens) { if (parentValue.getValueType() == JsonValue.ValueType.OBJECT) { JsonObject json = parentValue.asJsonObject(); Stream.of(tokens) .filter(inferTest1(K::nonUnknown).and(internalJsonContainsAnyLexToken(json))) .map(key -> toEntry(key, internalJsonLookupByAnyLexToken(key, json))) .filter(testValue(JavaxJson::nonEmptyValue)) .forEachOrdered(onEntry((key, keyValue) -> key.readTo(resolver, builder, keyValue))); } } private  JsonCnd(); @SuppressWarnings("WeakerAccess") static List<QNodeTypeDefinition> getQTypesFromJson(final @NotNull JsonObject json,
                      final @NotNull NamespaceMapping mapping); @SuppressWarnings("WeakerAccess") static List<PrivilegeDefinition> getPrivilegesFromJson(final @NotNull JsonValue json,
                          final @NotNull NamespaceMapping mapping); static JsonObject toJson(final @NotNull List<QNodeTypeDefinition> ntDefs,
                                    final @NotNull NamespaceMapping mapping); static JsonValue privilegesToJson(final @NotNull List<PrivilegeDefinition> privDefs,
                                             final @NotNull NamespaceMapping mapping); static List<JcrNs> toJcrNsList(final @NotNull NamespaceMapping mapping,
                                          final @NotNull NamespaceMappingRequest request); static Function<NodeTypeDefinition, QNodeTypeDefinition> adaptToQ(final @NotNull Session session); static Stream<Name> namedBy(final @NotNull QNodeTypeDefinition def); static Stream<Name> namedBy(final @NotNull PrivilegeDefinition def); static NamespaceMapping toNamespaceMapping(final List<JcrNs> jcrNsList); static @NotNull Stream<String> streamNsPrefix(final @NotNull String name); static List<Result<NodeTypeSet>> readNodeTypes(final @NotNull NamespaceMapping mapping,
                                                          final @NotNull List<URL> cndUrls); static NodeTypeSet aggregateNodeTypes(final @NotNull NamespaceMapping mapping,
                                                 final @NotNull List<NodeTypeSet> nodeTypeSets); static final NamespaceMapping BUILTIN_MAPPINGS; static final List<String> BUILTIN_NODETYPES; static final List<String> BUILTIN_PRIVILEGES; }
@Test public void testInternalReadAllTo() { final JsonObject parentValue = obj() .key("a", "alphaVal") .key("bravo", "bravoVal") .key("?", "unknownVal") .get(); final Map<String, String> builder = new HashMap<>(); final WhateverKeyDefToken alphaToken = mock(WhateverKeyDefToken.class); when(alphaToken.getLexTokens()).thenReturn(new String[]{"a"}); final WhateverKeyDefToken bravoToken = mock(WhateverKeyDefToken.class); when(bravoToken.getLexTokens()).thenReturn(new String[]{"b", "bravo"}); final WhateverKeyDefToken unknownToken = mock(WhateverKeyDefToken.class); when(unknownToken.getLexTokens()).thenReturn(new String[]{"?"}); final WhateverKeyDefToken[] tokens = new WhateverKeyDefToken[]{alphaToken, bravoToken, unknownToken}; for (WhateverKeyDefToken token : tokens) { doCallRealMethod().when(token).nonUnknown(); doCallRealMethod().when(token).getToken(); doCallRealMethod().when(token).readTo(any(NamePathResolver.class), any(Map.class), any(JsonValue.class)); } JsonCnd.internalReadAllTo(resolver, builder, parentValue, tokens); assertTrue("contains alphaVal key", builder.containsKey("alphaVal")); assertEquals("associated alpha token", "a", builder.get("alphaVal")); assertTrue("contains bravoVal key", builder.containsKey("bravoVal")); assertEquals("associated bravo token", "b", builder.get("bravoVal")); assertFalse("not contains unknownVal key", builder.containsKey("unknownVal")); }