public void testMethodIndirection() throws Exception {
    PythonScriptEngineInitializer initializer = new PythonScriptEngineInitializer();
    ScriptEngine engine = initializer.instantiate(Collections.<String>emptySet(), null);

    Bindings bindings = engine.createBindings();
    Tester tester = new Tester();
    bindings.put("tester", tester);

    engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);

    engine.eval("tester.increment()");

    Assert.assertEquals(tester.getInvocationCoung(), 1, "Unexpected number of tester invocations.");

    Map<String, Set<Method>> methods = getMethodsByName(Tester.class);
    for (Set<Method> ms : methods.values()) {
      Set<String> fns = initializer.generateIndirectionMethods("tester", ms);
      for (String fn : fns) {
        engine.eval(fn);
      }
    }

    engine.eval("increment()");
    Assert.assertEquals(
        tester.getInvocationCoung(),
        2,
        "Unexpected number of tester invocations after calling an indirected method.");
  }