test_class.file: core/src/test/java/net/adamcin/oakpal/core/checks/JcrPropertiesTest.java
test_class.identifier: JcrPropertiesTest
test_class.superclass: extends ProgressCheckTestBase
test_case.body: @Test
      public void testScopeNodeTypes() throws Exception {
          TestUtil.testBlock(() -> {
              ProgressCheck check = new JcrProperties().newInstance(obj()
                      .key("properties", arr()
                              .and(key("name", "double_nan").key("requireType", "String"))
                              .and(key("name", "double_neg_inf").key("requireType", "String"))
                      )
                      .get());
              CheckReport report = scanWithCheck(check, "double_properties.zip");
              Assert.assertEquals("two violations: " + report.getViolations(), 2, report.getViolations().size());
              assertTrue("all violations have packageIds", report.getViolations().stream()
                      .allMatch(viol -> !viol.getPackages().isEmpty()));
          });
          TestUtil.testBlock(() -> {
              ProgressCheck check = new JcrProperties().newInstance(obj()
                      .key("scopeNodeTypes", arr("nt:unstructured"))
                      .key("properties", arr()
                              .and(key("name", "double_nan").key("requireType", "String"))
                              .and(key("name", "double_neg_inf").key("requireType", "String"))
                      )
                      .get());
              CheckReport report = scanWithCheck(check, "double_properties.zip");
              Assert.assertEquals("two violations: " + report.getViolations(), 2, report.getViolations().size());
              assertTrue("all violations have packageIds", report.getViolations().stream()
                      .allMatch(viol -> !viol.getPackages().isEmpty()));
          });
          TestUtil.testBlock(() -> {
              ProgressCheck check = new JcrProperties().newInstance(obj()
                      .key("scopeNodeTypes", arr("sling:Folder"))
                      .key("properties", arr()
                              .and(key("name", "double_nan").key("requireType", "String"))
                              .and(key("name", "double_neg_inf").key("requireType", "String"))
                      )
                      .get());
              CheckReport report = scanWithCheck(check, "double_properties.zip");
              Assert.assertEquals("no violations: " + report.getViolations(), 0, report.getViolations().size());
              assertTrue("all violations have packageIds", report.getViolations().stream()
                      .allMatch(viol -> !viol.getPackages().isEmpty()));
          });
      }
test_case.class_method_signature: JcrPropertiesTest.testScopeNodeTypes()
test_case.full_signature: @Test public void testScopeNodeTypes()
test_case.identifier: testScopeNodeTypes
test_case.invocations: testBlock newInstance get key obj and and arr key key key key scanWithCheck assertEquals getViolations size getViolations assertTrue allMatch stream getViolations isEmpty getPackages testBlock newInstance get key key obj arr and and arr key key key key scanWithCheck assertEquals getViolations size getViolations assertTrue allMatch stream getViolations isEmpty getPackages testBlock newInstance get key key obj arr and and arr key key key key scanWithCheck assertEquals getViolations size getViolations assertTrue allMatch stream getViolations isEmpty getPackages
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void testScopeNodeTypes()
focal_class.declarator: KEYS = new JsonKeys() {
          @Override
          public String scopePaths() {
              return "scopePaths";
          }
  
          @Override
          public String denyNodeTypes() {
              return "denyNodeTypes";
          }
  
          @Override
          public String scopeNodeTypes() {
              return "scopeNodeTypes";
          }
  
          @Override
          public String properties() {
              return "properties";
          }
      }
focal_class.modifier: private static final
focal_class.original_string: private static final JsonKeys KEYS = new JsonKeys() {
          @Override
          public String scopePaths() {
              return "scopePaths";
          }
  
          @Override
          public String denyNodeTypes() {
              return "denyNodeTypes";
          }
  
          @Override
          public String scopeNodeTypes() {
              return "scopeNodeTypes";
          }
  
          @Override
          public String properties() {
              return "properties";
          }
      };
focal_class.type: JsonKeys
focal_class.var_name: KEYS
focal_class.declarator: CONFIG_SCOPE_PATHS = keys().scopePaths()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_SCOPE_PATHS = keys().scopePaths();
focal_class.type: String
focal_class.var_name: CONFIG_SCOPE_PATHS
focal_class.declarator: CONFIG_DENY_NODE_TYPES = keys().denyNodeTypes()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_DENY_NODE_TYPES = keys().denyNodeTypes();
focal_class.type: String
focal_class.var_name: CONFIG_DENY_NODE_TYPES
focal_class.declarator: CONFIG_SCOPE_NODE_TYPES = keys().scopeNodeTypes()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_SCOPE_NODE_TYPES = keys().scopeNodeTypes();
focal_class.type: String
focal_class.var_name: CONFIG_SCOPE_NODE_TYPES
focal_class.declarator: CONFIG_PROPERTIES = keys().properties()
focal_class.modifier: @Deprecated
      public static final
focal_class.original_string: @Deprecated
      public static final String CONFIG_PROPERTIES = keys().properties();
focal_class.type: String
focal_class.var_name: CONFIG_PROPERTIES
focal_class.file: core/src/main/java/net/adamcin/oakpal/core/checks/JcrProperties.java
focal_class.identifier: JcrProperties
focal_class.interfaces: implements ProgressCheckFactory
focal_class.class_method_signature: JcrProperties.keys()
focal_class.full_signature: @NotNull public static JsonKeys keys()
focal_class.identifier: keys
focal_class.modifiers: @NotNull public static
focal_class.parameters: ()
focal_class.return: JsonKeys
focal_class.signature: JsonKeys keys()
focal_class.class_method_signature: JcrProperties.newInstance(final JsonObject config)
focal_class.full_signature: @Override public ProgressCheck newInstance(final JsonObject config)
focal_class.identifier: newInstance
focal_class.modifiers: @Override public
focal_class.parameters: (final JsonObject config)
focal_class.return: ProgressCheck
focal_class.signature: ProgressCheck newInstance(final JsonObject config)
focal_method.body: @Override
      public ProgressCheck newInstance(final JsonObject config) {
          List<Rule> pathScope = Rules.fromJsonArray(arrayOrEmpty(config, keys().scopePaths()));
  
          List<String> denyNodeTypes = mapArrayOfStrings(arrayOrEmpty(config, keys().denyNodeTypes()));
          List<String> nodeTypeScope = mapArrayOfStrings(arrayOrEmpty(config, keys().scopeNodeTypes()));
          final ResourceBundleHolder resourceBundleHolder = new ResourceBundleHolder();
          List<JcrPropertyConstraints> propertyChecks = JcrPropertyConstraints
                  .fromJsonArray(resourceBundleHolder::getResourceBundle, arrayOrEmpty(config, keys().properties()));
          return new Check(pathScope, denyNodeTypes, nodeTypeScope, propertyChecks, resourceBundleHolder);
      }
focal_method.class_method_signature: JcrProperties.newInstance(final JsonObject config)
focal_method.full_signature: @Override public ProgressCheck newInstance(final JsonObject config)
focal_method.identifier: newInstance
focal_method.invocations: fromJsonArray arrayOrEmpty scopePaths keys mapArrayOfStrings arrayOrEmpty denyNodeTypes keys mapArrayOfStrings arrayOrEmpty scopeNodeTypes keys fromJsonArray arrayOrEmpty properties keys
focal_method.modifiers: @Override public
focal_method.parameters: (final JsonObject config)
focal_method.return: ProgressCheck
focal_method.signature: ProgressCheck newInstance(final JsonObject config)