@Test
  public void testSimplifyJavaLangThreadState() {
    Set<TypeMirror> types = typeMirrorSet(typeMirrorOf(java.lang.Thread.State.class));
    assertTypeImportsAndSpellings(
        types, "foo.bar", ImmutableList.of(), ImmutableList.of("Thread.State"));
  }
Assert that the fake program returned by fakeProgramForTypes has the given list of imports and
the given list of spellings. Here, "spellings" means the way each type is referenced in the
decoded program, for example {@code Timer} if {@code java.util.Timer} can be imported, or
{@code java.util.Timer} if not.

<p>We construct a fake program that references each of the given types in turn.
TypeEncoder.decode doesn't have any real notion of Java syntax, so our program just consists of
START and END markers around the {@code `import`} tag, followed by each type in braces, as
encoded by TypeEncoder.encode. Once decoded, the program should consist of the appropriate
imports (inside START...END) and each type in braces, spelled appropriately.

@param fakePackage the package that TypeEncoder should consider the fake program to be in.
    Classes in the same package don't usually need to be imported.
value/src/test/java/com/google/auto/value/processor/TypeEncoderTest.java