예제 #1
0
 def test_draggable(self):
     n = HTMLElement('img')
     self.assertIs(n.draggable, False)
     n.draggable = True
     self.assertEqual(n.html, '<img draggable="true">')
     self.assertIs(n.draggable, True)
     n.draggable = False
     self.assertEqual(n.html, '<img>')
예제 #2
0
    def test_style_copy(self):
        self.elm.style = 'color: red;'
        elm2 = HTMLElement('b')
        elm2.style = self.elm.style
        self.assertEqual(elm2.style.cssText, 'color: red;')

        elm2.style.setProperty('color', 'blue')
        self.assertEqual(elm2.style.cssText, 'color: blue;')
        self.assertEqual(self.elm.style.cssText, 'color: red;')
예제 #3
0
    def test_inner_html(self):
        self.assertEqual(self.elm.innerHTML, '')
        self.elm.appendChild(HTMLElement('a'))
        self.assertEqual(self.elm.innerHTML, '<a></a>')

        self.elm.innerHTML = '<b></b>'
        self.assertEqual(self.elm.innerHTML, '<b></b>')
        self.assertEqual(self.elm.firstChild.tag, 'b')
        self.assertTrue(isinstance(self.elm.firstChild, HTMLElement))
예제 #4
0
 def test_hidden(self):
     n = HTMLElement('img')
     n.hidden = True
     self.assertEqual(n.start_tag, '<img hidden>')
예제 #5
0
 def test_draggable(self):
     n = HTMLElement('img')
     n.draggable = True
     self.assertEqual(n.start_tag, '<img draggable>')
예제 #6
0
 def setUp(self):
     self.elm = HTMLElement('a')
예제 #7
0
class TestHTMLElement(TestCase):
    def setUp(self):
        self.elm = HTMLElement('a')

    def test_attrs_bool(self):
        self.assertFalse(self.elm.hasAttribute('hidden'))
        self.assertNotIn('hidden', self.elm.attributes)
        self.assertIsNone(self.elm.getAttribute('hidden'))
        self.elm.setAttribute('hidden', True)

        self.assertTrue(self.elm.hasAttributes())
        self.assertTrue(self.elm.hasAttribute('hidden'))
        self.assertIn('hidden', self.elm.attributes)
        self.assertEqual(self.elm.getAttribute('hidden'), True)
        self.assertEqual(self.elm.html, '<a hidden></a>')

        # This is complatible with JS, but quite confusing
        self.elm.setAttribute('hidden', False)
        self.assertTrue(self.elm.hasAttributes())
        self.assertTrue(self.elm.hasAttribute('hidden'))
        self.assertIn('hidden', self.elm.attributes)
        # In chrome, <a hidden="false">, should we convert to string?
        self.assertFalse(self.elm.getAttribute('hidden'))
        self.assertEqual(self.elm.html, '<a hidden></a>')

        self.elm.hidden = False
        self.assertFalse(self.elm.hasAttribute('hidden'))
        self.assertNotIn('hidden', self.elm.attributes)
        self.assertIsNone(self.elm.getAttribute('hidden'))
        self.assertEqual(self.elm.html, '<a></a>')

    def test_empty_tag(self):
        img = HTMLElement('img')
        self.assertEqual(img.end_tag, '')

    def test_draggable(self):
        n = HTMLElement('img')
        n.draggable = True
        self.assertEqual(n.start_tag, '<img draggable>')

    def test_hidden(self):
        n = HTMLElement('img')
        n.hidden = True
        self.assertEqual(n.start_tag, '<img hidden>')

    def test_title(self):
        n = HTMLElement('img')
        n.title = 'Image'
        self.assertEqual(n.start_tag, '<img title="Image">')

    def test_type(self):
        n = HTMLElement('input')
        n.type = 'text'
        self.assertEqual(n.start_tag, '<input type="text">')

    def test_init_attrs(self):
        elm = HTMLElement('a', src='b', hidden=True)
        self.assertFalse(elm.hasChildNodes())
        self.assertTrue(elm.hasAttributes())
        self.assertTrue(elm.getAttribute('src'), 'b')
        self.assertTrue(elm.hidden)

    def test_style_empty(self):
        self.assertIsNotNone(self.elm.style)
        self.assertEqual(self.elm.getAttribute('style'), None)
        self.assertEqual(self.elm.style.cssText, '')
        self.assertTrue(isinstance(self.elm.style, CSSStyleDeclaration))

        self.assertEqual(self.elm.html, '<a></a>')

    def test_style_invalid_type(self):
        with self.assertRaises(TypeError):
            self.elm.style = 1
        with self.assertRaises(TypeError):
            self.elm.style = self.elm

    def test_init_style_init(self):
        elm = HTMLElement('a', style='color: red;')
        self.assertEqual(elm.style.cssText, 'color: red;')
        self.assertEqual(elm.getAttribute('style'), 'color: red;')
        self.assertEqual(elm.html, '<a style="color: red;"></a>')

    @skipIf(sys.version_info < (3, 5), 'py34 does not keep style order')
    def test_style_setter(self):
        self.elm.style = 'color: red;'
        self.assertEqual(self.elm.style.cssText, 'color: red;')
        self.assertEqual(self.elm.getAttribute('style'), 'color: red;')
        self.assertEqual(self.elm.html, '<a style="color: red;"></a>')

        self.elm.style.color = 'black'
        self.elm.style.background = 'red'
        # py34 does not keep style order
        self.assertEqual(self.elm.style.cssText,
                        'color: black; background: red;')

    def test_style_remove(self):
        self.elm.style = 'color: red;'
        self.elm.removeAttribute('style')
        self.assertIsNotNone(self.elm.style)
        self.assertEqual(self.elm.getAttribute('style'), None)
        self.assertEqual(self.elm.style.cssText, '')

        self.assertEqual(self.elm.html, '<a></a>')

    def test_style_clone(self):
        self.elm.style = 'color: red;'
        clone = self.elm.cloneNode()
        self.assertEqual(clone.style.cssText, 'color: red;')

        clone.style.color = 'black'
        self.assertEqual(clone.style.cssText, 'color: black;')
        self.assertEqual(self.elm.style.cssText, 'color: red;')

    def test_attr_clone(self):
        self.elm.draggable = True
        self.elm.hidden = True
        clone = self.elm.cloneNode()
        self.assertEqual(clone.html, '<a draggable hidden></a>')
        self.elm.hidden = False
        self.assertEqual(clone.html, '<a draggable hidden></a>')
        clone.draggable = False
        self.assertEqual(self.elm.html, '<a draggable></a>')
        self.assertEqual(clone.html, '<a hidden></a>')

    def test_attr_clone_deep(self):
        self.elm.draggable = True
        self.elm.hidden = True
        clone = self.elm.cloneNode(deep=True)
        self.assertEqual(clone.html, '<a draggable hidden></a>')
        self.elm.hidden = False
        self.assertEqual(clone.html, '<a draggable hidden></a>')
        clone.draggable = False
        self.assertEqual(self.elm.html, '<a draggable></a>')
        self.assertEqual(clone.html, '<a hidden></a>')
예제 #8
0
class TestHTMLElement(TestCase):
    def setUp(self):
        self.elm = HTMLElement('a')

    def test_attrs_bool(self):
        self.assertFalse(self.elm.hasAttribute('hidden'))
        self.assertNotIn('hidden', self.elm.attributes)
        self.assertIsNone(self.elm.getAttribute('hidden'))
        self.elm.setAttribute('hidden', True)

        self.assertTrue(self.elm.hasAttributes())
        self.assertTrue(self.elm.hasAttribute('hidden'))
        self.assertIn('hidden', self.elm.attributes)
        self.assertEqual(self.elm.getAttribute('hidden'), True)
        self.assertEqual(self.elm.html, '<a hidden></a>')

        # This is complatible with JS, but quite confusing
        self.elm.setAttribute('hidden', False)
        self.assertTrue(self.elm.hasAttributes())
        self.assertTrue(self.elm.hasAttribute('hidden'))
        self.assertIn('hidden', self.elm.attributes)
        # In chrome, <a hidden="false">, should we convert to string?
        self.assertFalse(self.elm.getAttribute('hidden'))
        self.assertEqual(self.elm.html, '<a hidden></a>')

        self.elm.hidden = False
        self.assertFalse(self.elm.hasAttribute('hidden'))
        self.assertNotIn('hidden', self.elm.attributes)
        self.assertIsNone(self.elm.getAttribute('hidden'))
        self.assertEqual(self.elm.html, '<a></a>')

    def test_empty_tag(self):
        img = HTMLElement('img')
        self.assertEqual(img.end_tag, '')

    def test_draggable(self):
        n = HTMLElement('img')
        self.assertIs(n.draggable, False)
        n.draggable = True
        self.assertEqual(n.html, '<img draggable="true">')
        self.assertIs(n.draggable, True)
        n.draggable = False
        self.assertEqual(n.html, '<img>')

    def test_hidden(self):
        n = HTMLElement('img')
        n.hidden = True
        self.assertEqual(n.html, '<img hidden>')

    def test_title(self):
        n = HTMLElement('img')
        n.title = 'Image'
        self.assertEqual(n.html, '<img title="Image">')

    def test_type(self):
        n = HTMLElement('input')
        n.type = 'text'
        self.assertEqual(n.html, '<input type="text">')

    def test_init_attrs(self):
        elm = HTMLElement('a', src='b', hidden=True)
        self.assertFalse(elm.hasChildNodes())
        self.assertTrue(elm.hasAttributes())
        self.assertTrue(elm.getAttribute('src'), 'b')
        self.assertTrue(elm.hidden)

    def test_style_empty(self):
        self.assertIsNotNone(self.elm.style)
        self.assertEqual(self.elm.getAttribute('style'), None)
        self.assertEqual(self.elm.style.cssText, '')
        self.assertTrue(isinstance(self.elm.style, CSSStyleDeclaration))

        self.assertEqual(self.elm.html, '<a></a>')

    def test_style_invalid_type(self):
        with self.assertRaises(TypeError):
            self.elm.style = 1
        with self.assertRaises(TypeError):
            self.elm.style = self.elm

    def test_init_style_init(self):
        elm = HTMLElement('a', style='color: red;')
        self.assertEqual(elm.style.cssText, 'color: red;')
        self.assertEqual(elm.getAttribute('style'), 'color: red;')
        self.assertEqual(elm.html, '<a style="color: red;"></a>')

    def test_style_setter(self):
        self.elm.style = 'color: red;'
        self.assertEqual(self.elm.style.cssText, 'color: red;')
        self.assertEqual(self.elm.getAttribute('style'), 'color: red;')
        self.assertEqual(self.elm.html, '<a style="color: red;"></a>')

        self.elm.style.color = 'black'
        self.elm.style.background = 'red'
        # py34 does not keep style order
        self.assertEqual(self.elm.style.cssText,
                         'color: black; background: red;')

    def test_style_remove(self):
        self.elm.style = 'color: red;'
        self.elm.removeAttribute('style')
        self.assertIsNotNone(self.elm.style)
        self.assertEqual(self.elm.getAttribute('style'), None)
        self.assertEqual(self.elm.style.cssText, '')

        self.assertEqual(self.elm.html, '<a></a>')

    def test_style_clone(self):
        self.elm.style = 'color: red;'
        clone = self.elm.cloneNode()
        self.assertEqual(clone.style.cssText, 'color: red;')

        clone.style.color = 'black'
        self.assertEqual(clone.style.cssText, 'color: black;')
        self.assertEqual(self.elm.style.cssText, 'color: red;')

    def test_style_new(self):
        st = CSSStyleDeclaration()
        self.assertEqual(self.elm.style.cssText, '')
        self.assertEqual(st.cssText, '')
        st.setProperty('color', 'red')
        self.assertEqual(st.cssText, 'color: red;')
        self.assertEqual(self.elm.style.cssText, '')
        self.elm.style = st
        self.assertEqual(self.elm.style.cssText, 'color: red;')
        st.setProperty('color', 'blue')
        self.assertEqual(st.cssText, 'color: blue;')
        # shouldn't do this???
        self.assertEqual(self.elm.style.cssText, 'color: blue;')

    def test_style_copy(self):
        self.elm.style = 'color: red;'
        elm2 = HTMLElement('b')
        elm2.style = self.elm.style
        self.assertEqual(elm2.style.cssText, 'color: red;')

        elm2.style.setProperty('color', 'blue')
        self.assertEqual(elm2.style.cssText, 'color: blue;')
        self.assertEqual(self.elm.style.cssText, 'color: red;')

    def test_attr_clone(self):
        self.elm.draggable = True
        self.elm.hidden = True
        clone = self.elm.cloneNode()
        self.assertEqual(clone.html, '<a draggable="true" hidden></a>')
        self.elm.hidden = False
        self.assertEqual(clone.html, '<a draggable="true" hidden></a>')
        clone.draggable = False
        self.assertEqual(self.elm.html, '<a draggable="true"></a>')
        self.assertEqual(clone.html, '<a hidden></a>')

    def test_attr_clone_deep(self):
        self.elm.draggable = True
        self.elm.hidden = True
        clone = self.elm.cloneNode(deep=True)
        self.assertEqual(clone.html, '<a draggable="true" hidden></a>')
        self.elm.hidden = False
        self.assertEqual(clone.html, '<a draggable="true" hidden></a>')
        clone.draggable = False
        self.assertEqual(self.elm.html, '<a draggable="true"></a>')
        self.assertEqual(clone.html, '<a hidden></a>')

    def test_inner_html(self):
        self.assertEqual(self.elm.innerHTML, '')
        self.elm.appendChild(HTMLElement('a'))
        self.assertEqual(self.elm.innerHTML, '<a></a>')

        self.elm.innerHTML = '<b></b>'
        self.assertEqual(self.elm.innerHTML, '<b></b>')
        self.assertEqual(self.elm.firstChild.tag, 'b')
        self.assertTrue(isinstance(self.elm.firstChild, HTMLElement))
예제 #9
0
 def test_init_attrs(self):
     elm = HTMLElement('a', src='b', hidden=True)
     self.assertFalse(elm.hasChildNodes())
     self.assertTrue(elm.hasAttributes())
     self.assertTrue(elm.getAttribute('src'), 'b')
     self.assertTrue(elm.hidden)
예제 #10
0
 def test_type(self):
     n = HTMLElement('input')
     n.type = 'text'
     self.assertEqual(n.html, '<input type="text">')
예제 #11
0
 def test_title(self):
     n = HTMLElement('img')
     n.title = 'Image'
     self.assertEqual(n.html, '<img title="Image">')
예제 #12
0
 def test_hidden(self):
     n = HTMLElement('img')
     n.hidden = True
     self.assertEqual(n.html, '<img hidden>')
예제 #13
0
 def test_empty_tag(self):
     img = HTMLElement('img')
     self.assertEqual(img.end_tag, '')
예제 #14
0
 def setUp(self):
     self.elm = HTMLElement('a')
예제 #15
0
 def test_title(self):
     n = HTMLElement('img')
     n.title = 'Image'
     self.assertEqual(n.start_tag, '<img title="Image">')
예제 #16
0
 def test_type(self):
     n = HTMLElement('input')
     n.type = 'text'
     self.assertEqual(n.start_tag, '<input type="text">')
예제 #17
0
 def test_init_attrs(self):
     elm = HTMLElement('a', src='b', hidden=True)
     self.assertFalse(elm.hasChildNodes())
     self.assertTrue(elm.hasAttributes())
     self.assertTrue(elm.getAttribute('src'), 'b')
     self.assertTrue(elm.hidden)
예제 #18
0
 def test_init_style_init(self):
     elm = HTMLElement('a', style='color: red;')
     self.assertEqual(elm.style.cssText, 'color: red;')
     self.assertEqual(elm.getAttribute('style'), 'color: red;')
     self.assertEqual(elm.html, '<a style="color: red;"></a>')
예제 #19
0
 def test_init_style_init(self):
     elm = HTMLElement('a', style='color: red;')
     self.assertEqual(elm.style.cssText, 'color: red;')
     self.assertEqual(elm.getAttribute('style'), 'color: red;')
     self.assertEqual(elm.html, '<a style="color: red;"></a>')