Hi Vassilis, Thanks for your help. After having specified the TOP_WINDOW as you suggested, the test passed in IntelliJ IDEA. However, it is still failing via Maven plugin [1]. I don't understand any more...
Mincong [1]: https://travis-ci.org/mincong-h/learning-gwt/jobs/352049257#L769 On Sun, Mar 11, 2018 at 6:47 PM, Vassilis Virvilis <[email protected]> wrote: > I would guess that script injector injects by default inside gwt frame. > > You need to specify TOP_WINDOW because jsinterop are mapped to $wnd by > default. > > Something like that (can't test right now) > > ScriptInjector.fromString(js).setWindow(ScriptInjector.TOP_ > WINDOW).inject(); > > If you do this then you need to change your jsni test to > > var p = new $wnd.ns.Person(); > > Hope that helps. > > Vassilis > > > On Sun, Mar 11, 2018 at 3:44 PM, Mincong Huang <[email protected]> > wrote: > >> Hi, >> >> I've a simple JavaScript: >> >> var ns = { >> Person: function() { >> this.sayHello = function() { >> return 'Hi'; >> }; >> } >> } >> >> And I used it to test JsInterop annotation `@JsType` in my GWT test. I >> injected JS code to >> GWTTestCase and tried to retrieve the definition via `@JsType`. However, >> it doesn't >> work, it seems that GWT cannot find the method (see Travis CI [1]): >> >> > [INFO] [ERROR] function @io.mincongh.client.interop.Gw >> tTestJsInterop$Person::sayHello() NOT FOUND, thisObj: >> com.google.gwt.dev.shell.JavaObject@43182ce3, methodName: @ >> io.mincongh.client.interop.GwtTestJsInterop$Person::sayHello() >> > [INFO] Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: >> 11.342 sec <<< FAILURE! >> >> Actually, my code is pretty simple: >> >> public class GwtTestJsInterop extends GWTTestCase { >> @Override >> public void gwtSetUp() { >> String js = "var ns = { Person: function() { this.sayHello = >> function() { return 'Hi'; }; } }"; >> ScriptInjector.fromString(js).inject(); >> } >> >> @Override >> public String getModuleName() { >> return R.JUNIT_MODULE; >> } >> >> public void testJsni() { >> assertEquals("Hi", sayHello()); >> } >> >> private native String sayHello() /*-{ >> var p = new ns.Person(); >> return p.sayHello(); >> }-*/; >> >> public void testJsType() { >> Person p = new Person(); >> String words = p.sayHello(); >> assertEquals("Hi", words); >> } >> >> @JsType(namespace = "ns", isNative = true) >> private static class Person { >> public native String sayHello(); >> } >> } >> >> >> Note: The 2nd test method, `testJsni()`, runs successfully, so the JS >> should be >> injected correctly. I also have the flag `generateJsInteropExports` >> enabled in the >> Maven GWT plugin in the POM [2]. So what am I missing? >> >> I'm using GWT 2.8.2 and Maven GWT plugin 2.8.2. Any help will be >> appreciated! >> >> Thank you, >> Mincong HUANG >> >> [1]: https://travis-ci.org/mincong-h/learning-gwt/builds/351967694#L754 >> [2]: https://github.com/mincong-h/learning-gwt/blob/ccb8fee0 >> 2fcae78b1a5db62d5722cd29ace53286/pom.xml#L106 >> >> -- >> You received this message because you are subscribed to the Google Groups >> "GWT Users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at https://groups.google.com/group/google-web-toolkit. >> For more options, visit https://groups.google.com/d/optout. >> > > > > -- > Vassilis Virvilis > > -- > You received this message because you are subscribed to the Google Groups > "GWT Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/google-web-toolkit. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "GWT Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/d/optout.
