blob: deee3032749acc34ca440b2a222f44124102f975 [file] [log] [blame]
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* 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.turbine.parse;
import static com.google.common.collect.Iterables.getOnlyElement;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.base.Joiner;
import com.google.turbine.tree.Tree;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class VariableDeclarationTest {
@Parameterized.Parameters
public static Iterable<Object[]> parameters() {
return Arrays.asList(
new Object[][] {
{
"public static final int S1 = 0b1 << 1;", "public static final int S1 = (1 << 1);",
},
{
"int x = 1;", "int x = 1;",
},
{
"int x = 1, y = 2;", "int x = 1; int y = 2;",
},
{
"int x[][] = 1, y = 2;", "int[][] x = 1; int y = 2;",
},
{
"int x[][] = 1, y[][] = 2;", "int[][] x = 1; int[][] y = 2;",
},
{
"int x = Foo<Bar, Baz>::g, y = 2;", "int x; int y = 2;",
},
{
"int x = Foo<Bar, Baz>::<asd>new, y = 2;", "int x; int y = 2;",
},
{
"int x = new List() {void f() {int x = 2, y = 3;}}, y = 2;", "int x; int y = 2;",
},
{
"int x = x -> asd, y = 2;", "int x; int y = 2;",
},
{
"int x = (x) -> asd, y = 2;", "int x; int y = 2;",
},
{
"int x = (x, y) -> asd + x, y = 2;", "int x; int y = 2;",
},
{
"int x = ((x, y) -> asd + x) + 2, y = 2;", "int x; int y = 2;",
},
{
"int x = x -> { return asd; }, y = 2;", "int x; int y = 2;",
},
{
"int x = (x) -> { return asd; }, y = 2;", "int x; int y = 2;",
},
{
"int x = (x, y) -> { asd(); }, y = 2;", "int x; int y = 2;",
},
{
"int x = ImmutableList.<String>of(\" hi \");", "int x;",
},
{
"int x = (a % b);", "int x = (a % b);",
},
{
"int x = (a >>> b);", "int x = (a >>> b);",
},
{
"int x = (a < b);", "int x = (a < b);",
},
{
"int x = (a > b);", "int x = (a > b);",
},
{
"int x = (a <= b);", "int x = (a <= b);",
},
{
"int x = (a >= b);", "int x = (a >= b);",
},
{
"int x = (a != b);", "int x = (a != b);",
},
{
"int x = (a & b);", "int x = (a & b);",
},
{
"int x = (a | b);", "int x = (a | b);",
},
{
"int x = (a ^ b);", "int x = (a ^ b);",
},
{
"int x = (a && b);", "int x = (a && b);",
},
{
"int x = 0.0f;", "int x = 0.0f;",
},
{
"int x = 'c';", "int x = 'c';",
},
{
"int x = (boolean) false;", "int x = (boolean) false;",
},
{
"int x = (short) 0;", "int x = (short) 0;",
},
{
"int x = (char) 0;", "int x = (char) 0;",
},
{
"int x = (double) 0;", "int x = (double) 0;",
},
{
"int x = (float) 0;", "int x = (float) 0;",
},
{
"int x = 0777;", "int x = 511;",
},
{
"int x = 0777l;", "int x = 511L;",
},
{
"private static final long serialVersionUID = 0L;",
"private static final long serialVersionUID = 0L;",
},
{
"static final int WHITESPACE_SHIFT ="
+ " Integer.numberOfLeadingZeros(WHITESPACE_TABLE.length() - 1);",
"static final int WHITESPACE_SHIFT;",
},
{
"private boolean omitNull = false;", "private boolean omitNull = false;",
},
{
"int x = -1;", "int x = -1;",
},
{
"volatile long p0, p1, p2, p3, p4, p5, p6;",
"volatile long p0; volatile long p1; volatile long p2; volatile long p3;"
+ " volatile long p4; volatile long p5; volatile long p6;",
},
{
"volatile long p0, p3[], p5[], p6;",
"volatile long p0; volatile long[] p3; volatile long[] p5; volatile long p6;",
},
{
"private static final sun.misc.Unsafe UNSAFE;",
"private static final sun.misc.Unsafe UNSAFE;",
},
{
"private static final int CUTOFF = (int) (MAX_TABLE_SIZE * DESIRED_LOAD_FACTOR);",
"private static final int CUTOFF = (int) (MAX_TABLE_SIZE * DESIRED_LOAD_FACTOR);",
},
{
"volatile long p0, p1 = 1, p2;",
"volatile long p0; volatile long p1 = 1; volatile long p2;",
},
{
"int enumConstantCache = new WeakHashMap <Class<? extends Enum<?>>,"
+ " Map<String, WeakReference<? extends Enum<?>>>>();",
"int enumConstantCache;",
},
});
}
private final String input;
private final String expected;
public VariableDeclarationTest(String input, String expected) {
this.input = input;
this.expected = expected;
}
@Test
public void test() {
Tree.CompUnit unit = Parser.parse("class Test {" + input + "}");
assertThat(Joiner.on(" ").join(getOnlyElement(unit.decls()).members())).isEqualTo(expected);
}
}