| /* |
| * Copyright 2014 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| * use this file except in compliance with the License. You may obtain a copy of |
| * the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| * License for the specific language governing permissions and limitations under |
| * the License. |
| */ |
| package com.google.gwt.core.client; |
| |
| import com.google.gwt.junit.client.GWTTestCase; |
| |
| /** |
| * Tests for the $entry() method in JSNI. |
| */ |
| public class EntryTest extends GWTTestCase { |
| |
| @Override |
| public String getModuleName() { |
| return "com.google.gwt.core.Core"; |
| } |
| |
| /** |
| * Tests that methods with primitive return types correctly return JS values |
| * when wrapped with {@code $entry} (rather than JS objects). |
| * <p> |
| * We test this with a boolean {@code false} that we coerce to a boolean. If the |
| * $entry-wrapped function returns it as a JS Boolean object, it'll coerce to |
| * {@code true} because it's non-null. |
| * |
| * @see <a href="https://code.google.com/p/google-web-toolkit/issues/detail?id=8548">issue 8548</a> |
| */ |
| public native void testPrimitiveReturnType() /*-{ |
| var assertStringEquals = @junit.framework.Assert::assertEquals(Ljava/lang/String;Ljava/lang/String;); |
| var assertFalse = @junit.framework.Assert::assertFalse(Z); |
| var assertTrue = @junit.framework.Assert::assertTrue(Z); |
| |
| var assertIsBooleanValueFalse = function(shouldBeBooleanValueFalse) { |
| assertStringEquals("boolean", typeof shouldBeBooleanValueFalse); |
| assertFalse(!!shouldBeBooleanValueFalse); |
| }; |
| var assertIsBooleanObjectFalse = function(shouldBeBooleanObjectFalse) { |
| assertStringEquals("object", typeof shouldBeBooleanObjectFalse); |
| assertTrue(shouldBeBooleanObjectFalse instanceof Boolean); |
| assertFalse(shouldBeBooleanObjectFalse.valueOf()); |
| // that was the failing code in issue 8548, so test it explicitly: |
| assertTrue(!!shouldBeBooleanObjectFalse); |
| } |
| |
| // Make sure we don't erroneously wrap values |
| var returnsBooleanValueFalse = $entry(function() { return false; }); |
| assertIsBooleanValueFalse(returnsBooleanValueFalse()); |
| // try if with a Java method returning a Java primitive boolean (issue 8548) |
| var returnsJavaPrimitiveBooleanFalse = $entry(@com.google.gwt.core.client.EntryTest::returnsFalse()); |
| assertIsBooleanValueFalse(returnsJavaPrimitiveBooleanFalse()); |
| |
| // Make sure we don't erroneously unwrap objects |
| var returnsBooleanObjectFalse = $entry(function() { return new Boolean(false); }); |
| assertIsBooleanObjectFalse(returnsBooleanObjectFalse()); |
| |
| // Just to be sure, make sure we round-trip values correctly: |
| var returnsFirstArgument = $entry(function(a) { return a; }); |
| assertIsBooleanValueFalse(returnsFirstArgument(false)); |
| assertIsBooleanObjectFalse(returnsFirstArgument(new Boolean(false))); |
| }-*/; |
| |
| private static boolean returnsFalse() { |
| return false; |
| } |
| } |