LayoutBinderTest.java revision c1560e6b00b398867da12fbdc5a1fcd1d50b801c
1d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/* 2d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 4d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * you may not use this file except in compliance with the License. 5d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * You may obtain a copy of the License at 6d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 7d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Unless required by applicable law or agreed to in writing, software 8d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 9d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * See the License for the specific language governing permissions and 11d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * limitations under the License. 12d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 13d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 14fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool; 15d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 16d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 17d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport org.junit.Before; 18d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport org.junit.Test; 19d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.Expr; 21fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.ExprModel; 22fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.FieldAccessExpr; 23fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.IdentifierExpr; 24fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.expr.StaticIdentifierExpr; 25fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.Callable; 26fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.reflection.java.JavaClass; 27fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount 28d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.List; 29d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.Map; 30d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 31fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertEquals; 32fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertFalse; 33fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertSame; 34fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport static org.junit.Assert.assertTrue; 35d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 36d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class LayoutBinderTest { 37d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar LayoutBinder mLayoutBinder; 38d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar ExprModel mExprModel; 39d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Before 40d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void setUp() throws Exception { 4197d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar mLayoutBinder = new MockLayoutBinder(); 42d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar mExprModel = mLayoutBinder.getModel(); 43d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 44d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 45d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 46d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testRegisterId() { 47c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount int originalSize = mExprModel.size(); 48c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mLayoutBinder.addVariable("test", "java.lang.String", null); 49c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount assertEquals(originalSize + 1, mExprModel.size()); 50c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount final Map.Entry<String, Expr> entry = findIdentifier("test"); 51d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final Expr value = entry.getValue(); 52d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(value.getClass(), IdentifierExpr.class); 53d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final IdentifierExpr id = (IdentifierExpr) value; 54d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("test", id.getName()); 5597d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar assertEquals(new JavaClass(String.class), id.getResolvedType()); 56d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(id.isDynamic()); 57d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 58d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 59d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 60d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testRegisterImport() { 61c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount int originalSize = mExprModel.size(); 62c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mExprModel.addImport("test", "java.lang.String", null); 63c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount assertEquals(originalSize + 1, mExprModel.size()); 64c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount final Map.Entry<String, Expr> entry = findIdentifier("test"); 65d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final Expr value = entry.getValue(); 66d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(value.getClass(), StaticIdentifierExpr.class); 67d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final IdentifierExpr id = (IdentifierExpr) value; 68d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals("test", id.getName()); 6997d6ddf47f4ff1abb3ed5201ce5232163f5325b1Yigit Boyar assertEquals(new JavaClass(String.class), id.getResolvedType()); 70d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertFalse(id.isDynamic()); 71d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 72d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 73d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 74d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testParse() { 75c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount int originalSize = mExprModel.size(); 76c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mLayoutBinder.addVariable("user", "android.databinding.tool2.LayoutBinderTest.TestUser", 77c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar null); 78c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mLayoutBinder.parse("user.name", null); 79c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mLayoutBinder.parse("user.lastName", null); 80c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount assertEquals(originalSize + 3, mExprModel.size()); 81d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar final List<Expr> bindingExprs = mExprModel.getBindingExpressions(); 82d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(2, bindingExprs.size()); 83d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar IdentifierExpr id = mExprModel.identifier("user"); 84d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(bindingExprs.get(0) instanceof FieldAccessExpr); 85d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(bindingExprs.get(1) instanceof FieldAccessExpr); 86d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertEquals(2, id.getParents().size()); 87d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(bindingExprs.get(0).getChildren().contains(id)); 88d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(bindingExprs.get(1).getChildren().contains(id)); 89d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 90d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 91d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar @Test 92d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public void testParseWithMethods() { 93c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mLayoutBinder.addVariable("user", "android.databinding.tool.LayoutBinderTest.TestUser", 94c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar null); 95c1560e6b00b398867da12fbdc5a1fcd1d50b801cYigit Boyar mLayoutBinder.parse("user.fullName", null); 96d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar Expr item = mExprModel.getBindingExpressions().get(0); 97d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(item instanceof FieldAccessExpr); 98d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar IdentifierExpr id = mExprModel.identifier("user"); 99d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar FieldAccessExpr fa = (FieldAccessExpr) item; 100d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar fa.getResolvedType(); 101e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount final Callable getter = fa.getGetter(); 102e6c6d3bf4fac3fa11c5780cfd3bc14cdb0caaea1George Mount assertTrue(getter.type == Callable.Type.METHOD); 103a70fed6415aa1e8bbbe929aee776402ac3b81c86George Mount assertSame(id, fa.getChild()); 104d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar assertTrue(fa.isDynamic()); 105d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 106d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 107c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount private Map.Entry<String, Expr> findIdentifier(String name) { 108c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount for (Map.Entry<String, Expr> entry : mExprModel.getExprMap().entrySet()) { 109c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount if (entry.getValue() instanceof IdentifierExpr) { 110c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount IdentifierExpr expr = (IdentifierExpr) entry.getValue(); 111c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount if (name.equals(expr.getName())) { 112c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount return entry; 113c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount } 114c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount } 115c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount } 116c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount return null; 117c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount } 118c96847768305d83c6bc4919432af9bd9bfe4c08eGeorge Mount 119d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar static class TestUser { 120d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String name; 121d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String lastName; 122d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 123d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar public String fullName() { 124d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar return name + " " + lastName; 125d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 126d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 127d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar} 128