Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
   /*
    * Copyright (C) 2005 The Guava Authors
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
    * You may obtain a copy of the License at
    *
    * http://www.apache.org/licenses/LICENSE-2.0
    *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.google.common.testing;
  
  import static com.google.common.base.Preconditions.checkArgument;
  import static com.google.common.base.Preconditions.checkNotNull;
  import static org.truth0.Truth.ASSERT;
  
  
  
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  
  import  javax.annotation.Nullable;

Unit test for NullPointerTester.

Author(s):
Kevin Bourrillion
Mick Killianey
  
  public class NullPointerTesterTest extends TestCase {

  
Non-NPE RuntimeException.
  
    public static class FooException extends RuntimeException {
      private static final long serialVersionUID = 1L;
    }

  
Class for testing all permutations of static/non-static one-argument methods using methodParameter().
  
    @SuppressWarnings("unused"// used by reflection
    public static class OneArg {
  
      public static void staticOneArgCorrectlyThrowsNpe(String s) {
        checkNotNull(s); // expect NPE here on null
      }
      public static void staticOneArgThrowsOtherThanNpe(String s) {
        throw new FooException();  // should catch as failure
      }
      public static void staticOneArgShouldThrowNpeButDoesnt(String s) {
        // should catch as failure
      }
      public static void
        // null?  no problem
      }
      public static void
        throw new FooException(); // ok, as long as it's not NullPointerException
      }
      public static void
      staticOneArgNullableThrowsNPE(@Nullable String s) {
        checkNotNull(s); // doesn't check if you said you'd accept null, but you don't
      }
  
      public void oneArgCorrectlyThrowsNpe(String s) {
        checkNotNull(s); // expect NPE here on null
      }
      public void oneArgThrowsOtherThanNpe(String s) {
        throw new FooException();  // should catch as failure
     }
     public void oneArgShouldThrowNpeButDoesnt(String s) {
       // should catch as failure
     }
     public void oneArgNullableCorrectlyDoesNotThrowNPE(@Nullable String s) {
       // null?  no problem
     }
     public void oneArgNullableCorrectlyThrowsOtherThanNPE(@Nullable String s) {
       throw new FooException(); // ok, as long as it's not NullPointerException
     }
     public void oneArgNullableThrowsNPE(@Nullable String s) {
       checkNotNull(s); // doesn't check if you said you'd accept null, but you don't
     }
   }
 
   private static final String[] STATIC_ONE_ARG_METHODS_SHOULD_PASS = {
     "staticOneArgCorrectlyThrowsNpe",
     "staticOneArgNullableCorrectlyDoesNotThrowNPE",
     "staticOneArgNullableCorrectlyThrowsOtherThanNPE",
     "staticOneArgNullableThrowsNPE",
   };
   private static final String[] STATIC_ONE_ARG_METHODS_SHOULD_FAIL = {
     "staticOneArgThrowsOtherThanNpe",
     "staticOneArgShouldThrowNpeButDoesnt",
   };
   private static final String[] NONSTATIC_ONE_ARG_METHODS_SHOULD_PASS = {
     "oneArgCorrectlyThrowsNpe",
     "oneArgNullableCorrectlyDoesNotThrowNPE",
     "oneArgNullableCorrectlyThrowsOtherThanNPE",
     "oneArgNullableThrowsNPE",
   };
   private static final String[] NONSTATIC_ONE_ARG_METHODS_SHOULD_FAIL = {
     "oneArgThrowsOtherThanNpe",
     "oneArgShouldThrowNpeButDoesnt",
   };
 
   private static class ThrowsIae {
     public static void christenPoodle(String name) {
       checkArgument(name != null);
     }
   }
 
   private static class ThrowsNpe {
     public static void christenPoodle(String name) {
       checkNotNull(name);
     }
   }
 
   private static class ThrowsUoe {
     public static void christenPoodle(String name) {
       throw new UnsupportedOperationException();
     }
   }
 
   private static class ThrowsSomethingElse {
     public static void christenPoodle(String name) {
       throw new RuntimeException();
     }
   }
 
   public void testDontAcceptIae() {
     NullPointerTester tester = new NullPointerTester();
     tester.testAllPublicStaticMethods(ThrowsNpe.class);
     tester.testAllPublicStaticMethods(ThrowsUoe.class);
     try {
       tester.testAllPublicStaticMethods(ThrowsIae.class);
     } catch (AssertionFailedError expected) {
       return;
     }
     fail();
   }
 
   public void testStaticOneArgMethodsThatShouldPass() throws Exception {
     for (String methodName : ) {
       Method method = OneArg.class.getMethod(methodNameString.class);
       try {
         new NullPointerTester().testMethodParameter(new OneArg(), method, 0);
       } catch (AssertionFailedError unexpected) {
         fail("Should not have flagged method " + methodName);
       }
     }
   }
 
   public void testStaticOneArgMethodsThatShouldFail() throws Exception {
     for (String methodName : ) {
       Method method = OneArg.class.getMethod(methodNameString.class);
       boolean foundProblem = false;
       try {
         new NullPointerTester().testMethodParameter(new OneArg(), method, 0);
       } catch (AssertionFailedError expected) {
         foundProblem = true;
       }
       assertTrue("Should report error in method " + methodNamefoundProblem);
     }
   }
 
   public void testNonStaticOneArgMethodsThatShouldPass() throws Exception {
     OneArg foo = new OneArg();
     for (String methodName : ) {
       Method method = OneArg.class.getMethod(methodNameString.class);
       try {
         new NullPointerTester().testMethodParameter(foomethod, 0);
       } catch (AssertionFailedError unexpected) {
         fail("Should not have flagged method " + methodName);
       }
     }
   }
 
   public void testNonStaticOneArgMethodsThatShouldFail() throws Exception {
     OneArg foo = new OneArg();
     for (String methodName : ) {
       Method method = OneArg.class.getMethod(methodNameString.class);
       boolean foundProblem = false;
       try {
         new NullPointerTester().testMethodParameter(foomethod, 0);
       } catch (AssertionFailedError expected) {
         foundProblem = true;
       }
       assertTrue("Should report error in method " + methodNamefoundProblem);
     }
   }

  
Class for testing all permutations of nullable/non-nullable two-argument methods using testMethod(). normalNormal: two params, neither is Nullable nullableNormal: only first param is Nullable normalNullable: only second param is Nullable nullableNullable: both params are Nullable
 
   public static class TwoArg {
    
Action to take on a null param.
 
     public enum Action {
       THROW_A_NPE {
         @Override public void act() {
           throw new NullPointerException();
         }
       },
       THROW_OTHER {
         @Override public void act() {
           throw new FooException();
         }
       },
       JUST_RETURN {
         @Override public void act() {}
       };
 
       public abstract void act();
     }
 
     public TwoArg(
         Action actionWhenFirstParamIsNull,
         Action actionWhenSecondParamIsNull) {
       this. = actionWhenFirstParamIsNull;
       this. = actionWhenSecondParamIsNull;
     }

    
Method that decides how to react to parameters.
 
     public void reactToNullParameters(Object firstObject second) {
       if (first == null) {
         .act();
       }
       if (second == null) {
         .act();
       }
     }

    
Two-arg method with no Nullable params.
 
     public void normalNormal(String firstInteger second) {
       reactToNullParameters(firstsecond);
     }

    
Two-arg method with the second param Nullable.
 
     public void normalNullable(String first, @Nullable Integer second) {
       reactToNullParameters(firstsecond);
     }

    
Two-arg method with the first param Nullable.
 
     public void nullableNormal(@Nullable String firstInteger second) {
       reactToNullParameters(firstsecond);
     }

    
Two-arg method with the both params Nullable.
 
     public void nullableNullable(
         @Nullable String first, @Nullable Integer second) {
       reactToNullParameters(firstsecond);
     }

    
To provide sanity during debugging.
 
     @Override public String toString() {
       return String.format("Bar(%s, %s)",
     }
   }
 
   public void verifyBarPass(Method methodTwoArg bar) {
     try {
       new NullPointerTester().testMethod(barmethod);
     } catch (AssertionFailedError incorrectError) {
       String errorMessage = String.format(
           "Should not have flagged method %s for %s"method.getName(), bar);
       assertNull(errorMessageincorrectError);
     }
   }
 
   public void verifyBarFail(Method methodTwoArg bar) {
     try {
       new NullPointerTester().testMethod(barmethod);
     } catch (AssertionFailedError expected) {
       return// good...we wanted a failure
     }
     String errorMessage = String.format(
         "Should have flagged method %s for %s"method.getName(), bar);
     fail(errorMessage);
   }
 
   public void testTwoArgNormalNormal() throws Exception {
     Method method = TwoArg.class.getMethod(
         "normalNormal"String.classInteger.class);
     for (TwoArg.Action first : TwoArg.Action.values()) {
       for (TwoArg.Action second : TwoArg.Action.values()) {
         TwoArg bar = new TwoArg(firstsecond);
         if (first.equals(..)
             && second.equals(..)) {
           verifyBarPass(methodbar); // require both params to throw NPE
         } else {
           verifyBarFail(methodbar);
         }
       }
     }
   }
 
   public void testTwoArgNormalNullable() throws Exception {
     Method method = TwoArg.class.getMethod(
         "normalNullable"String.classInteger.class);
     for (TwoArg.Action first : TwoArg.Action.values()) {
       for (TwoArg.Action second : TwoArg.Action.values()) {
         TwoArg bar = new TwoArg(firstsecond);
         if (first.equals(..)) {
           verifyBarPass(methodbar); // only pass if 1st param throws NPE
         } else {
           verifyBarFail(methodbar);
         }
       }
     }
   }
 
   public void testTwoArgNullableNormal() throws Exception {
     Method method = TwoArg.class.getMethod(
         "nullableNormal"String.classInteger.class);
     for (TwoArg.Action first : TwoArg.Action.values()) {
       for (TwoArg.Action second : TwoArg.Action.values()) {
         TwoArg bar = new TwoArg(firstsecond);
         if (second.equals(..)) {
           verifyBarPass(methodbar); // only pass if 2nd param throws NPE
         } else {
           verifyBarFail(methodbar);
         }
       }
     }
   }
 
   public void testTwoArgNullableNullable() throws Exception {
     Method method = TwoArg.class.getMethod(
         "nullableNullable"String.classInteger.class);
     for (TwoArg.Action first : TwoArg.Action.values()) {
       for (TwoArg.Action second : TwoArg.Action.values()) {
         TwoArg bar = new TwoArg(firstsecond);
         verifyBarPass(methodbar); // All args nullable:  anything goes!
       }
     }
   }
 
   /*
    * This next part consists of several sample classes that provide
    * demonstrations of conditions that cause NullPointerTester
    * to succeed/fail.
    */

  
Lots of well-behaved methods.
 
   @SuppressWarnings("unused"// used by reflection
   private static class PassObject extends SomeClassThatDoesNotUseNullable {
     public static void doThrow(Object arg) {
       if (arg == null) {
         throw new FooException();
       }
     }
     public void noArg() {}
     public void oneArg(String s) { checkNotNull(s); }
     void packagePrivateOneArg(String s) { checkNotNull(s); }
     protected void protectedOneArg(String s) { checkNotNull(s); }
     public void oneNullableArg(@Nullable String s) {}
     public void oneNullableArgThrows(@Nullable String s) { doThrow(s); }
 
     public void twoArg(String sInteger i) { checkNotNull(s); i.intValue(); }
     public void twoMixedArgs(String s, @Nullable Integer i) { checkNotNull(s); }
     public void twoMixedArgsThrows(String s, @Nullable Integer i) {
       checkNotNull(s); doThrow(i);
     }
     public void twoMixedArgs(@Nullable Integer iString s) { checkNotNull(s); }
     public void twoMixedArgsThrows(@Nullable Integer iString s) {
       checkNotNull(s); doThrow(i);
     }
     public void twoNullableArgs(@Nullable String s,
         @javax.annotation.Nullable Integer i) {}
     public void twoNullableArgsThrowsFirstArg(
         @Nullable String s, @Nullable Integer i) {
       doThrow(s);
     }
     public void twoNullableArgsThrowsSecondArg(
         @Nullable String s, @Nullable Integer i) {
       doThrow(i);
     }
     public static void staticOneArg(String s) { checkNotNull(s); }
     public static void staticOneNullableArg(@Nullable String s) {}
     public static void staticOneNullableArgThrows(@Nullable String s) {
       doThrow(s);
     }
   }
 
   public void testGoodClass() {
     shouldPass(new PassObject());
   }
 
   private static class FailOneArgDoesntThrowNPE extends PassObject {
     @Override public void oneArg(String s) {
       // Fail:  missing NPE for s
     }
   }
 
   public void testFailOneArgDoesntThrowNpe() {
   }
 
   private static class FailOneArgThrowsWrongType extends PassObject {
     @Override public void oneArg(String s) {
       doThrow(s); // Fail:  throwing non-NPE exception for null s
     }
   }
 
   public void testFailOneArgThrowsWrongType() {
   }
 
   private static class PassOneNullableArgThrowsNPE extends PassObject {
     @Override public void oneNullableArg(@Nullable String s) {
       checkNotNull(s); // ok to throw NPE
     }
   }
 
   public void testPassOneNullableArgThrowsNPE() {
   }
 
   private static class FailTwoArgsFirstArgDoesntThrowNPE extends PassObject {
     @Override public void twoArg(String sInteger i) {
       // Fail: missing NPE for s
       i.intValue();
     }
   }
 
   }
 
   private static class FailTwoArgsFirstArgThrowsWrongType extends PassObject {
     @Override public void twoArg(String sInteger i) {
       doThrow(s); // Fail:  throwing non-NPE exception for null s
       i.intValue();
     }
   }
 
   }
 
   private static class FailTwoArgsSecondArgDoesntThrowNPE extends PassObject {
     @Override public void twoArg(String sInteger i) {
       checkNotNull(s);
       // Fail: missing NPE for i
     }
   }
 
   }
 
   private static class FailTwoArgsSecondArgThrowsWrongType extends PassObject {
     @Override public void twoArg(String sInteger i) {
       checkNotNull(s);
       doThrow(i); // Fail:  throwing non-NPE exception for null i
     }
   }
 
   }
 
   private static class FailTwoMixedArgsFirstArgDoesntThrowNPE
       extends PassObject {
     @Override public void twoMixedArgs(String s, @Nullable Integer i) {
       // Fail: missing NPE for s
     }
   }
 
   }
 
   private static class FailTwoMixedArgsFirstArgThrowsWrongType
       extends PassObject {
     @Override public void twoMixedArgs(String s, @Nullable Integer i) {
       doThrow(s); // Fail:  throwing non-NPE exception for null s
     }
   }
 
   }
 
   private static class PassTwoMixedArgsNullableArgThrowsNPE extends PassObject {
     @Override public void twoMixedArgs(String s, @Nullable Integer i) {
       checkNotNull(s);
       i.intValue(); // ok to throw NPE?
     }
   }
 
   }
 
       extends PassObject {
     @Override public void twoMixedArgs(String s, @Nullable Integer i) {
       checkNotNull(s);
       doThrow(i); // ok to throw non-NPE exception for null i
     }
   }
 
   }
 
   private static class FailTwoMixedArgsSecondArgDoesntThrowNPE
       extends PassObject {
     @Override public void twoMixedArgs(@Nullable Integer iString s) {
       // Fail: missing NPE for null s
     }
   }
 
   }
 
   private static class FailTwoMixedArgsSecondArgThrowsWrongType
       extends PassObject {
     @Override public void twoMixedArgs(@Nullable Integer iString s) {
       doThrow(s); // Fail:  throwing non-NPE exception for null s
     }
   }
 
   }
 
   private static class PassTwoNullableArgsFirstThrowsNPE extends PassObject {
     @Override public void twoNullableArgs(
         @Nullable String s, @Nullable Integer i) {
       checkNotNull(s); // ok to throw NPE?
     }
   }
 
   }
 
   private static class PassTwoNullableArgsFirstThrowsOther extends PassObject {
     @Override public void twoNullableArgs(
         @Nullable String s, @Nullable Integer i) {
       doThrow(s); // ok to throw non-NPE exception for null s
     }
   }
 
   }
 
   private static class PassTwoNullableArgsSecondThrowsNPE extends PassObject {
     @Override public void twoNullableArgs(
         @Nullable String s, @Nullable Integer i) {
       i.intValue(); // ok to throw NPE?
     }
   }
 
   }
 
   private static class PassTwoNullableArgsSecondThrowsOther extends PassObject {
     @Override public void twoNullableArgs(
         @Nullable String s, @Nullable Integer i) {
       doThrow(i); // ok to throw non-NPE exception for null i
     }
   }
 
   }
 
   private static class PassTwoNullableArgsNeitherThrowsAnything
       extends PassObject {
     @Override public void twoNullableArgs(
         @Nullable String s, @Nullable Integer i) {
       // ok to do nothing
     }
   }
 
   }
 
   @SuppressWarnings("unused"// for NullPointerTester
   private static abstract class BaseClassThatFailsToThrow {
     public void oneArg(String s) {}
   }
 
   private static class SubclassWithBadSuperclass
       extends BaseClassThatFailsToThrow {}
 
   public void testSubclassWithBadSuperclass() {
   }
 
   @SuppressWarnings("unused"// for NullPointerTester
   private static abstract class BaseClassThatFailsToThrowForPackagePrivate {
     void packagePrivateOneArg(String s) {}
   }
 
   private static class SubclassWithBadSuperclassForPackagePrivate
 
     shouldFail(
   }
 
   @SuppressWarnings("unused"// for NullPointerTester
   private static abstract class BaseClassThatFailsToThrowForProtected {
     protected void protectedOneArg(String s) {}
   }
 
   private static class SubclassWithBadSuperclassForProtected
       extends BaseClassThatFailsToThrowForProtected {}
 
     shouldFail(
   }
 
   private static class SubclassThatOverridesBadSuperclassMethod
       extends BaseClassThatFailsToThrow {
     @Override public void oneArg(@Nullable String s) {}
   }
 
   }
 
   @SuppressWarnings("unused"// for NullPointerTester
   private static class SubclassOverridesTheWrongMethod
       extends BaseClassThatFailsToThrow {
     public void oneArg(@Nullable CharSequence s) {}
   }
 
   }
 
   @SuppressWarnings("unused"// for NullPointerTester
   private static class ClassThatFailsToThrowForStatic {
     static void staticOneArg(String s) {}
   }
 
   public void testClassThatFailsToThrowForStatic() {
   }
 
   private static class SubclassThatFailsToThrowForStatic
       extends ClassThatFailsToThrowForStatic {}
 
   }
 
   private static class SubclassThatTriesToOverrideBadStaticMethod
       extends ClassThatFailsToThrowForStatic {
     static void staticOneArg(@Nullable String s) {}
   }
 
   }
 
   private static final class HardToCreate {
     private HardToCreate(HardToCreate x) {}
   }
 
   @SuppressWarnings("unused"// used by reflection
   private static class CanCreateDefault {
     public void foo(@Nullable HardToCreate ignoredString required) {
       checkNotNull(required);
     }
   }
 
   public void testCanCreateDefault() {
     shouldPass(new CanCreateDefault());
   }
 
   @SuppressWarnings("unused"// used by reflection
   private static class CannotCreateDefault {
     public void foo(HardToCreate ignoredString required) {
       checkNotNull(ignored);
       checkNotNull(required);
     }
   }
 
   public void testCannotCreateDefault() {
   }
 
   private static void shouldPass(Object instanceVisibility visibility) {
     new NullPointerTester().testInstanceMethods(instancevisibility);
   }
 
   private static void shouldPass(Object instance) {
     shouldPass(instance.);
     shouldPass(instance.);
     shouldPass(instance.);
   }
 
   // TODO(cpovirk): eliminate surprising Object/Class overloading of shouldFail
 
   private static void shouldFail(Object instanceVisibility visibility) {
     try {
       new NullPointerTester().testInstanceMethods(instancevisibility);
     } catch (AssertionFailedError expected) {
       return;
     }
     fail("Should detect problem in " + instance.getClass().getSimpleName());
   }
 
   private static void shouldFail(Object instance) {
     shouldFail(instance.);
     shouldFail(instance.);
     shouldFail(instance.);
   }
 
   private static void shouldFail(Class<?> clsVisibility visibility) {
     try {
       new NullPointerTester().testStaticMethods(clsvisibility);
     } catch (AssertionFailedError expected) {
       return;
     }
     fail("Should detect problem in " + cls.getSimpleName());
   }
 
   private static void shouldFail(Class<?> cls) {
     shouldFail(cls.);
   }
 
   @SuppressWarnings("unused"// used by reflection
   private static class PrivateClassWithPrivateConstructor {
     private PrivateClassWithPrivateConstructor(@Nullable Integer argument) {}
   }
 
   public void testPrivateClass() {
     NullPointerTester tester = new NullPointerTester();
     for (Constructor<?> constructor
       tester.testConstructor(constructor);
     }
   }
 
   private interface Foo<T> {
     void doSomething(T barInteger baz);
   }
 
   private static class StringFoo implements Foo<String> {
 
     @Override public void doSomething(String barInteger baz) {
       checkNotNull(bar);
       checkNotNull(baz);
     }
   }
 
   public void testBridgeMethodIgnored() {
   }
 
   private static abstract class DefaultValueChecker {
 
     private final Map<IntegerObjectarguments = Maps.newHashMap();
 
     final DefaultValueChecker runTester() {
       new NullPointerTester()
           .testInstanceMethods(this.);
       return this;
     }
 
     final void assertNonNullValues(Object... expectedValues) {
       assertEquals(expectedValues.length.size());
       for (int i = 0; i < expectedValues.lengthi++) {
         assertEquals("Default value for parameter #" + i,
             expectedValues[i], .get(i));
       }
     }
 
     final Object getDefaultParameterValue(int position) {
       return .get(position);
     }
 
     final void calledWith(Object... args) {
       for (int i = 0; i < args.lengthi++) {
         if (args[i] != null) {
           .put(iargs[i]);
         }
       }
       for (Object arg : args) {
         checkNotNull(arg); // to fulfill null check
       }
     }
   }
 
   private enum Gender {
     MALE, FEMALE
   }
 
   private static class AllDefaultValuesChecker extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkDefaultValuesForTheseTypes(
         Gender gender,
         Integer integerint i,
         String stringCharSequence charSequence,
         List<Stringlist,
         ImmutableList<IntegerimmutableList,
         Map<StringIntegermap,
         ImmutableMap<StringStringimmutableMap,
         Set<Stringset,
         ImmutableSet<IntegerimmutableSet,
         SortedSet<NumbersortedSet,
         ImmutableSortedSet<NumberimmutableSortedSet,
         Multiset<Stringmultiset,
         ImmutableMultiset<IntegerimmutableMultiset,
         Multimap<StringIntegermultimap,
         ImmutableMultimap<StringIntegerimmutableMultimap,
         Table<StringIntegerExceptiontable,
         ImmutableTable<IntegerStringExceptionimmutableTable) {
       calledWith(
           gender,
           integeri,
           stringcharSequence,
           listimmutableList,
           mapimmutableMap,
           setimmutableSet,
           sortedSetimmutableSortedSet,
           multisetimmutableMultiset,
           multimapimmutableMultimap,
           tableimmutableTable);
     }
 
     final void check() {
           .,
           Integer.valueOf(0), 0,
           """",
           ImmutableList.of(), ImmutableList.of(),
           ImmutableMap.of(), ImmutableMap.of(),
           ImmutableSet.of(), ImmutableSet.of(),
           ImmutableSortedSet.of(), ImmutableSortedSet.of(),
           ImmutableMultiset.of(), ImmutableMultiset.of(),
           ImmutableMultimap.of(), ImmutableMultimap.of(),
           ImmutableTable.of(), ImmutableTable.of());
     }
   }
 
   public void testDefaultValues() {
     new AllDefaultValuesChecker().check();
   }
 
   private static class ObjectArrayDefaultValueChecker
       extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkArray(Object[] arrayString s) {
       calledWith(arrays);
     }
 
     void check() {
       runTester();
       Object[] defaultArray = (Object[]) getDefaultParameterValue(0);
       assertEquals(0, defaultArray.length);
     }
   }
 
   public void testObjectArrayDefaultValue() {
   }
 
   private static class StringArrayDefaultValueChecker
       extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkArray(String[] arrayString s) {
       calledWith(arrays);
     }
 
     void check() {
       runTester();
       String[] defaultArray = (String[]) getDefaultParameterValue(0);
       assertEquals(0, defaultArray.length);
     }
   }
 
   public void testStringArrayDefaultValue() {
   }
 
   private static class IntArrayDefaultValueChecker
       extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkArray(int[] arrayString s) {
       calledWith(arrays);
     }
 
     void check() {
       runTester();
       int[] defaultArray = (int[]) getDefaultParameterValue(0);
       assertEquals(0, defaultArray.length);
     }
   }
 
   public void testIntArrayDefaultValue() {
   }
 
   private enum EmptyEnum {}
 
   private static class EmptyEnumDefaultValueChecker
       extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkArray(EmptyEnum objectString s) {
       calledWith(objects);
     }
 
     void check() {
       try {
         runTester();
       } catch (AssertionError expected) {
         return;
       }
       fail("Should have failed because enum has no constant");
     }
   }
 
   public void testEmptyEnumDefaultValue() {
   }
 
   private static class GenericClassTypeDefaultValueChecker
       extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkArray(Class<? extends List<?>> clsString s) {
       calledWith(clss);
     }
 
     void check() {
       runTester();
       Class<?> defaultClass = (Class<?>) getDefaultParameterValue(0);
       assertEquals(List.classdefaultClass);
     }
   }
 
   public void testGenericClassDefaultValue() {
   }
 
   private static class NonGenericClassTypeDefaultValueChecker
       extends DefaultValueChecker {
 
     @SuppressWarnings("unused"// called by NullPointerTester
     public void checkArray(@SuppressWarnings("rawtypes"Class clsString s) {
       calledWith(clss);
     }
    void check() {
      runTester();
      Class<?> defaultClass = (Class<?>) getDefaultParameterValue(0);
      assertEquals(Object.classdefaultClass);
    }
  }
  }
  private static class GenericTypeTokenDefaultValueChecker
      extends DefaultValueChecker {
    @SuppressWarnings("unused"// called by NullPointerTester
    public void checkArray(
        TypeToken<? extends List<? super Number>> typeString s) {
      calledWith(types);
    }
    void check() {
      runTester();
      TypeToken<?> defaultType = (TypeToken<?>) getDefaultParameterValue(0);
      assertTrue(new TypeToken<List<? super Number>>() {}
          .isAssignableFrom(defaultType));
    }
  }
  }
  private static class NonGenericTypeTokenDefaultValueChecker
      extends DefaultValueChecker {
    @SuppressWarnings("unused"// called by NullPointerTester
    public void checkArray(
        @SuppressWarnings("rawtypes"TypeToken typeString s) {
      calledWith(types);
    }
    void check() {
      runTester();
      TypeToken<?> defaultType = (TypeToken<?>) getDefaultParameterValue(0);
      assertEquals(new TypeToken<Object>() {}, defaultType);
    }
  }