public void testWithNoPackage() throws Exception {

    RecorderLocator.clearRecorders();

    final URLClassLoader ourClassLoader =
        (URLClassLoader) BlockingClassLoader.class.getClassLoader();

    final BlockingClassLoader blockingClassLoader =
        new BlockingClassLoader(
            ourClassLoader, Arrays.<String>asList(AnotherClass.class.getName()));

    final NoPackageURLClassLoader cl =
        new NoPackageURLClassLoader(ourClassLoader.getURLs(), blockingClassLoader);

    final Class<?> noPackageClass = cl.loadClass(AnotherClass.class.getName());
    final Method noPackageMethod = noPackageClass.getMethod("getOne");

    assertEquals(1, noPackageMethod.invoke(null));
    m_recorderStubFactory.assertNoMoreCalls();

    final Object result = m_instrumenter.createInstrumentedProxy(null, m_recorder, noPackageClass);
    assertSame(noPackageClass, result);
    m_recorderStubFactory.assertNoMoreCalls();

    assertEquals(1, noPackageMethod.invoke(null));
    m_recorderStubFactory.assertSuccess("start");
    m_recorderStubFactory.assertSuccess("end", true);
    m_recorderStubFactory.assertNoMoreCalls();
  }
  public void testInstrumentInstance() throws Exception {

    RecorderLocator.clearRecorders();

    final MyClass c1 = new MyExtendedClass();

    assertEquals(0, c1.getA());
    m_recorderStubFactory.assertNoMoreCalls();

    final Object result = m_instrumenter.createInstrumentedProxy(null, m_recorder, c1);
    assertSame(c1, result);
    m_recorderStubFactory.assertNoMoreCalls();

    MyClass.staticSix();
    m_recorderStubFactory.assertNoMoreCalls();

    assertEquals(0, c1.getA());
    m_recorderStubFactory.assertSuccess("start");
    m_recorderStubFactory.assertSuccess("end", true);
    m_recorderStubFactory.assertNoMoreCalls();

    final MyClass c2 = new MyClass();
    assertEquals(0, c2.getA());
    m_recorderStubFactory.assertNoMoreCalls();
  }
  public void testArrays() throws Exception {

    RecorderLocator.clearRecorders();

    try {
      m_instrumenter.createInstrumentedProxy(null, m_recorder, new MyClass[0]);
      fail("Expected NotWrappableTypeException");
    } catch (NotWrappableTypeException e) {
    }

    try {
      m_instrumenter.createInstrumentedProxy(null, m_recorder, MyClass[].class);
      fail("Expected NotWrappableTypeException");
    } catch (NotWrappableTypeException e) {
    }

    m_recorderStubFactory.assertNoMoreCalls();
  }
 @Override
 protected void tearDown() throws Exception {
   super.tearDown();
   ExposeInstrumentation.premain("", m_originalInstrumentation);
   RecorderLocator.clearRecorders();
 }