blob: 295da17863147db7950a637af2d54b27f0ba45c6 [file] [log] [blame]
/*
* Copyright 2018 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.dev.jjs.test;
import com.google.gwt.core.client.GwtScriptOnly;
import com.google.gwt.junit.client.GWTTestCase;
import java.util.ArrayList;
import java.util.function.Supplier;
/**
* Tests Java 10 features. It is super sourced so that gwt can be compiles under Java 7.
*
* IMPORTANT: For each test here there must exist the corresponding method in the non super sourced
* version.
*
* Eventually this test will graduate and not be super sourced.
*/
@GwtScriptOnly
public class Java10Test extends GWTTestCase {
interface VarArgsFunction<T, R> {
R apply(T... args);
}
@Override
public String getModuleName() {
return "com.google.gwt.dev.jjs.Java10Test";
}
public void testLocalVarType_DenotableTypes() {
var i = 42;
assertEquals(42, i);
var s = "42";
assertEquals("42", s);
Supplier<String> initializer = () -> "37";
var s2 = initializer.get();
//to be sure that s2 was inferred as a string and not an Object
String s3 = s2;
assertEquals("37", s3);
}
public void testLocalVarType_Anonymous() {
var o = new Object() {
int i;
String s;
};
o.i = 42;
o.s = "42";
assertEquals(42, o.i);
assertEquals("42", o.s);
}
public void testLocalVarType_LambdaCapture() {
var s = "42";
Supplier<String> supplier = () -> s;
assertEquals("42", supplier.get());
}
public void testLocalVarType_VarArg() {
var args = new String[] {"4", "2"};
VarArgsFunction<String, String> f = arr -> arr[0] + arr[1];
assertEquals("42", f.apply(args));
}
public void testLocalVarType_LocalClass() {
var i = 37;
class Local {
int m() {
var i = 40;
return i + 2;
}
int fromOuterScope() {
return i;
}
}
var l = new Local();
assertEquals(37, l.fromOuterScope());
assertEquals(42, l.m());
}
public void testLocalVarType_ForLoop() {
var a = new String[] {"4", "2"};
var s = "";
for (var i = 0; i < a.length; i++) {
s += a[i];
}
assertEquals("42", s);
}
public void testLocalVarType_EnhancedForLoopArray() {
var a = new String[] {"4", "2"};
var str = "";
for (var s : a) {
str += s;
}
assertEquals("42", str);
}
public void testLocalVarType_EnhancedNestedForLoopArray() {
var m = new int[][] {{1, 2}, {3, 4}};
var summ = 0;
for (var row : m) {
for (var cell : row) {
summ += cell;
}
}
assertEquals(10, summ);
}
public void testLocalVarType_EnhancedForLoopIterable() {
var list = new ArrayList<String>();
list.add("4");
list.add("2");
var str = "";
for (var s : list) {
str += s;
}
assertEquals("42", str);
}
}