@Test
 public void testGlobalResultInvalid() {
   final AnalyzerCreationResult<TestAnalyzerType> failedResult =
       new AnalyzerCreationResult<TestAnalyzerType>(
           this.testAnalyzerType,
           ValidationResult.invalidResult("Something global wrong"),
           createParameterResults(ValidationResult.validResult(), ValidationResult.validResult()));
   Assert.assertFalse(failedResult.wasSuccessful());
   Assert.assertNull(failedResult.getAnalyzer());
   Assert.assertFalse(failedResult.getGlobalResult().isValid());
   Assert.assertEquals(
       failedResult.getParameterResults().keySet(),
       new HashSet<>(Arrays.asList(this.stringParameterSpec, this.intParameterSpec)));
   Assert.assertTrue(failedResult.getParameterResults().get(this.stringParameterSpec).isValid());
   Assert.assertTrue(failedResult.getParameterResults().get(this.intParameterSpec).isValid());
 }
  @SuppressWarnings("serial")
  @Test
  public void testFailedConstructions() {
    final TestAnalyzerType nullAnalyzerType = null;
    final Analyzer<TestAnalyzerType> nullAnalyzer = null;

    // Null analyzer type
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                nullAnalyzerType,
                ValidationResult.validResult(),
                createParameterResults(
                    ValidationResult.validResult(), ValidationResult.validResult())));

    // Null global results
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                this.testAnalyzer,
                null,
                createParameterResults(
                    ValidationResult.validResult(), ValidationResult.validResult())));

    // Null parameter results
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                this.testAnalyzer, ValidationResult.validResult(), null));

    // Null analyzer but valid results
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                nullAnalyzer,
                ValidationResult.validResult(),
                createParameterResults(
                    ValidationResult.validResult(), ValidationResult.validResult())));

    // Non-null analyzer but global result invalid
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                this.testAnalyzer,
                ValidationResult.invalidResult("bad global"),
                createParameterResults(
                    ValidationResult.validResult(), ValidationResult.validResult())));

    // Non-null analyzer but parameter result invalid
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                this.testAnalyzer,
                ValidationResult.validResult(),
                createParameterResults(
                    ValidationResult.invalidResult("bad string"), ValidationResult.validResult())));

    // Missing parameter results
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                this.testAnalyzer, ValidationResult.validResult(), Collections.emptyMap()));

    // Extra parameter results
    testFailedConstruction(
        () ->
            new AnalyzerCreationResult<TestAnalyzerType>(
                this.testAnalyzer,
                ValidationResult.validResult(),
                new HashMap<ParameterSpec<?>, ValidationResult>() {
                  {
                    put(
                        AnalyzerCreationResultTest.this.stringParameterSpec,
                        ValidationResult.validResult());
                    put(
                        AnalyzerCreationResultTest.this.intParameterSpec,
                        ValidationResult.validResult());
                    put(
                        AnalysisTestUtils.createParameterSpec("extraId", Boolean.class),
                        ValidationResult.validResult());
                  }
                }));
  }