@Nullable FeatureUpdate toFeatureUpdate(FeatureController<MODEL> featureController, MODEL model) { final List<ViewItem> oldItems = featureItems.getItems(featureController); final List<ViewItem> newItems = featureController.buildItems(model); if (newItems == null) { return null; } validateNewViewItems(featureController, newItems); final DiffUtilCallbackImpl callback = new DiffUtilCallbackImpl(mapViewTypeToItemComparator, oldItems, newItems); final DiffResult diffResult = calculateDiff(callback, false); return new FeatureUpdate(featureController, newItems, diffResult); }
@Test public void registerFeatures_should_notThrowException_when_listOfViewItemsIsEmpty() { //GIVEN StubFeatureController<String> controller = new StubFeatureController<>(emptyList(), emptyList()); List<FeatureController<String>> featureControllers = singletonList(controller); FeaturesAdapter<String> featuresAdapter = new FeaturesAdapter<>(featureControllers); //WHEN featuresAdapter.validateNewViewItems(controller, emptyList()); //THEN }
@Test public void registerFeatures_should_notThrowException_when_listOfViewItemsIsNull() { //GIVEN StubFeatureController<String> controller = new StubFeatureController<>(emptyList(), null); List<FeatureController<String>> featureControllers = singletonList(controller); FeaturesAdapter<String> featuresAdapter = new FeaturesAdapter<>(featureControllers); //WHEN featuresAdapter.validateNewViewItems(controller, null); //THEN }
@Test(expected = RuntimeException.class) public void registerFeatures_should_throwException_when_delegateIsNotRegistered() throws Exception { //GIVEN StubAdapterViewTypeDelegate stubAdapterViewTypeDelegate = createNiceMock(StubAdapterViewTypeDelegate.class); expect(stubAdapterViewTypeDelegate.getViewType()).andReturn(RecyclerView.INVALID_TYPE).anyTimes(); replay(stubAdapterViewTypeDelegate); List<ViewItem> items = new ArrayList<>(); items.add(new ViewItem<>("a0", stubAdapterViewTypeDelegate)); StubFeatureController<String> controller = new StubFeatureController<>(asList(stubAdapterViewTypeDelegate), items); List<FeatureController<String>> featureControllers = singletonList(controller); FeaturesAdapter<String> featuresAdapter = new FeaturesAdapter<>(featureControllers); //WHEN featuresAdapter.validateNewViewItems(controller, items); //THEN // a RuntimeException should be thrown. }
@Test public void registerFeatures_should_notThrowException_when_delegateIsRegistered() { //GIVEN StubAdapterViewTypeDelegate stubAdapterViewTypeDelegate = createNiceMock(StubAdapterViewTypeDelegate.class); expect(stubAdapterViewTypeDelegate.getViewType()).andReturn(0).anyTimes(); replay(stubAdapterViewTypeDelegate); List<ViewItem> items = new ArrayList<>(); items.add(new ViewItem<>("a0", stubAdapterViewTypeDelegate)); items.add(new ViewItem<>("a1", stubAdapterViewTypeDelegate)); StubFeatureController<String> controller = new StubFeatureController<>(asList(stubAdapterViewTypeDelegate), items); List<FeatureController<String>> featureControllers = singletonList(controller); FeaturesAdapter<String> featuresAdapter = new FeaturesAdapter<>(featureControllers); //WHEN featuresAdapter.validateNewViewItems(controller, items); //THEN verify(stubAdapterViewTypeDelegate); } }