public static LithoView createAndMeasureLithoView( ComponentContext c, Component component, int widthSpec, int heightSpec) { final ComponentTree componentTree = ComponentTree.create(c, component).build(); final LithoView lithoView = new LithoView(c); lithoView.setComponentTree(componentTree); lithoView.onAttachedToWindow(); lithoView.measure(widthSpec, heightSpec); // This is really lithoView#layout without the mount componentTree.measure(widthSpec, heightSpec, LAYOUT_SIZE_OUT, false); return lithoView; }
@Test public void testClearUnusedStateContainers() { mComponentTree.updateStateSync(mTestComponent.getGlobalKey(), new TestStateUpdate(), "test"); assertThat(getStateContainersMap().keySet().size()).isEqualTo(1); assertThat(getStateContainersMap().keySet().contains(mTestComponent.getGlobalKey())).isTrue(); final Component child1 = new TestComponent(); child1.setKey("key"); mLithoView.setComponent(child1); mLithoView.onAttachedToWindow(); ComponentTestHelper.measureAndLayout(mLithoView); mComponentTree.updateStateSync(child1.getGlobalKey(), new TestStateUpdate(), "test"); assertThat(getStateContainersMap().keySet().size()).isEqualTo(1); assertThat(getStateContainersMap().keySet().contains("key")).isTrue(); }
@Test public void testSetTreeToTwoViewsBothAttached() { Component component = TestDrawableComponent.create(mContext) .build(); ComponentTree componentTree = ComponentTree.create( mContext, component) .build(); // Attach first view. LithoView lithoView1 = new LithoView(mContext); lithoView1.setComponentTree(componentTree); lithoView1.onAttachedToWindow(); // Attach second view. LithoView lithoView2 = new LithoView(mContext); lithoView2.onAttachedToWindow(); // Set the component that is already mounted on the first view, on the second attached view. // This should be ok. lithoView2.setComponentTree(componentTree); }
@Test public void testLifecycle() { mLithoView.onAttachedToWindow(); measureAndLayout(mLithoView); assertThat(mComponent.getCurrentStep()).isEqualTo(LifecycleStep.ON_BIND); mLithoView.onDetachedFromWindow(); assertThat(mComponent.getCurrentStep()).isEqualTo(LifecycleStep.ON_UNBIND); mLithoView.onAttachedToWindow(); assertThat(mComponent.getCurrentStep()).isEqualTo(LifecycleStep.ON_BIND); mComponentTree.setRoot(LifecycleMethodsComponent.create(20)); measureAndLayout(mLithoView); assertThat(mComponent.getCurrentStep()).isEqualTo(LifecycleStep.ON_UNMOUNT); mComponentTree.setRoot(mComponent); measureAndLayout(mLithoView); assertThat(mComponent.getCurrentStep()).isEqualTo(LifecycleStep.ON_BIND); mLithoView.onDetachedFromWindow(); mComponentTree.setRoot(mComponent); measureAndLayout(mLithoView); assertThat(mComponent.getCurrentStep()).isEqualTo(LifecycleStep.ON_UNBIND); }
@Test public void testNoCrashOnSameComponentKey() { final Component child1 = new TestComponent(); child1.setKey("key"); final Component child2 = new TestComponent(); child2.setKey("key"); final Component component = new InlineLayoutSpec() { @Override protected Component onCreateLayout(ComponentContext c) { return Column.create(c).child(child1).child(child2).build(); } }; final LithoView lithoView = new LithoView(mContext); lithoView.setComponent(component); lithoView.onAttachedToWindow(); ComponentTestHelper.measureAndLayout(lithoView); }
@Test public void testNoCrashOnSameComponentKeyNestedContainers() { final Component child1 = new TestComponent(); child1.setKey("key"); final Component child2 = new TestComponent(); child2.setKey("key"); final Component component = new InlineLayoutSpec() { @Override protected Component onCreateLayout(ComponentContext c) { return Column.create(c) .child(Column.create(c).child(child1)) .child(Column.create(c).child(child2)) .build(); } }; final LithoView lithoView = new LithoView(mContext); lithoView.setComponent(component); lithoView.onAttachedToWindow(); ComponentTestHelper.measureAndLayout(lithoView); }
public void setup(boolean enableNestedTreeResolutionExeperiment) throws Exception { mComponentsLogger = new TestComponentsLogger(); mContext = new ComponentContext(RuntimeEnvironment.application, mLogTag, mComponentsLogger); mWidthSpec = makeSizeSpec(39, EXACTLY); mHeightSpec = makeSizeSpec(41, EXACTLY); mLayoutThreadShadowLooper = Shadows.shadowOf( (Looper) Whitebox.invokeMethod( ComponentTree.class, "getDefaultLayoutThreadLooper")); mTestComponent = new TestComponent(); mComponentTree = ComponentTree.create(mContext, mTestComponent) .enableNestedTreeResolutionExeperiment(enableNestedTreeResolutionExeperiment) .build(); mLithoView = new LithoView(mContext); mLithoView.setComponentTree(mComponentTree); mLithoView.onAttachedToWindow(); ComponentTestHelper.measureAndLayout(mLithoView); }