Example #1
0
def test_parse(input_, expected):
    with open(os.path.join(test_suite_dir, input_), 'rb') as f:
        xml = f.read()
        if IRON_PYTHON:
            xml = bytes(xml)
    parse = get_format(xml)
    assert callable(parse)
    uri_filename = input_.rstrip('.xml') + '.uri.txt'
    try:
        with open(os.path.join(test_suite_dir, uri_filename)) as f:
            base_uri = f.read().strip()
    except (IOError, OSError):
        base_uri = 'http://example.com/'
    parsed_feed, _ = parse(xml, feed_url=base_uri)
    parsed_tree = fromstringlist(
        write(parsed_feed, canonical_order=True, hints=False))
    if IRON_PYTHON:
        open_ = functools.partial(io.open, encoding='utf-8')
    elif PY3 and sys.platform == 'win32':
        open_ = functools.partial(open, encoding='utf-8')
    else:
        open_ = open
    with open_(os.path.join(test_suite_dir, expected)) as f:
        expected_tree = fromstringlist(f.read() if IRON_PYTHON else f)
    compare_tree(expected_tree, parsed_tree)
Example #2
0
def test_mutate_element_list():
    doc = TestDoc()
    assert not doc.multi_attr
    assert len(doc.multi_attr) == 0
    with raises(IndexError):
        doc.multi_attr[0]
    doc.multi_attr.append(TextElement(value='First element'))
    assert doc.multi_attr
    assert doc.multi_attr[0].value == 'First element'
    assert len(doc.multi_attr) == 1
    doc.multi_attr.insert(1, TextElement(value='Second element'))
    assert doc.multi_attr[1].value == 'Second element'
    assert len(doc.multi_attr) == 2
    tree = fromstringlist(write(doc, validate=False))
    elements = tree.findall('multi')
    assert len(elements) == 2
    assert elements[0].text == 'First element'
    assert elements[1].text == 'Second element'
    doc.multi_attr[0] = TextElement(value='Replacing element')
    assert doc.multi_attr[0].value == 'Replacing element'
    assert len(doc.multi_attr) == 2
    tree = fromstringlist(write(doc, validate=False))
    elements = tree.findall('multi')
    assert len(elements) == 2
    assert elements[0].text == 'Replacing element'
    assert elements[1].text == 'Second element'
    del doc.multi_attr[0]
    assert doc.multi_attr[0].value == 'Second element'
    assert len(doc.multi_attr) == 1
    tree = fromstringlist(write(doc, validate=False))
    elements = tree.findall('multi')
    assert len(elements) == 1
    assert elements[0].text == 'Second element'
Example #3
0
def test_parse(input_, expected):
    with open(os.path.join(test_suite_dir, input_), 'rb') as f:
        xml = f.read()
        if IRON_PYTHON:
            xml = bytes(xml)
    parse = get_format(xml)
    assert callable(parse)
    uri_filename = input_.rstrip('.xml') + '.uri.txt'
    try:
        with open(os.path.join(test_suite_dir, uri_filename)) as f:
            base_uri = f.read().strip()
    except (IOError, OSError):
        base_uri = 'http://example.com/'
    parsed_feed, _ = parse(xml, feed_url=base_uri)
    parsed_tree = fromstringlist(
        write(parsed_feed, canonical_order=True, hints=False)
    )
    if IRON_PYTHON:
        open_ = functools.partial(io.open, encoding='utf-8')
    elif PY3:
        open_ = functools.partial(open, encoding='utf-8')
    else:
        open_ = open
    with open_(os.path.join(test_suite_dir, expected)) as f:
        expected_tree = fromstringlist(f.read() if IRON_PYTHON else f)
    compare_tree(expected_tree, parsed_tree)
Example #4
0
def test_mutate_element_list():
    doc = TestDoc()
    assert not doc.multi_attr
    assert len(doc.multi_attr) == 0
    with raises(IndexError):
        doc.multi_attr[0]
    doc.multi_attr.append(TextElement(value='First element'))
    assert doc.multi_attr
    assert doc.multi_attr[0].value == 'First element'
    assert len(doc.multi_attr) == 1
    doc.multi_attr.insert(1, TextElement(value='Second element'))
    assert doc.multi_attr[1].value == 'Second element'
    assert len(doc.multi_attr) == 2
    tree = fromstringlist(write(doc, validate=False))
    elements = tree.findall('multi')
    assert len(elements) == 2
    assert elements[0].text == 'First element'
    assert elements[1].text == 'Second element'
    doc.multi_attr[0] = TextElement(value='Replacing element')
    assert doc.multi_attr[0].value == 'Replacing element'
    assert len(doc.multi_attr) == 2
    tree = fromstringlist(write(doc, validate=False))
    elements = tree.findall('multi')
    assert len(elements) == 2
    assert elements[0].text == 'Replacing element'
    assert elements[1].text == 'Second element'
    del doc.multi_attr[0]
    assert doc.multi_attr[0].value == 'Second element'
    assert len(doc.multi_attr) == 1
    tree = fromstringlist(write(doc, validate=False))
    elements = tree.findall('multi')
    assert len(elements) == 1
    assert elements[0].text == 'Second element'
Example #5
0
def test_element_initialize():
    doc = TestDoc(title_attr=TextElement(value='Title test'),
                  content_attr=TextElement(value=u('내용 테스트')),
                  attr_attr='Attribute value',
                  text_content_attr='Text content',
                  multi_attr=(TextElement(value='a'), TextElement(value='b')))
    assert doc.title_attr.value == 'Title test'
    assert doc.content_attr.value == u('내용 테스트')
    assert doc.attr_attr == 'Attribute value'
    assert doc.text_content_attr == 'Text content'
    assert len(doc.multi_attr) == 2
    assert doc.multi_attr[0].value == 'a'
    assert doc.multi_attr[1].value == 'b'
    doc.multi_attr.append(TextElement(value='c'))
    assert doc.multi_attr[2].value == 'c'
    assert len(doc.multi_attr) == 3
    tree = fromstringlist(write(doc))
    assert tree.find('title').text == 'Title test'
    assert tree.find('content').text == u('내용 테스트')
    assert tree.attrib['attr'] == 'Attribute value'
    elements = tree.findall('multi')
    assert len(elements) == 3
    assert elements[0].text == 'a'
    assert elements[1].text == 'b'
    assert elements[2].text == 'c'
Example #6
0
def test_write_hints(fx_test_doc):
    doc, _ = fx_test_doc
    doc._hints.update({
        TestDoc.ns_element_attr: {
            'abc': '123',
            'def': '456'
        },
        TestDoc.title_attr: {
            'ghi': '789',
            'jkl': '012'
        }
    })
    g = write(doc, canonical_order=True)
    tree = fromstringlist(g)
    hint_tag = '{' + SCHEMA_XMLNS + '}hint'
    assert tree[0].tag == hint_tag
    assert tree[0].attrib['tag'] == 'ns-element'
    assert tree[0].attrib['tag-xmlns'] == 'http://earthreader.github.io/'
    assert tree[0].attrib['id'] == 'abc'
    assert tree[0].attrib['value'] == '123'
    assert tree[1].tag == hint_tag
    assert tree[1].attrib['tag'] == 'ns-element'
    assert tree[1].attrib['tag-xmlns'] == 'http://earthreader.github.io/'
    assert tree[1].attrib['id'] == 'def'
    assert tree[1].attrib['value'] == '456'
    assert tree[2].tag == hint_tag
    assert tree[2].attrib['tag'] == 'title'
    assert 'tag-xmlns' not in tree[2].attrib
    assert tree[2].attrib['id'] == 'ghi'
    assert tree[2].attrib['value'] == '789'
    assert tree[3].tag == hint_tag
    assert tree[3].attrib['tag'] == 'title'
    assert 'tag-xmlns' not in tree[3].attrib
    assert tree[3].attrib['id'] == 'jkl'
    assert tree[3].attrib['value'] == '012'
Example #7
0
def test_write_hints(fx_test_doc):
    doc, _ = fx_test_doc
    doc._hints.update({
        TestDoc.ns_element_attr: {'abc': '123', 'def': '456'},
        TestDoc.title_attr: {'ghi': '789', 'jkl': '012'}
    })
    g = write(doc, canonical_order=True)
    tree = fromstringlist(g)
    hint_tag = '{' + SCHEMA_XMLNS + '}hint'
    assert tree[0].tag == hint_tag
    assert tree[0].attrib['tag'] == 'ns-element'
    assert tree[0].attrib['tag-xmlns'] == 'http://earthreader.github.io/'
    assert tree[0].attrib['id'] == 'abc'
    assert tree[0].attrib['value'] == '123'
    assert tree[1].tag == hint_tag
    assert tree[1].attrib['tag'] == 'ns-element'
    assert tree[1].attrib['tag-xmlns'] == 'http://earthreader.github.io/'
    assert tree[1].attrib['id'] == 'def'
    assert tree[1].attrib['value'] == '456'
    assert tree[2].tag == hint_tag
    assert tree[2].attrib['tag'] == 'title'
    assert 'tag-xmlns' not in tree[2].attrib
    assert tree[2].attrib['id'] == 'ghi'
    assert tree[2].attrib['value'] == '789'
    assert tree[3].tag == hint_tag
    assert tree[3].attrib['tag'] == 'title'
    assert 'tag-xmlns' not in tree[3].attrib
    assert tree[3].attrib['id'] == 'jkl'
    assert tree[3].attrib['value'] == '012'
Example #8
0
def test_element_initialize():
    doc = TestDoc(title_attr=TextElement(value='Title test'),
                  content_attr=TextElement(value=u('내용 테스트')),
                  attr_attr='Attribute value',
                  text_content_attr='Text content',
                  multi_attr=(TextElement(value='a'), TextElement(value='b')))
    assert doc.title_attr.value == 'Title test'
    assert doc.content_attr.value == u('내용 테스트')
    assert doc.attr_attr == 'Attribute value'
    assert doc.text_content_attr == 'Text content'
    assert len(doc.multi_attr) == 2
    assert doc.multi_attr[0].value == 'a'
    assert doc.multi_attr[1].value == 'b'
    doc.multi_attr.append(TextElement(value='c'))
    assert doc.multi_attr[2].value == 'c'
    assert len(doc.multi_attr) == 3
    tree = fromstringlist(write(doc))
    assert tree.find('title').text == 'Title test'
    assert tree.find('content').text == u('내용 테스트')
    assert tree.attrib['attr'] == 'Attribute value'
    elements = tree.findall('multi')
    assert len(elements) == 3
    assert elements[0].text == 'a'
    assert elements[1].text == 'b'
    assert elements[2].text == 'c'
Example #9
0
def test_write_test_doc_tree(fx_test_doc):
    doc, _ = fx_test_doc
    g = write(doc, canonical_order=True)
    tree = fromstringlist(g)
    assert tree.tag == 'test'
    assert tree.attrib == {
        'attr': u('속성 값'),
        'attr-decoder': 'decoder test'
    }
    assert tree[0].tag == 'title'
    assert not tree[0].attrib
    assert tree[0].text == u('제목 test')
    assert tree[1].tag == 'content'
    assert tree[1].text == 'Content test'
    assert not tree[1].attrib
    assert tree[2].tag == tree[3].tag == tree[4].tag == 'multi'
    assert tree[2].attrib == tree[3].attrib == tree[4].attrib == {}
    assert tree[2].text == 'a'
    assert tree[3].text == 'b'
    assert tree[4].text == 'c'
    assert tree[5].tag == tree[6].tag == tree[7].tag == 's-multi'
    assert tree[5].attrib == tree[6].attrib == tree[7].attrib == {}
    assert tree[5].text == 'a'
    assert tree[6].text == 'b'
    assert tree[7].text == 'c'
    assert tree[8].tag == 'text-content'
    assert not tree[8].attrib
    assert tree[8].text == u('텍스트 내용')
    assert tree[9].tag == tree[10].tag == 'text-multi'
    assert tree[9].attrib == tree[10].attrib == {}
    assert tree[9].text == 'a'
    assert tree[10].text == 'b'
    assert tree[11].tag == tree[12].tag == tree[13].tag == 's-text-multi'
    assert tree[11].attrib == tree[12].attrib == tree[13].attrib == {}
    assert tree[11].text == 'c'
    assert tree[12].text == 'b'
    assert tree[13].text == 'a'
    assert tree[14].tag == 'text-decoder'
    assert not tree[14].attrib
    assert tree[14].text == '123.456'
    assert tree[15].tag == 'text-decoder-decorator'
    assert not tree[15].attrib
    assert tree[15].text == '123'
    assert tree[16].tag == 'text-combined-decoder'
    assert not tree[16].attrib
    assert tree[16].text == '1234'
    assert tree[17].tag == '{http://earthreader.github.io/}ns-element'
    assert tree[17].attrib == {
        '{http://earthreader.github.io/}ns-attr': 'namespace attribute value'
    }
    assert tree[17].text == 'Namespace test'
    assert tree[18].tag == '{http://earthreader.github.io/}ns-text'
    assert not tree[18].attrib
    assert tree[18].text == 'Namespace test'
    assert tree[19].tag == 'content-decoder'
    assert tree[19].text == 'CONTENT DECODER'
    assert not tree[19].attrib
    assert len(tree) == 20
Example #10
0
def test_write_test_doc_tree(fx_test_doc):
    doc, _ = fx_test_doc
    g = write(doc, canonical_order=True)
    tree = fromstringlist(g)
    assert tree.tag == 'test'
    assert tree.attrib == {
        'attr': u'속성 값',
        'attr-decoder': 'decoder test'
    }
    assert tree[0].tag == 'title'
    assert not tree[0].attrib
    assert tree[0].text == u'제목 test'
    assert tree[1].tag == 'content'
    assert tree[1].text == 'Content test'
    assert not tree[1].attrib
    assert tree[2].tag == tree[3].tag == tree[4].tag == 'multi'
    assert tree[2].attrib == tree[3].attrib == tree[4].attrib == {}
    assert tree[2].text == 'a'
    assert tree[3].text == 'b'
    assert tree[4].text == 'c'
    assert tree[5].tag == tree[6].tag == tree[7].tag == 's-multi'
    assert tree[5].attrib == tree[6].attrib == tree[7].attrib == {}
    assert tree[5].text == 'a'
    assert tree[6].text == 'b'
    assert tree[7].text == 'c'
    assert tree[8].tag == 'text-content'
    assert not tree[8].attrib
    assert tree[8].text == u'텍스트 내용'
    assert tree[9].tag == tree[10].tag == 'text-multi'
    assert tree[9].attrib == tree[10].attrib == {}
    assert tree[9].text == 'a'
    assert tree[10].text == 'b'
    assert tree[11].tag == tree[12].tag == tree[13].tag == 's-text-multi'
    assert tree[11].attrib == tree[12].attrib == tree[13].attrib == {}
    assert tree[11].text == 'c'
    assert tree[12].text == 'b'
    assert tree[13].text == 'a'
    assert tree[14].tag == 'text-decoder'
    assert not tree[14].attrib
    assert tree[14].text == '123.456'
    assert tree[15].tag == 'text-decoder-decorator'
    assert not tree[15].attrib
    assert tree[15].text == '123'
    assert tree[16].tag == 'text-combined-decoder'
    assert not tree[16].attrib
    assert tree[16].text == '1234'
    assert tree[17].tag == '{http://earthreader.github.io/}ns-element'
    assert tree[17].attrib == {
        '{http://earthreader.github.io/}ns-attr': 'namespace attribute value'
    }
    assert tree[17].text == 'Namespace test'
    assert tree[18].tag == '{http://earthreader.github.io/}ns-text'
    assert not tree[18].attrib
    assert tree[18].text == 'Namespace test'
    assert tree[19].tag == 'content-decoder'
    assert tree[19].text == 'CONTENT DECODER'
    assert not tree[19].attrib
    assert len(tree) == 20
Example #11
0
def test_mutate_read_element_list(fx_test_doc):
    doc, _ = fx_test_doc
    doc.multi_attr.insert(2, TextElement(value='inserted'))
    assert doc.multi_attr[0].value == 'a'
    assert doc.multi_attr[1].value == 'b'
    assert doc.multi_attr[2].value == 'inserted'
    assert doc.multi_attr[3].value == 'c'
    assert len(doc.multi_attr) == 4
    tree = fromstringlist(write(doc))
    elements = tree.findall('multi')
    assert len(elements) == 4
    assert elements[0].text == 'a'
    assert elements[1].text == 'b'
    assert elements[2].text == 'inserted'
    assert elements[3].text == 'c'
Example #12
0
def test_mutate_read_element_list(fx_test_doc):
    doc, _ = fx_test_doc
    doc.multi_attr.insert(2, TextElement(value='inserted'))
    assert doc.multi_attr[0].value == 'a'
    assert doc.multi_attr[1].value == 'b'
    assert doc.multi_attr[2].value == 'inserted'
    assert doc.multi_attr[3].value == 'c'
    assert len(doc.multi_attr) == 4
    tree = fromstringlist(write(doc))
    elements = tree.findall('multi')
    assert len(elements) == 4
    assert elements[0].text == 'a'
    assert elements[1].text == 'b'
    assert elements[2].text == 'inserted'
    assert elements[3].text == 'c'
Example #13
0
def test_content_codec():
    doc = ContentCodecTestDoc(c=(5, 6))
    tree = fromstringlist(write(doc, as_bytes=True))
    assert tree.text == '5,6'
    doc2 = read(ContentCodecTestDoc, etree_tobyteslist(tree))
    assert doc2.c == (5, 6)
Example #14
0
def test_text_codec():
    doc = CodecTestDoc(text=(3, 4))
    tree = fromstringlist(write(doc))
    assert tree.find('text').text == '3,4'
    doc2 = read(CodecTestDoc, etree_tobyteslist(tree))
    assert doc2.text == (3, 4)
Example #15
0
def test_attribute_codec():
    doc = CodecTestDoc(attr=(1, 2))
    tree = fromstringlist(write(doc))
    assert tree.attrib['attr'] == '1,2'
    doc2 = read(CodecTestDoc, etree_tobyteslist(tree))
    assert doc2.attr == (1, 2)
Example #16
0
def test_text_codec():
    doc = CodecTestDoc(text=(3, 4))
    tree = fromstringlist(write(doc))
    assert tree.find('text').text == '3,4'
    doc2 = read(CodecTestDoc, etree_tobyteslist(tree))
    assert doc2.text == (3, 4)
Example #17
0
def test_attribute_codec():
    doc = CodecTestDoc(attr=(1, 2))
    tree = fromstringlist(write(doc))
    assert tree.attrib['attr'] == '1,2'
    doc2 = read(CodecTestDoc, etree_tobyteslist(tree))
    assert doc2.attr == (1, 2)
Example #18
0
def test_content_codec():
    doc = ContentCodecTestDoc(c=(5, 6))
    tree = fromstringlist(write(doc, as_bytes=True))
    assert tree.text == '5,6'
    doc2 = read(ContentCodecTestDoc, etree_tobyteslist(tree))
    assert doc2.c == (5, 6)
Example #19
0
def test_write_none_attribute():
    doc = CodecTestDoc(attr=None, text=(1, 2))
    tree = fromstringlist(write(doc))
    assert tree.find('text').text == '1,2'
    assert 'attr' not in tree.attrib
Example #20
0
def test_write_none_text():
    doc = CodecTestDoc(attr=(1, 2), text=None)
    tree = fromstringlist(write(doc))
    assert tree.find('text') is None
    assert tree.attrib['attr'] == '1,2'
Example #21
0
def test_write_none_attribute():
    doc = CodecTestDoc(attr=None, text=(1, 2))
    tree = fromstringlist(write(doc))
    assert tree.find('text').text == '1,2'
    assert 'attr' not in tree.attrib
Example #22
0
def test_write_none_text():
    doc = CodecTestDoc(attr=(1, 2), text=None)
    tree = fromstringlist(write(doc))
    assert tree.find('text') is None
    assert tree.attrib['attr'] == '1,2'