def test_charset(self) -> None: doc = Document(charset='TEST') _re = re.compile( '<meta( charset="TEST"| rimo_id="\d+"){2}>', re.S ) html = doc.build() self.assertIsNotNone(_re.search(html)) self.assertNotIn('utf', html) self.assertEqual('TEST', doc.charset)
def test_title(self) -> None: doc = Document(title='TEST') _re = re.compile( '<title rimo_id="\d+">\s*TEST\s*</title>', re.S ) html = doc.build() self.assertIsNotNone(_re.search(html)) self.assertNotIn('W-DOM', html) self.assertEqual('TEST', doc.title)
class TestMainDocument(TestCase): def setUp(self) -> None: super().setUp() Tag._elements_with_id.clear() Tag._elements_with_rimo_id.clear() self.doc = Document() self.doc.defaultView.customElements.reset() def tearDown(self): self.doc.defaultView.customElements.reset() super().tearDown() def test_blankpage(self) -> None: _re = re.compile( '\s*<!DOCTYPE html>' '\s*<html rimo_id="\d+">' '\s*<head rimo_id="\d+">' '\s*<meta( charset="utf-8"| rimo_id="\d+"){2}>' '\s*<title rimo_id="\d+">' '\s*W-DOM' '\s*</title>' '(\s*<script( type="text/javascript"| rimo_id="\d+"){2}>.*?</script>)?' '\s*</head>' '\s*<body rimo_id="\d+">' '\s*<script( type="text/javascript"| rimo_id="\d+"){2}>' '.*?</script>' '\s*</body>' '.*\s*</html>', re.S ) html = self.doc.build() self.assertIsNotNone(_re.match(html)) def test_get_element_by_id(self): self.assertIsNone(self.doc.getElementById('1')) elm = Element('a', parent=self.doc.body, id='a') self.assertIs(elm, self.doc.getElementById('a')) elm2 = Tag() self.assertIsNone(self.doc.getElementByRimoId(elm2.rimo_id)) def test_get_element_by_remo_id(self): self.assertIsNone(self.doc.getElementByRimoId('1')) elm = Tag(parent=self.doc.body) self.assertIs(elm, self.doc.getElementByRimoId(elm.rimo_id)) elm2 = Tag() self.assertIsNone(self.doc.getElementByRimoId(elm2.rimo_id)) def test_add_jsfile(self) -> None: self.doc.add_jsfile('jsfile') _re = re.compile( '<body.*' '<script( src="jsfile"| type="text/javascript"| rimo_id="\d+"){3}' '>\s*</script>' '.*</body', re.S ) self.assertIsNotNone(_re.search(self.doc.build())) def test_add_cssfile(self) -> None: self.doc.add_cssfile('cssfile') _re = re.compile( '<head rimo_id="\d+">.*' '<link( href="cssfile"| rel="stylesheet"| rimo_id="\d+"){3}>' '.*</head>' '', re.S ) self.assertIsNotNone(_re.search(self.doc.build())) def test_add_header_link(self) -> None: self.doc.add_header('<link href="cssfile" rel="stylesheet">') self.assertIn( '<link href="cssfile" rel="stylesheet">', self.doc.build(), ) def test_add_header_script(self) -> None: self.doc.add_header( '<script src="jsfile" type="text/javascript"></script>') self.assertIn( '<script src="jsfile" type="text/javascript"></script>', self.doc.build(), ) def test_title(self) -> None: doc = Document(title='TEST') _re = re.compile( '<title rimo_id="\d+">\s*TEST\s*</title>', re.S ) html = doc.build() self.assertIsNotNone(_re.search(html)) self.assertNotIn('W-DOM', html) self.assertEqual('TEST', doc.title) def test_charset(self) -> None: doc = Document(charset='TEST') _re = re.compile( '<meta( charset="TEST"| rimo_id="\d+"){2}>', re.S ) html = doc.build() self.assertIsNotNone(_re.search(html)) self.assertNotIn('utf', html) self.assertEqual('TEST', doc.charset) def test_set_body(self) -> None: self.doc.body.prepend(Tag()) html = self.doc.build() _re = re.compile( '<tag rimo_id="\d+">\s*</tag>', re.S ) self.assertIsNotNone(_re.search(html)) def test_set_body_string(self) -> None: string = 'testing' self.doc.body.prepend(string) html = self.doc.build() self.assertIn(string, html) def test_set_body_error(self) -> None: with self.assertRaises(TypeError): self.doc.body.prepend(1) def test_create_element(self): elm = self.doc.createElement('a') self.assertEqual(type(elm), A) self.assertRegex(elm.html, r'<a rimo_id="\d+"></a>') def test_create_element_unknown(self): elm = self.doc.createElement('aa') self.assertEqual(type(elm), HTMLElement) self.assertRegex(elm.html, r'<aa rimo_id="\d+"></aa>') def test_create_element_defclass(self): from wdom import element doc = Document(default_class=element.HTMLElement) elm = doc.createElement('a') self.assertEqual(type(elm), A) self.assertRegex(elm.html, '<a rimo_id="\d+"></a>') def test_create_element_defclass_unknown(self): from wdom import element doc = Document(default_class=element.HTMLElement) elm = doc.createElement('aa') self.assertEqual(type(elm), element.HTMLElement) self.assertRegex(elm.html, '<aa></aa>') def test_create_custom_element(self): class A(HTMLElement): pass self.doc.defaultView.customElements.define('a', A) elm = self.doc.createElement('a') self.assertEqual(type(elm), A) self.assertRegex(elm.html, '<a rimo_id="\d+"></a>') def test_create_custom_element_tag(self): class A(Tag): tag = 'a' self.doc.defaultView.customElements.define('a', A) elm = self.doc.createElement('a') self.assertEqual(type(elm), A) self.assertRegex(elm.html, '<a rimo_id="\d+"></a>') def test_create_documentfragment(self): df = self.doc.createDocumentFragment() self.assertEqual(type(df), DocumentFragment) self.assertFalse(df.hasChildNodes()) def test_create_textnode(self): t = self.doc.createTextNode('text') self.assertEqual(type(t), Text) self.assertEqual(t.html, 'text') def test_create_comment(self): t = self.doc.createComment('text') self.assertEqual(type(t), Comment) self.assertEqual(t.html, '<!--text-->') def test_create_attr(self): a = self.doc.createAttribute('src') a.value = 'a' self.assertEqual(type(a), Attr) self.assertEqual(a.html, 'src="a"') tag = HTMLElement('tag') tag.setAttributeNode(a) self.assertRegex(tag.html, '<tag rimo_id="\d+" src="a"></tag>') def test_create_event(self): tag = HTMLElement('tag') mock = MagicMock(_is_coroutine=False) tag.addEventListener('a', mock) e = self.doc.createEvent('a') self.assertEqual(type(e), Event) tag.dispatchEvent(e) mock.assert_called_once_with(e) def test_custom_tag_theme_tag(self): from wdom import tag self.doc.register_theme(tag) elm = Tag(parent=self.doc.body) elm.innerHTML = '<div is="container"></div>' self.assertTrue(isinstance(elm.firstChild, tag.Container)) def test_custom_tag_theme_default(self): from wdom.themes import default from wdom import tag self.doc.register_theme(default) elm = Tag(parent=self.doc.body) elm.innerHTML = '<div is="container"></div>' self.assertTrue(isinstance(elm.firstChild, default.Container)) self.assertTrue(isinstance(elm.firstChild, tag.Container)) def test_custom_tag_theme(self): from wdom.themes import bootstrap3 from wdom import tag self.doc.register_theme(bootstrap3) elm = Tag(parent=self.doc.body) elm.innerHTML = '<div is="container"></div>' self.assertTrue(isinstance(elm.firstChild, bootstrap3.Container)) self.assertTrue(isinstance(elm.firstChild, tag.Container)) self.assertIn('maxcdn.bootstrapcdn.com', self.doc.build()) elm.innerHTML = '<button is="default-button"></button>' self.assertTrue(isinstance(elm.firstChild, bootstrap3.DefaultButton)) self.assertTrue(isinstance(elm.firstChild, bootstrap3.Button)) self.assertFalse(isinstance(elm.firstChild, tag.DefaultButton)) self.assertTrue(isinstance(elm.firstChild, tag.Button)) def test_tempdir(self): doc = Document() self.assertIsNotNone(doc.tempdir) self.assertTrue(os.path.exists(doc.tempdir)) self.assertTrue(os.path.isabs(doc.tempdir)) self.assertTrue(os.path.isdir(doc.tempdir)) tempdir = doc.tempdir testfile = os.path.join(tempdir, 'test_file') with open(testfile, 'w') as f: f.write('test') self.assertTrue(os.path.exists(testfile)) self.assertTrue(os.path.isfile(testfile)) with open(testfile) as f: self.assertEqual('test', f.read().strip()) del doc import gc gc.collect() self.assertFalse(os.path.exists(testfile)) self.assertFalse(os.path.exists(tempdir))