1d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/* 2d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 4d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * you may not use this file except in compliance with the License. 6d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * You may obtain a copy of the License at 7d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 8d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 10d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * See the License for the specific language governing permissions and 14d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * limitations under the License. 15d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 16d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool; 18d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 19d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport org.junit.Before; 20d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport org.junit.Test; 21d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport org.junit.runner.RunWith; 22d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport org.junit.runners.Parameterized; 23d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 24fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.ComparisonExpr; 25fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.Dependency; 26fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.Expr; 27fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.ExprModel; 28fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.FieldAccessExpr; 29fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.IdentifierExpr; 30fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.MethodCallExpr; 31fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.SymbolExpr; 32fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.TernaryExpr; 33fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.Callable; 34fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.java.JavaAnalyzer; 35fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.java.JavaClass; 36fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount 37d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.Arrays; 38d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.List; 39d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 40fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertEquals; 41fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertFalse; 42fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertSame; 43fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertTrue; 44d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 45d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class ExpressionVisitorTest { 46d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar ExpressionParser mParser = new ExpressionParser(new ExprModel()); 47d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 48d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Before 49d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void setUp() throws Exception { 5097d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar JavaAnalyzer.initForTests(); 51d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 52d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 53d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar private <T extends Expr> T parse(String input, Class<T> klass) { 54c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar final Expr parsed = mParser.parse(input, null); 55d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertSame(klass, parsed.getClass()); 56d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return (T) parsed; 57d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 58d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 59d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 60d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testSymbol() { 61d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final SymbolExpr res = parse("null", SymbolExpr.class); 62d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, mParser.getModel().size()); 63d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("null", res.getText()); 6497d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar assertEquals(new JavaClass(Object.class),res.getResolvedType()); 65d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(0, res.getDependencies().size()); 66d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 67d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 68d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 69d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @RunWith(Parameterized.class) 70d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public static class ComparisonExprTests { 71d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar ExpressionParser mParser = new ExpressionParser(new ExprModel()); 72d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar private final String mOp; 73d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 74d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Before 75d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void setUp() throws Exception { 7697d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar JavaAnalyzer.initForTests(); 77d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 78d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 79d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Parameterized.Parameters 80d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public static List<Object[]> data() { 81d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return Arrays.asList(new Object[][] { 82d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar {"=="}, {"<="}, {">="}, {">"}, {"<"} 83d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar }); 84d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 85d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 86d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public ComparisonExprTests(String op) { 87d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mOp = op; 88d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 89d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 90d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 91d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testComparison() { 92c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar final Expr res = mParser.parse("3 " + mOp + " 5", null); 93d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(3, mParser.getModel().size()); 94d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(res instanceof ComparisonExpr); 95d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar // 0 because they are both static 96d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(0, res.getDependencies().size()); 97d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 98d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 99d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 100d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 101d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 102d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 103d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testSimpleFieldAccess() { 104d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final FieldAccessExpr expr = parse("a.b", FieldAccessExpr.class); 105d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(2, mParser.mModel.size()); 106d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("b", expr.getName()); 107d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, expr.getChildren().size()); 108d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final Expr parent = expr.getChildren().get(0); 109d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(parent instanceof IdentifierExpr); 110d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final IdentifierExpr id = (IdentifierExpr) parent; 111d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("a", id.getName()); 112d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(0, id.getDependencies().size()); 113d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, expr.getDependencies().size()); 114d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 115d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 116d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 117d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testIdentifier() { 118d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final IdentifierExpr id = parse("myStr", IdentifierExpr.class); 119d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, mParser.mModel.size()); 120d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("myStr", id.getName()); 121d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar id.setUserDefinedType("java.lang.String"); 12297d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar assertEquals(new JavaClass(String.class), id.getResolvedType()); 123d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 124d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 125d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 126d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testTernary() { 127d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final TernaryExpr parsed = parse("a > b ? 5 : 4", TernaryExpr.class); 128d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(6, mParser.getModel().size()); 129d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(parsed.getPred() instanceof ComparisonExpr); 130d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(parsed.getIfTrue() instanceof SymbolExpr); 131d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(parsed.getIfFalse() instanceof SymbolExpr); 132d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar ComparisonExpr pred = (ComparisonExpr) parsed.getPred(); 133d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar SymbolExpr ifTrue = (SymbolExpr) parsed.getIfTrue(); 134d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar SymbolExpr ifFalse = (SymbolExpr) parsed.getIfFalse(); 135d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("5", ifTrue.getText()); 136d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("4", ifFalse.getText()); 137d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, parsed.getDependencies().size()); 138d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar for (Dependency dependency : parsed.getDependencies()) { 139d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(dependency.getOther() != pred, dependency.isConditional()); 140d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 141d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 142d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 143d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 144d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testInheritedFieldResolution() { 145d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final FieldAccessExpr parsed = parse("myStr.length", FieldAccessExpr.class); 146a70fed6415aa1e8bbbe929aee776402ac3b81c86George Mount assertTrue(parsed.getChild() instanceof IdentifierExpr); 147a70fed6415aa1e8bbbe929aee776402ac3b81c86George Mount final IdentifierExpr id = (IdentifierExpr) parsed.getChild(); 148d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar id.setUserDefinedType("java.lang.String"); 14997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar assertEquals(new JavaClass(int.class), parsed.getResolvedType()); 150e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount Callable getter = parsed.getGetter(); 151e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount assertEquals(Callable.Type.METHOD, getter.type); 152d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("length", getter.name); 153d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, parsed.getDependencies().size()); 154d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final Dependency dep = parsed.getDependencies().get(0); 155d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertSame(id, dep.getOther()); 156d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertFalse(dep.isConditional()); 157d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 158d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 159d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 160d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testGetterResolution() { 161d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final FieldAccessExpr parsed = parse("myStr.bytes", FieldAccessExpr.class); 162a70fed6415aa1e8bbbe929aee776402ac3b81c86George Mount assertTrue(parsed.getChild() instanceof IdentifierExpr); 163a70fed6415aa1e8bbbe929aee776402ac3b81c86George Mount final IdentifierExpr id = (IdentifierExpr) parsed.getChild(); 164d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar id.setUserDefinedType("java.lang.String"); 16597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar assertEquals(new JavaClass(byte[].class), parsed.getResolvedType()); 166e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount Callable getter = parsed.getGetter(); 167e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount assertEquals(Callable.Type.METHOD, getter.type); 168d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("getBytes", getter.name); 169d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, parsed.getDependencies().size()); 170d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final Dependency dep = parsed.getDependencies().get(0); 171d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertSame(id, dep.getOther()); 172d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertFalse(dep.isConditional()); 173d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 174d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 175d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 176d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testMethodCall() { 177d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final MethodCallExpr parsed = parse("user.getName()", MethodCallExpr.class); 178d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(parsed.getTarget() instanceof IdentifierExpr); 179d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("getName", parsed.getName()); 180d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(0, parsed.getArgs().size()); 181d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(1, parsed.getDependencies().size()); 182d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final Dependency dep = parsed.getDependencies().get(0); 183c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar assertSame(mParser.parse("user", null), dep.getOther()); 184d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertFalse(dep.isConditional()); 185d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 186d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 187d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 188d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testMethodCallWithArgs() { 189d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final MethodCallExpr parsed = parse("str.substring(1, a)", MethodCallExpr.class); 190d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(parsed.getTarget() instanceof IdentifierExpr); 191d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("substring", parsed.getName()); 192d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final List<Expr> args = parsed.getArgs(); 193d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(2, args.size()); 194d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(args.get(0) instanceof SymbolExpr); 195d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(args.get(1) instanceof IdentifierExpr); 196d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final List<Dependency> deps = parsed.getDependencies(); 197d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(2, deps.size()); 198d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 199d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 200d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar} 201