From: Mill Chen Date: Wed, 7 Nov 2018 14:55:21 +0000 (+0800) Subject: Add test cases for the collapsible feature of conditional card X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=96e6e396135f6de931ed5047b8748712b359c355;p=android-x86%2Fpackages-apps-Settings.git Add test cases for the collapsible feature of conditional card Bug: 119593268 Bug: 113451905 Test: robotests Change-Id: I402f4c975531639b12c24ab8a05a20e547600721 --- diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardControllerTest.java index ab82a543f9..688e94cb55 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionContextualCardControllerTest.java @@ -16,6 +16,8 @@ package com.android.settings.homepage.contextualcards.conditional; +import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -25,6 +27,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import com.android.settings.homepage.contextualcards.ContextualCard; +import com.android.settings.homepage.contextualcards.ContextualCard.CardType; import com.android.settings.homepage.contextualcards.ContextualCardUpdateListener; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -38,6 +41,7 @@ import org.robolectric.util.ReflectionHelpers; import java.util.ArrayList; import java.util.List; +import java.util.Map; @RunWith(SettingsRobolectricTestRunner.class) public class ConditionContextualCardControllerTest { @@ -95,4 +99,81 @@ public class ConditionContextualCardControllerTest { verify(mListener, never()).onContextualCardUpdated(any()); } + + @Test + public void getConditionalCards_hasEmptyConditionCards_shouldReturnThreeEmptyList() { + final Map> conditionalCards = + mController.buildConditionalCardsWithFooterOrHeader(generateConditionCards(0)); + + assertThat(conditionalCards).hasSize(3); + for (@CardType int cardType : conditionalCards.keySet()) { + assertThat(conditionalCards.get(cardType)).isEmpty(); + } + } + + @Test + public void getConditionalCards_hasOneConditionCard_shouldGetOneFullWidthCard() { + final Map> conditionalCards = + mController.buildConditionalCardsWithFooterOrHeader(generateConditionCards(1)); + + assertThat(conditionalCards).hasSize(3); + assertThat(conditionalCards.get(CardType.CONDITIONAL)).hasSize(1); + assertThat(conditionalCards.get(CardType.CONDITIONAL).get(0).isHalfWidth()).isFalse(); + assertThat(conditionalCards.get(CardType.CONDITIONAL_HEADER)).isEmpty(); + assertThat(conditionalCards.get(CardType.CONDITIONAL_FOOTER)).isEmpty(); + } + + @Test + public void getConditionalCards_hasTwoConditionCards_shouldGetTwoHalfWidthCards() { + final Map> conditionalCards = + mController.buildConditionalCardsWithFooterOrHeader(generateConditionCards(2)); + + assertThat(conditionalCards).hasSize(3); + assertThat(conditionalCards.get(CardType.CONDITIONAL)).hasSize(2); + for (ContextualCard card : conditionalCards.get(CardType.CONDITIONAL)) { + assertThat(card.isHalfWidth()).isTrue(); + } + assertThat(conditionalCards.get(CardType.CONDITIONAL_HEADER)).isEmpty(); + assertThat(conditionalCards.get(CardType.CONDITIONAL_FOOTER)).isEmpty(); + } + + @Test + public void getConditionalCards_hasThreeCardsAndExpanded_shouldGetThreeCardsWithFooter() { + mController.setIsExpanded(true); + final Map> conditionalCards = + mController.buildConditionalCardsWithFooterOrHeader(generateConditionCards(3)); + + assertThat(conditionalCards).hasSize(3); + assertThat(conditionalCards.get(CardType.CONDITIONAL)).hasSize(3); + assertThat(conditionalCards.get(CardType.CONDITIONAL_HEADER)).isEmpty(); + assertThat(conditionalCards.get(CardType.CONDITIONAL_FOOTER)).isNotEmpty(); + } + + @Test + public void getConditionalCards_hasThreeCardsAndCollapsed_shouldGetOneConditionalHeader() { + mController.setIsExpanded(false); + final Map> conditionalCards = + mController.buildConditionalCardsWithFooterOrHeader(generateConditionCards(3)); + + assertThat(conditionalCards).hasSize(3); + assertThat(conditionalCards.get(CardType.CONDITIONAL)).isEmpty(); + assertThat(conditionalCards.get(CardType.CONDITIONAL_HEADER)).isNotEmpty(); + assertThat(conditionalCards.get(CardType.CONDITIONAL_FOOTER)).isEmpty(); + } + + private List generateConditionCards(int numberOfCondition) { + final List conditionCards = new ArrayList<>(); + for (int i = 0; i < numberOfCondition; i++) { + conditionCards.add(new ConditionalContextualCard.Builder() + .setConditionId(123 + i) + .setMetricsConstant(1) + .setActionText("test_action" + i) + .setName("test_name" + i) + .setTitleText("test_title" + i) + .setSummaryText("test_summary" + i) + .setIsHalfWidth(true) + .build()); + } + return conditionCards; + } } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionFooterContextualCardRendererTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionFooterContextualCardRendererTest.java new file mode 100644 index 0000000000..524a69091d --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionFooterContextualCardRendererTest.java @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.homepage.contextualcards.conditional; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.android.settings.homepage.contextualcards.ContextualCard; +import com.android.settings.homepage.contextualcards.ControllerRendererPool; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ConditionFooterContextualCardRendererTest { + + @Mock + private ControllerRendererPool mControllerRendererPool; + @Mock + private ConditionContextualCardController mController; + private Context mContext; + private ConditionFooterContextualCardRenderer mRenderer; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + mRenderer = new ConditionFooterContextualCardRenderer(mContext, mControllerRendererPool); + } + + @Test + public void bindView_shouldSetClickListener() { + final int viewType = mRenderer.getViewType(false /* isHalfWidth */); + final RecyclerView recyclerView = new RecyclerView(mContext); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); + final View view = LayoutInflater.from(mContext).inflate(viewType, recyclerView, false); + final RecyclerView.ViewHolder viewHolder = mRenderer.createViewHolder(view); + when(mControllerRendererPool.getController(mContext, + ContextualCard.CardType.CONDITIONAL_FOOTER)).thenReturn(mController); + + mRenderer.bindView(viewHolder, generateConditionFooterContextualCard()); + + assertThat(viewHolder.itemView).isNotNull(); + assertThat(viewHolder.itemView.hasOnClickListeners()).isTrue(); + } + + @Test + public void bindView_clickView_shouldSetTrueToIsConditionExpanded() { + final int viewType = mRenderer.getViewType(false /* isHalfWidth */); + final RecyclerView recyclerView = new RecyclerView(mContext); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); + final View view = LayoutInflater.from(mContext).inflate(viewType, recyclerView, false); + final RecyclerView.ViewHolder viewHolder = mRenderer.createViewHolder(view); + when(mControllerRendererPool.getController(mContext, + ContextualCard.CardType.CONDITIONAL_FOOTER)).thenReturn(mController); + + mRenderer.bindView(viewHolder, generateConditionFooterContextualCard()); + + assertThat(viewHolder.itemView).isNotNull(); + viewHolder.itemView.performClick(); + + verify(mController).setIsExpanded(false); + verify(mController).onConditionsChanged(); + } + + private ContextualCard generateConditionFooterContextualCard() { + return new ConditionFooterContextualCard.Builder() + .setName("test_condition_footer") + .setRankingScore(-9999.0) + .build(); + } +} diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionFooterContextualCardTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionFooterContextualCardTest.java new file mode 100644 index 0000000000..783ae9f1e7 --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionFooterContextualCardTest.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.homepage.contextualcards.conditional; + +import static com.google.common.truth.Truth.assertThat; + +import com.android.settings.homepage.contextualcards.ContextualCard; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ConditionFooterContextualCardTest { + + @Test(expected = IllegalArgumentException.class) + public void newInstance_changeCardType_shouldCrash() { + new ConditionFooterContextualCard.Builder() + .setCardType(ContextualCard.CardType.LEGACY_SUGGESTION) + .build(); + } + + @Test + public void getCardType_shouldAlwaysBeConditionalFooter() { + assertThat(new ConditionFooterContextualCard.Builder().build().getCardType()) + .isEqualTo(ContextualCard.CardType.CONDITIONAL_FOOTER); + } +} diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionHeaderContextualCardRendererTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionHeaderContextualCardRendererTest.java new file mode 100644 index 0000000000..dbe554426b --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionHeaderContextualCardRendererTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.homepage.contextualcards.conditional; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.android.settings.homepage.contextualcards.ContextualCard; +import com.android.settings.homepage.contextualcards.ControllerRendererPool; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ConditionHeaderContextualCardRendererTest { + + @Mock + private ControllerRendererPool mControllerRendererPool; + @Mock + private ConditionContextualCardController mController; + private Context mContext; + private ConditionHeaderContextualCardRenderer mRenderer; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); + mRenderer = new ConditionHeaderContextualCardRenderer(mContext, mControllerRendererPool); + } + + @Test + public void bindView_shouldSetClickListener() { + final int viewType = mRenderer.getViewType(false /* isHalfWidth */); + final RecyclerView recyclerView = new RecyclerView(mContext); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); + final View view = LayoutInflater.from(mContext).inflate(viewType, recyclerView, false); + final RecyclerView.ViewHolder viewHolder = mRenderer.createViewHolder(view); + when(mControllerRendererPool.getController(mContext, + ContextualCard.CardType.CONDITIONAL_HEADER)).thenReturn(mController); + + mRenderer.bindView(viewHolder, generateConditionHeaderContextualCard()); + + assertThat(viewHolder.itemView).isNotNull(); + assertThat(viewHolder.itemView.hasOnClickListeners()).isTrue(); + } + + @Test + public void bindView_clickView_shouldSetTrueToIsConditionExpanded() { + final int viewType = mRenderer.getViewType(false /* isHalfWidth */); + final RecyclerView recyclerView = new RecyclerView(mContext); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext)); + final View view = LayoutInflater.from(mContext).inflate(viewType, recyclerView, false); + final RecyclerView.ViewHolder viewHolder = mRenderer.createViewHolder(view); + when(mControllerRendererPool.getController(mContext, + ContextualCard.CardType.CONDITIONAL_HEADER)).thenReturn(mController); + + mRenderer.bindView(viewHolder, generateConditionHeaderContextualCard()); + + assertThat(viewHolder.itemView).isNotNull(); + viewHolder.itemView.performClick(); + + verify(mController).setIsExpanded(true); + verify(mController).onConditionsChanged(); + } + + private ContextualCard generateConditionHeaderContextualCard() { + return new ConditionHeaderContextualCard.Builder() + .setConditionalCards(generateConditionCards(3)) + .setName("test_condition_header") + .setRankingScore(-9999.0) + .build(); + } + + private List generateConditionCards(int numberOfCondition) { + final List conditionCards = new ArrayList<>(); + for (int i = 0; i < numberOfCondition; i++) { + conditionCards.add(new ConditionalContextualCard.Builder() + .setConditionId(123 + i) + .setMetricsConstant(1) + .setActionText("test_action" + i) + .setName("test_name" + i) + .setTitleText("test_title" + i) + .setSummaryText("test_summary" + i) + .setIsHalfWidth(true) + .build()); + } + return conditionCards; + } +} diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionHeaderContextualCardTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionHeaderContextualCardTest.java new file mode 100644 index 0000000000..767adad66d --- /dev/null +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/ConditionHeaderContextualCardTest.java @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.homepage.contextualcards.conditional; + +import static com.google.common.truth.Truth.assertThat; + +import com.android.settings.homepage.contextualcards.ContextualCard; +import com.android.settings.testutils.SettingsRobolectricTestRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(SettingsRobolectricTestRunner.class) +public class ConditionHeaderContextualCardTest { + + @Test(expected = IllegalArgumentException.class) + public void newInstance_changeCardType_shouldCrash() { + new ConditionHeaderContextualCard.Builder() + .setCardType(ContextualCard.CardType.LEGACY_SUGGESTION) + .build(); + } + + @Test + public void getCardType_shouldAlwaysBeConditionalHeader() { + assertThat(new ConditionHeaderContextualCard.Builder().build().getCardType()) + .isEqualTo(ContextualCard.CardType.CONDITIONAL_HEADER); + } +}