tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_get_shadow_root.py (2309B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this
      3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 from urllib.parse import quote
      6 
      7 from marionette_driver.by import By
      8 from marionette_driver.errors import (
      9    NoSuchShadowRootException,
     10 )
     11 from marionette_driver.marionette import ShadowRoot
     12 from marionette_harness import MarionetteTestCase
     13 
     14 checkbox_dom = """
     15        <style>
     16            custom-checkbox-element {
     17                display:block; width:20px; height:20px;
     18            }
     19        </style>
     20        <custom-checkbox-element></custom-checkbox-element>
     21        <script>
     22            customElements.define('custom-checkbox-element',
     23                class extends HTMLElement {
     24                    constructor() {
     25                            super();
     26                            this.attachShadow({mode: '%s'}).innerHTML = `
     27                                <div><input type="checkbox"/></div>
     28                            `;
     29                        }
     30                });
     31        </script>"""
     32 
     33 
     34 def inline(doc):
     35    return "data:text/html;charset=utf-8,{}".format(quote(doc))
     36 
     37 
     38 class TestShadowDom(MarionetteTestCase):
     39    def setUp(self):
     40        super(TestShadowDom, self).setUp()
     41 
     42    def test_can_get_open_shadow_root(self):
     43        self.marionette.navigate(inline(checkbox_dom % "open"))
     44        element = self.marionette.find_element(
     45            By.CSS_SELECTOR, "custom-checkbox-element"
     46        )
     47        shadow_root = element.shadow_root
     48        assert isinstance(
     49            shadow_root, ShadowRoot
     50        ), "Should have received ShadowRoot but got {}".format(shadow_root)
     51 
     52    def test_can_get_closed_shadow_root(self):
     53        self.marionette.navigate(inline(checkbox_dom % "closed"))
     54        element = self.marionette.find_element(
     55            By.CSS_SELECTOR, "custom-checkbox-element"
     56        )
     57        shadow_root = element.shadow_root
     58        assert isinstance(
     59            shadow_root, ShadowRoot
     60        ), "Should have received ShadowRoot but got {}".format(shadow_root)
     61 
     62    def test_cannot_find_shadow_root(self):
     63        element = self.marionette.find_element(By.CSS_SELECTOR, "style")
     64        with self.assertRaises(NoSuchShadowRootException):
     65            element.shadow_root