/* * Copyright (c) 2017-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.litho.specmodels.processor; import javax.lang.model.element.Name; import javax.lang.model.element.TypeElement; import javax.lang.model.util.Elements; import com.facebook.litho.annotations.LayoutSpec; import com.facebook.litho.specmodels.model.DependencyInjectionHelper; import com.facebook.litho.specmodels.model.LayoutSpecModel; import org.junit.Before; import org.junit.Test; import static org.assertj.core.api.Java6Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** * Tests {@link LayoutSpecModelFactory} */ public class LayoutSpecModelFactoryTest { private static final String TEST_QUALIFIED_SPEC_NAME = "com.facebook.litho.TestSpec"; private static final String TEST_QUALIFIED_COMPONENT_NAME = "com.facebook.litho.Test"; Elements mElements = mock(Elements.class); TypeElement mTypeElement = mock(TypeElement.class); DependencyInjectionHelper mDependencyInjectionHelper = mock(DependencyInjectionHelper.class); LayoutSpec mLayoutSpec = mock(LayoutSpec.class); @Before public void setUp() { when(mElements.getDocComment(mTypeElement)).thenReturn(""); when(mTypeElement.getQualifiedName()).thenReturn(new MockName(TEST_QUALIFIED_SPEC_NAME)); when(mTypeElement.getAnnotation(LayoutSpec.class)).thenReturn(mLayoutSpec); } @Test public void testCreate() { LayoutSpecModel layoutSpecModel = LayoutSpecModelFactory.create(mElements, mTypeElement, mDependencyInjectionHelper); assertThat(layoutSpecModel.getSpecName()).isEqualTo("TestSpec"); assertThat(layoutSpecModel.getComponentName()).isEqualTo("Test"); assertThat(layoutSpecModel.getSpecTypeName().toString()).isEqualTo(TEST_QUALIFIED_SPEC_NAME); assertThat(layoutSpecModel.getComponentTypeName().toString()) .isEqualTo(TEST_QUALIFIED_COMPONENT_NAME); assertThat(layoutSpecModel.getDelegateMethods().size()).isEqualTo(0); assertThat(layoutSpecModel.getProps().size()).isEqualTo(0); assertThat(layoutSpecModel.hasInjectedDependencies()).isTrue(); assertThat(layoutSpecModel.getDependencyInjectionHelper()) .isSameAs(mDependencyInjectionHelper); } @Test public void testCreateWithSpecifiedName() { when(mLayoutSpec.value()).thenReturn("TestComponentName"); LayoutSpecModel layoutSpecModel = LayoutSpecModelFactory.create(mElements, mTypeElement, mDependencyInjectionHelper); assertThat(layoutSpecModel.getSpecName()).isEqualTo("TestSpec"); assertThat(layoutSpecModel.getComponentName()).isEqualTo("TestComponentName"); assertThat(layoutSpecModel.getSpecTypeName().toString()).isEqualTo(TEST_QUALIFIED_SPEC_NAME); assertThat(layoutSpecModel.getComponentTypeName().toString()) .isEqualTo("com.facebook.litho.TestComponentName"); } private static class MockName implements Name { private final CharSequence mName; public MockName(final CharSequence name) { mName = name; } @Override public boolean contentEquals(CharSequence cs) { return mName.equals(cs); } @Override public int length() { return mName.length(); } @Override public char charAt(int index) { return mName.charAt(index); } @Override public CharSequence subSequence(int start, int end) { return mName.subSequence(start, end); } @Override public String toString() { return mName.toString(); } } }