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.
> GwtTestJsInterop$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/
> ccb8fee02fcae78b1a5db62d5722cd29ace53286/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.