No issue: Make sure jump back in group always have more than one tab

upstream-sync
Roger Yang 3 years ago committed by Christian Sadilek
parent 15d1a0aa17
commit 1092383231

@ -67,7 +67,7 @@ val BrowserState.inProgressMediaTab: TabSessionState?
*/ */
val BrowserState.lastSearchGroup: RecentTab.SearchGroup? val BrowserState.lastSearchGroup: RecentTab.SearchGroup?
get() { get() {
val tabGroup = normalTabs.toSearchGroup().lastOrNull() ?: return null val tabGroup = normalTabs.toSearchGroup().lastOrNull { it.tabs.count() > 1 } ?: return null
val firstTab = tabGroup.tabs.firstOrNull() ?: return null val firstTab = tabGroup.tabs.firstOrNull() ?: return null
return RecentTab.SearchGroup( return RecentTab.SearchGroup(

@ -120,10 +120,12 @@
<string name="recent_tabs_show_all">Show all</string> <string name="recent_tabs_show_all">Show all</string>
<!-- Content description for the button which navigates the user to show all recent tabs in the tabs tray. --> <!-- Content description for the button which navigates the user to show all recent tabs in the tabs tray. -->
<string name="recent_tabs_show_all_content_description">Show all recent tabs button</string> <string name="recent_tabs_show_all_content_description">Show all recent tabs button</string>
<!-- Title for showing a group item in the 'Jump back in' section of the new tab --> <!-- Title for showing a group item in the 'Jump back in' section of the new tab
The first parameter is the search term that the user used. (for example: your search for "cat")-->
<string name="recent_tabs_search_term">Your search for \"%1$s\"</string> <string name="recent_tabs_search_term">Your search for \"%1$s\"</string>
<!-- Text for the number of tabs in a group in the 'Jump back in' section of the new tab --> <!-- Text for the number of tabs in a group in the 'Jump back in' section of the new tab
<string name="recent_tabs_search_term_count">%1$s sites</string> The first parameter is the count for number of sites in the group. This number will always be more than one. -->
<string name="recent_tabs_search_term_count">Sites: %1$s</string>
<!-- History Metadata --> <!-- History Metadata -->
<!-- Header text for a section on the home screen that displays grouped highlights from the <!-- Header text for a section on the home screen that displays grouped highlights from the

@ -135,7 +135,7 @@ class BrowserStateTest {
} }
@Test @Test
fun `GIVEN a tab group exists WHEN recentTabs is called THEN return a tab group`() { fun `GIVEN a tab group with one tab WHEN recentTabs is called THEN return a tab group`() {
val searchGroupTab = createTab( val searchGroupTab = createTab(
url = "https://www.mozilla.org", url = "https://www.mozilla.org",
id = "1", id = "1",
@ -152,6 +152,28 @@ class BrowserStateTest {
val result = browserState.asRecentTabs() val result = browserState.asRecentTabs()
assertEquals(1, result.size)
assertEquals(searchGroupTab, (result[0] as RecentTab.Tab).state)
}
@Test
fun `GIVEN a tab group exists WHEN recentTabs is called THEN return a tab group`() {
val searchGroupTab = createTab(
url = "https://www.mozilla.org",
id = "1",
historyMetadata = HistoryMetadataKey(
url = "https://www.mozilla.org",
searchTerm = "Test",
referrerUrl = "https://www.mozilla.org"
)
)
val browserState = BrowserState(
tabs = listOf(searchGroupTab, searchGroupTab),
selectedTabId = searchGroupTab.id
)
val result = browserState.asRecentTabs()
assertEquals(2, result.size) assertEquals(2, result.size)
assertEquals(searchGroupTab, (result[0] as RecentTab.Tab).state) assertEquals(searchGroupTab, (result[0] as RecentTab.Tab).state)
assert(result[1] is RecentTab.SearchGroup) assert(result[1] is RecentTab.SearchGroup)
@ -159,11 +181,11 @@ class BrowserStateTest {
assertEquals(searchGroupTab.id, (result[1] as RecentTab.SearchGroup).tabId) assertEquals(searchGroupTab.id, (result[1] as RecentTab.SearchGroup).tabId)
assertEquals(searchGroupTab.content.url, (result[1] as RecentTab.SearchGroup).url) assertEquals(searchGroupTab.content.url, (result[1] as RecentTab.SearchGroup).url)
assertEquals(searchGroupTab.content.thumbnail, (result[1] as RecentTab.SearchGroup).thumbnail) assertEquals(searchGroupTab.content.thumbnail, (result[1] as RecentTab.SearchGroup).thumbnail)
assertEquals(1, (result[1] as RecentTab.SearchGroup).count) assertEquals(2, (result[1] as RecentTab.SearchGroup).count)
} }
@Test @Test
fun `GIVEN the selected tab is a normal tab and tab group exists WHEN asRecentTabs is called THEN return a list of these tabs`() { fun `GIVEN the selected tab is a normal tab and tab group with one tab exists WHEN asRecentTabs is called THEN return only the normal tab`() {
val selectedTab = createTab(url = "url", id = "3") val selectedTab = createTab(url = "url", id = "3")
val searchGroupTab = createTab( val searchGroupTab = createTab(
url = "https://www.mozilla.org", url = "https://www.mozilla.org",
@ -181,6 +203,29 @@ class BrowserStateTest {
val result = browserState.asRecentTabs() val result = browserState.asRecentTabs()
assertEquals(2, result.size)
assertEquals(selectedTab, (result[0] as RecentTab.Tab).state)
}
@Test
fun `GIVEN the selected tab is a normal tab and tab group with two tabs exists WHEN asRecentTabs is called THEN return a list of these tabs`() {
val selectedTab = createTab(url = "url", id = "3")
val searchGroupTab = createTab(
url = "https://www.mozilla.org",
id = "4",
historyMetadata = HistoryMetadataKey(
url = "https://www.mozilla.org",
searchTerm = "Test",
referrerUrl = "https://www.mozilla.org"
)
)
val browserState = BrowserState(
tabs = listOf(mockk(relaxed = true), selectedTab, searchGroupTab, searchGroupTab),
selectedTabId = selectedTab.id
)
val result = browserState.asRecentTabs()
assertEquals(3, result.size) assertEquals(3, result.size)
assertEquals(selectedTab, (result[0] as RecentTab.Tab).state) assertEquals(selectedTab, (result[0] as RecentTab.Tab).state)
assert(result[2] is RecentTab.SearchGroup) assert(result[2] is RecentTab.SearchGroup)
@ -188,7 +233,7 @@ class BrowserStateTest {
assertEquals(searchGroupTab.id, (result[2] as RecentTab.SearchGroup).tabId) assertEquals(searchGroupTab.id, (result[2] as RecentTab.SearchGroup).tabId)
assertEquals(searchGroupTab.content.url, (result[2] as RecentTab.SearchGroup).url) assertEquals(searchGroupTab.content.url, (result[2] as RecentTab.SearchGroup).url)
assertEquals(searchGroupTab.content.thumbnail, (result[2] as RecentTab.SearchGroup).thumbnail) assertEquals(searchGroupTab.content.thumbnail, (result[2] as RecentTab.SearchGroup).thumbnail)
assertEquals(1, (result[2] as RecentTab.SearchGroup).count) assertEquals(2, (result[2] as RecentTab.SearchGroup).count)
} }
@Test @Test

@ -383,7 +383,7 @@ class RecentTabsListFeatureTest {
@Test @Test
fun `GIVEN a selected tab group WHEN the feature starts THEN dispatch the selected tab group as a recent tab list`() { fun `GIVEN a selected tab group WHEN the feature starts THEN dispatch the selected tab group as a recent tab list`() {
val tab = createTab( val tab1 = createTab(
url = "https://www.mozilla.org", url = "https://www.mozilla.org",
id = "1", id = "1",
historyMetadata = HistoryMetadataKey( historyMetadata = HistoryMetadataKey(
@ -392,7 +392,17 @@ class RecentTabsListFeatureTest {
referrerUrl = "https://www.mozilla.org" referrerUrl = "https://www.mozilla.org"
) )
) )
val tabs = listOf(tab)
val tab2 = createTab(
url = "https://www.mozilla.org",
id = "2",
historyMetadata = HistoryMetadataKey(
url = "https://www.mozilla.org",
searchTerm = "test search term",
referrerUrl = "https://www.mozilla.org"
)
)
val tabs = listOf(tab1, tab2)
val browserStore = BrowserStore( val browserStore = BrowserStore(
BrowserState( BrowserState(
tabs = tabs, tabs = tabs,
@ -415,11 +425,11 @@ class RecentTabsListFeatureTest {
assertEquals(searchGroup.tabId, "1") assertEquals(searchGroup.tabId, "1")
assertEquals(searchGroup.url, "https://www.mozilla.org") assertEquals(searchGroup.url, "https://www.mozilla.org")
assertEquals(searchGroup.thumbnail, null) assertEquals(searchGroup.thumbnail, null)
assertEquals(searchGroup.count, 1) assertEquals(searchGroup.count, 2)
} }
@Test @Test
fun `GIVEN a selected tab group and a selected tab WHEN the feature starts THEN dispatch both the selected tab and the selected tab group as a recent tab list`() { fun `GIVEN a tab group with one tab and a selected tab WHEN the feature starts THEN dispatch selected tab as a recent tab list`() {
val tab1 = createTab( val tab1 = createTab(
url = "https://www.mozilla.org", url = "https://www.mozilla.org",
id = "1" id = "1"
@ -449,6 +459,52 @@ class RecentTabsListFeatureTest {
homeStore.waitUntilIdle() homeStore.waitUntilIdle()
assertEquals(1, homeStore.state.recentTabs.size)
assertTrue(homeStore.state.recentTabs[0] is RecentTab.Tab)
assertEquals(tab1, (homeStore.state.recentTabs[0] as RecentTab.Tab).state)
}
@Test
fun `GIVEN a tab group with two tabs and a selected tab WHEN the feature starts THEN dispatch both the selected tab and the selected tab group as a recent tab list`() {
val tab1 = createTab(
url = "https://www.mozilla.org",
id = "1"
)
val tab2 = createTab(
url = "https://www.mozilla.org",
id = "2",
historyMetadata = HistoryMetadataKey(
url = "https://www.mozilla.org",
searchTerm = "test search term",
referrerUrl = "https://www.mozilla.org"
)
)
val tab3 = createTab(
url = "https://www.mozilla.org",
id = "3",
historyMetadata = HistoryMetadataKey(
url = "https://www.mozilla.org",
searchTerm = "test search term",
referrerUrl = "https://www.mozilla.org"
)
)
val tabs = listOf(tab1, tab2, tab3)
val browserStore = BrowserStore(
BrowserState(
tabs = tabs,
selectedTabId = "1"
)
)
val feature = RecentTabsListFeature(
browserStore = browserStore,
homeStore = homeStore
)
feature.start()
homeStore.waitUntilIdle()
assertEquals(2, homeStore.state.recentTabs.size) assertEquals(2, homeStore.state.recentTabs.size)
assertTrue(homeStore.state.recentTabs[0] is RecentTab.Tab) assertTrue(homeStore.state.recentTabs[0] is RecentTab.Tab)
assertEquals(tab1, (homeStore.state.recentTabs[0] as RecentTab.Tab).state) assertEquals(tab1, (homeStore.state.recentTabs[0] as RecentTab.Tab).state)
@ -457,7 +513,7 @@ class RecentTabsListFeatureTest {
assertEquals(searchGroup.tabId, "2") assertEquals(searchGroup.tabId, "2")
assertEquals(searchGroup.url, "https://www.mozilla.org") assertEquals(searchGroup.url, "https://www.mozilla.org")
assertEquals(searchGroup.thumbnail, null) assertEquals(searchGroup.thumbnail, null)
assertEquals(searchGroup.count, 1) assertEquals(searchGroup.count, 2)
} }
@Test @Test
@ -520,15 +576,21 @@ class RecentTabsListFeatureTest {
referrerUrl = "https://www.mozilla.org" referrerUrl = "https://www.mozilla.org"
) )
val thumbnail = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888) val thumbnail = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
val searchTermTab = createTab( val searchTermTab1 = createTab(
url = "https://www.mozilla.org", url = "https://www.mozilla.org",
id = "44", id = "44",
thumbnail = thumbnail, thumbnail = thumbnail,
historyMetadata = historyMetadataKey historyMetadata = historyMetadataKey
) )
val searchTermTab2 = createTab(
url = "https://www.mozilla.org",
id = "45",
thumbnail = thumbnail,
historyMetadata = historyMetadataKey
)
val browserStore = BrowserStore( val browserStore = BrowserStore(
BrowserState( BrowserState(
tabs = listOf(mediaTab, selectedTab, searchTermTab), tabs = listOf(mediaTab, selectedTab, searchTermTab1, searchTermTab2),
selectedTabId = "43" selectedTabId = "43"
) )
) )
@ -550,6 +612,6 @@ class RecentTabsListFeatureTest {
assertEquals(searchGroup.tabId, "44") assertEquals(searchGroup.tabId, "44")
assertEquals(searchGroup.url, "https://www.mozilla.org") assertEquals(searchGroup.url, "https://www.mozilla.org")
assertEquals(searchGroup.thumbnail, thumbnail) assertEquals(searchGroup.thumbnail, thumbnail)
assertEquals(searchGroup.count, 1) assertEquals(searchGroup.count, 2)
} }
} }

Loading…
Cancel
Save