File: test_tabgroups_restore.py

package info (click to toggle)
firefox 141.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,588 kB
  • sloc: cpp: 7,426,506; javascript: 6,367,238; ansic: 3,707,351; python: 1,369,002; xml: 623,983; asm: 426,918; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (110 lines) | stat: -rw-r--r-- 3,560 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# add this directory to the path
import os
import sys
from urllib.parse import quote

sys.path.append(os.path.dirname(__file__))

from session_store_test_case import SessionStoreTestCase


def inline(doc):
    return f"data:text/html;charset=utf-8,{quote(doc)}"


# Each list element represents a window of tabs loaded at
# some testing URL
DEFAULT_WINDOWS = set(
    [
        # Window 1. Note the comma after the inline call -
        # this is Python's way of declaring a 1 item tuple.
        (inline("""<div">Lorem</div>"""), inline("""<div">Ipsum</div>""")),
    ]
)


class TestAutoRestoreWithTabGroups(SessionStoreTestCase):
    def setUp(self):
        super(TestAutoRestoreWithTabGroups, self).setUp(
            startup_page=3,
            include_private=False,
            restore_on_demand=True,
            test_windows=DEFAULT_WINDOWS,
        )
        self.marionette.set_context("chrome")

    def test_saved_groups_restored(self):
        self.wait_for_windows(
            self.all_windows, "Not all requested windows have been opened"
        )

        self.marionette.execute_async_script(
            """
            let resolve = arguments[0];
            let group = gBrowser.addTabGroup([gBrowser.tabs[0]], { id: "test-group", label: "test-group" });
            let { TabStateFlusher } = ChromeUtils.importESModule("resource:///modules/sessionstore/TabStateFlusher.sys.mjs");
            TabStateFlusher.flushWindow(gBrowser.ownerGlobal).then(resolve);
            """
        )

        self.assertEqual(
            self.marionette.execute_script("return gBrowser.getAllTabGroups().length"),
            1,
            "There is one open group",
        )

        self.marionette.quit()
        self.marionette.start_session()
        self.marionette.set_context("chrome")

        self.assertEqual(
            self.marionette.execute_script("return gBrowser.getAllTabGroups().length"),
            1,
            "There is one open group",
        )

        self.assertEqual(
            self.marionette.execute_script("return SessionStore.savedGroups.length"),
            0,
            "The group was not saved because it was automatically restored",
        )

        self.marionette.execute_script(
            """
            let group = gBrowser.getTabGroupById("test-group");
            group.ownerGlobal.SessionStore.addSavedTabGroup(group);
            group.ownerGlobal.gBrowser.removeTabGroup(group, { animate: false });
            """
        )

        self.assertEqual(
            self.marionette.execute_script("return SessionStore.savedGroups.length"),
            1,
            "The group is now saved",
        )

        self.marionette.quit()
        self.marionette.start_session()
        self.marionette.set_context("chrome")

        self.assertEqual(
            self.marionette.execute_script("return gBrowser.getAllTabGroups().length"),
            0,
            "The group was not automatically restored because it was manually saved",
        )

        self.assertEqual(
            self.marionette.execute_script("return SessionStore.savedGroups.length"),
            1,
            "The saved group persists after a second restart",
        )

        self.marionette.execute_script(
            """
            SessionStore.forgetSavedTabGroup("test-group");
            """
        )