def test__get_obj_from_str_id_html(self): dtd_str = u''' <!ELEMENT texts (text)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:unexisting' try: obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() assert (False) except Exception as e: self.assertEqual(str(e), 'Invalid child unexisting') str_id = 'texts:text' obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() expected = ( '<div id="texts:text" class="xt-container-text">' '<label>text</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)"></span>' '<a data-comment-name="texts:text:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text" name="texts:text:_value" ' 'rows="1"></textarea>' '</div>') self.assertEqual(html, expected)
def test__get_obj_from_str_id_choices(self): dtd_str = u''' <!ELEMENT texts ((tag1|tag2)*)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts' data = {} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'texts') str_id = 'texts:list__tag1_tag2:0:tag1' data = { 'texts': { 'list__tag1_tag2': [{ 'tag1': { '_value': 'Hello world' } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag1') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'list__tag1_tag2') dtd_str = u''' <!ELEMENT texts (tag1|tag2)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts' data = {} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'texts') str_id = 'texts:tag1' data = {'texts': {'tag1': {'_value': 'Hello world'}}} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag1') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'choice__tag1_tag2') self.assertEqual(obj.parent.tagname, 'texts') data = {'texts': {}} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag1') self.assertEqual(obj.text, '') self.assertEqual(obj._parent_obj.tagname, 'choice__tag1_tag2') self.assertEqual(obj.parent.tagname, 'texts')
def test__get_obj_from_str_id_list(self): dtd_str = ''' <!ELEMENT texts (text*)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:list__text:0:text' obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() expected = ( '<a class="btn-add btn-add-text btn-list" ' 'data-elt-id="texts:list__text:0:text">New text</a>' '<div id="texts:list__text:0:text" class="xt-container-text">' '<label>text</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)"></span>' '<a class="btn-delete btn-list" ' 'data-target="#texts:list__text:0:text" title="Delete"></a>' '<a data-comment-name="texts:list__text:0:text:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text" name="texts:list__text:0:text:_value" ' 'rows="1">' '</textarea>' '</div>' ) self.assertEqual_(html, expected) dtd_str = ''' <!ELEMENT texts (list*)> <!ELEMENT list (text)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:list__list:0:list:text' obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() expected = ( '<div id="texts:list__list:0:list:text" class="xt-container-text">' '<label>text</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<a data-comment-name="texts:list__list:0:list:text:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text" name="texts:list__list:0:list:text:_value" ' 'rows="1"></textarea>' '</div>') self.assertEqual(html, expected)
def test__get_obj_from_str_id_list(self): dtd_str = u''' <!ELEMENT texts (text*)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:list__text:0:text' obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() expected = ( '<a class="btn-add btn-add-text btn-list" ' 'data-elt-id="texts:list__text:0:text">New text</a>' '<div id="texts:list__text:0:text" class="xt-container-text">' '<label>text</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)"></span>' '<a class="btn-delete btn-list" ' 'data-target="#texts:list__text:0:text" title="Delete"></a>' '<a data-comment-name="texts:list__text:0:text:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text" name="texts:list__text:0:text:_value" ' 'rows="1">' '</textarea>' '</div>') self.assertEqual_(html, expected) dtd_str = u''' <!ELEMENT texts (list*)> <!ELEMENT list (text)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:list__list:0:list:text' obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() expected = ( '<div id="texts:list__list:0:list:text" class="xt-container-text">' '<label>text</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<a data-comment-name="texts:list__list:0:list:text:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text" name="texts:list__list:0:list:text:_value" ' 'rows="1"></textarea>' '</div>') self.assertEqual(html, expected)
def test__get_obj_from_str_id_html(self): dtd_str = ''' <!ELEMENT texts (text)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:unexisting' try: obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() assert(False) except Exception, e: self.assertEqual(str(e), 'Invalid child unexisting')
def test__get_data_for_html_display(self): dtd_str = ''' <!ELEMENT texts (tag1, list*, tag2)> <!ELEMENT list (text1)> <!ELEMENT text1 (#PCDATA)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts:list__list:0:list:text1' data = { 'texts': { 'list__list': [ { 'list': { 'text1': {'_value': 'Hello world'}, } } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) res = factory._get_data_for_html_display(obj) expected = { 'elt_id': 'texts:list__list:0:list:text1', 'html': ( '<div id="texts:list__list:0:list:text1" ' 'class="xt-container-text1">' '<label>text1</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<a data-comment-name="texts:list__list:0:list:text1:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text1" ' 'name="texts:list__list:0:list:text1:_value" rows="1">' 'Hello world</textarea>' '</div>'), 'jstree_data': { 'li_attr': { 'class': 'tree_texts:list__list:0:list:text1 text1', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list:text1' }, 'children': [], 'text': u'text1 <span class="_tree_text">(Hello world)</span>', 'state': {'opened': True}, }, 'previous': [ ('inside', escape_attr('#tree_texts:list__list:0:list')) ] } self.assertEqual(res, expected) # Test with list object str_id = 'texts:list__list:0:list' data = { 'texts': { 'list__list': [ { 'list': { 'text1': {'_value': 'Hello world'}, } } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) res = factory._get_data_for_html_display(obj) expected = { 'elt_id': 'texts:list__list:0:list', 'html': ( '<a class="btn-add btn-add-list btn-list" ' 'data-elt-id="texts:list__list:0:list">New list</a>' '<div class="panel panel-default list" ' 'id="texts:list__list:0:list">' '<div class="panel-heading">' '<span data-toggle="collapse" ' 'href="#collapse-texts\\:list__list\\:0\\:list">list' '<a class="btn-delete btn-list" ' 'data-target="#texts:list__list:0:list" title="Delete"></a>' '<a data-comment-name="texts:list__list:0:list:_comment" ' 'class="btn-comment" title="Add comment"></a>' '</span>' '</div>' '<div class="panel-body panel-collapse collapse in" ' 'id="collapse-texts:list__list:0:list">' '<div id="texts:list__list:0:list:text1" ' 'class="xt-container-text1">' '<label>text1</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<a data-comment-name="texts:list__list:0:list:text1:_comment"' ' class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text1" ' 'name="texts:list__list:0:list:text1:_value" rows="1">' 'Hello world</textarea>' '</div>' '</div>' '</div>' ), 'jstree_data': { 'li_attr': { 'class': 'tree_texts:list__list list', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list' }, 'children': [{ 'li_attr': { 'class': 'tree_texts:list__list:0:list:text1 text1', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list:text1' }, 'children': [], 'text': ('text1 <span class="_tree_text">' '(Hello world)</span>'), 'state': {'opened': True}, }], 'text': 'list', 'state': {'opened': True}, }, 'previous': [ ('after', escape_attr('.tree_texts:tag1') + ':last'), ('inside', '#tree_texts') ] } self.assertEqual(res, expected) # Test with a choice dtd_str = ''' <!ELEMENT texts (tag1, list*, tag2)> <!ELEMENT list (text1|text2)> <!ELEMENT text1 (#PCDATA)> <!ELEMENT text2 (#PCDATA)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts:list__list:0:list:text1' data = { 'texts': { 'list__list': [ { 'list': { 'text1': {'_value': 'Hello world'}, } } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) res = factory._get_data_for_html_display(obj) expected = { 'elt_id': 'texts:list__list:0:list:text1', 'html': ( '<div id="texts:list__list:0:list:text1" ' 'class="xt-container-text1">' '<label>text1</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<select class="btn-add hidden">' '<option>New text1/text2</option>' '<option class="xt-option-text1" ' 'value="texts:list__list:0:list:text1">text1</option>' '<option class="xt-option-text2" ' 'value="texts:list__list:0:list:text2">text2</option>' '</select>' '<a class="btn-delete" ' 'data-target="#texts:list__list:0:list:text1" title="Delete">' '</a>' '<a data-comment-name="texts:list__list:0:list:text1:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text1" ' 'name="texts:list__list:0:list:text1:_value" rows="1">' 'Hello world</textarea>' '</div>'), 'jstree_data': { 'li_attr': { 'class': 'tree_texts:list__list:0:list:text1 text1', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list:text1' }, 'children': [], 'text': u'text1 <span class="_tree_text">(Hello world)</span>', 'state': {'opened': True}, }, 'previous': [ ('inside', escape_attr('#tree_texts:list__list:0:list')) ] } self.assertEqual(res, expected)
def test__get_obj_from_str_id_choices(self): dtd_str = ''' <!ELEMENT texts ((tag1|tag2)*)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts' data = {} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'texts') str_id = 'texts:list__tag1_tag2:0:tag1' data = { 'texts': { 'list__tag1_tag2': [ { 'tag1': {'_value': 'Hello world'} } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag1') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'list__tag1_tag2') dtd_str = ''' <!ELEMENT texts (tag1|tag2)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts' data = {} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'texts') str_id = 'texts:tag1' data = { 'texts': { 'tag1': {'_value': 'Hello world'} } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag1') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'choice__tag1_tag2') self.assertEqual(obj.parent.tagname, 'texts') data = { 'texts': {} } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag1') self.assertEqual(obj.text, '') self.assertEqual(obj._parent_obj.tagname, 'choice__tag1_tag2') self.assertEqual(obj.parent.tagname, 'texts')
def test__get_obj_from_str_id(self): dtd_str = ''' <!ELEMENT texts (tag1, list*, tag2)> <!ELEMENT list (text)> <!ELEMENT text (#PCDATA)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts' data = {} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'texts') str_id = 'texts:tag2' data = { 'texts': { 'tag2': { '_value': 'Hello world', } } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag2') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'texts') str_id = 'texts:list__list:0:list:text' data = { 'texts': { 'list__list': [ { 'list': { 'text': {'_value': 'Hello world'}, } } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'list') self.assertEqual(len(obj._parent_obj._parent_obj), 1) # Test with list but missing elements: we have the element of index 2 # and not the ones for index 0, 1 str_id = 'texts:list__list:2:list:text' data = { 'texts': { 'list__list': [ None, None, { 'list': { 'text': {'_value': 'Hello world'}, } } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'list') list_obj = obj._parent_obj._parent_obj self.assertEqual(len(list_obj), 3) self.assertTrue(isinstance(list_obj[0], elements.EmptyElement)) self.assertTrue(isinstance(list_obj[1], elements.EmptyElement)) # Test with list but missing elements: we don't have enough element str_id = 'texts:list__list:2:list:text' data = { 'texts': { 'list__list': [ { 'list': { 'text': {'_value': 'Hello world'}, } } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, '') self.assertEqual(obj._parent_obj.tagname, 'list') list_obj = obj._parent_obj._parent_obj self.assertEqual(len(list_obj), 3) self.assertFalse(isinstance(list_obj[0], elements.EmptyElement)) self.assertTrue(isinstance(list_obj[1], elements.EmptyElement)) self.assertFalse(isinstance(list_obj[2], elements.EmptyElement)) self.assertEqual(list_obj[2], obj._parent_obj) # Test with enough element, but the one we want is an empty one str_id = 'texts:list__list:1:list:text' data = { 'texts': { 'list__list': [ { 'list': { 'text': {'_value': 'Hello world'}, }, }, None, { 'list': { 'text': {'_value': 'Hello world'}, }, } ] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, '') self.assertEqual(obj._parent_obj.tagname, 'list') list_obj = obj._parent_obj._parent_obj self.assertEqual(len(list_obj), 3) self.assertFalse(isinstance(list_obj[0], elements.EmptyElement)) # The good element has been generated self.assertFalse(isinstance(list_obj[1], elements.EmptyElement)) self.assertFalse(isinstance(list_obj[2], elements.EmptyElement)) self.assertEqual(list_obj[1], obj._parent_obj)
def test__get_obj_from_str_id_html(self): dtd_str = ''' <!ELEMENT texts (text)> <!ELEMENT text (#PCDATA)> ''' str_id = 'texts:unexisting' try: obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() assert(False) except Exception, e: self.assertEqual(str(e), 'Invalid child unexisting') str_id = 'texts:text' obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str) html = obj.to_html() expected = ( '<div id="texts:text" class="xt-container-text">' '<label>text</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)"></span>' '<a data-comment-name="texts:text:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text" name="texts:text:_value" ' 'rows="1"></textarea>' '</div>') self.assertEqual(html, expected) def test__get_obj_from_str_id_list(self): dtd_str = '''
def test__get_data_for_html_display(self): dtd_str = u''' <!ELEMENT texts (tag1, list*, tag2)> <!ELEMENT list (text1)> <!ELEMENT text1 (#PCDATA)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts:list__list:0:list:text1' data = { 'texts': { 'list__list': [{ 'list': { 'text1': { '_value': 'Hello world' }, } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) res = factory._get_data_for_html_display(obj) expected = { 'elt_id': 'texts:list__list:0:list:text1', 'html': ('<div id="texts:list__list:0:list:text1" ' 'class="xt-container-text1">' '<label>text1</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<a data-comment-name="texts:list__list:0:list:text1:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text1" ' 'name="texts:list__list:0:list:text1:_value" rows="1">' 'Hello world</textarea>' '</div>'), 'jstree_data': { 'li_attr': { 'class': 'tree_texts:list__list:0:list:text1 text1', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list:text1' }, 'children': [], 'text': u'text1 <span class="_tree_text">(Hello world)</span>', 'state': { 'opened': True }, }, 'previous': [('inside', escape_attr('#tree_texts:list__list:0:list'))] } self.assertEqual(res, expected) # Test with list object str_id = 'texts:list__list:0:list' data = { 'texts': { 'list__list': [{ 'list': { 'text1': { '_value': 'Hello world' }, } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) res = factory._get_data_for_html_display(obj) expected = { 'elt_id': 'texts:list__list:0:list', 'html': ('<a class="btn-add btn-add-list btn-list" ' 'data-elt-id="texts:list__list:0:list">New list</a>' '<div class="panel panel-default list" ' 'id="texts:list__list:0:list">' '<div class="panel-heading">' '<span data-toggle="collapse" ' 'href="#collapse-texts\\:list__list\\:0\\:list">list' '<a class="btn-delete btn-list" ' 'data-target="#texts:list__list:0:list" title="Delete"></a>' '<a data-comment-name="texts:list__list:0:list:_comment" ' 'class="btn-comment" title="Add comment"></a>' '</span>' '</div>' '<div class="panel-body panel-collapse collapse in" ' 'id="collapse-texts:list__list:0:list">' '<div id="texts:list__list:0:list:text1" ' 'class="xt-container-text1">' '<label>text1</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<a data-comment-name="texts:list__list:0:list:text1:_comment"' ' class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text1" ' 'name="texts:list__list:0:list:text1:_value" rows="1">' 'Hello world</textarea>' '</div>' '</div>' '</div>'), 'jstree_data': { 'li_attr': { 'class': 'tree_texts:list__list list', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list' }, 'children': [{ 'li_attr': { 'class': 'tree_texts:list__list:0:list:text1 text1', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list:text1' }, 'children': [], 'text': ('text1 <span class="_tree_text">' '(Hello world)</span>'), 'state': { 'opened': True }, }], 'text': 'list', 'state': { 'opened': True }, }, 'previous': [('after', escape_attr('.tree_texts:tag1') + ':last'), ('inside', '#tree_texts')] } self.assertEqual(res, expected) # Test with a choice dtd_str = u''' <!ELEMENT texts (tag1, list*, tag2)> <!ELEMENT list (text1|text2)> <!ELEMENT text1 (#PCDATA)> <!ELEMENT text2 (#PCDATA)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts:list__list:0:list:text1' data = { 'texts': { 'list__list': [{ 'list': { 'text1': { '_value': 'Hello world' }, } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) res = factory._get_data_for_html_display(obj) expected = { 'elt_id': 'texts:list__list:0:list:text1', 'html': ('<div id="texts:list__list:0:list:text1" ' 'class="xt-container-text1">' '<label>text1</label>' '<span class="btn-external-editor" ' 'ng-click="externalEditor(this)">' '</span>' '<select class="btn-add hidden">' '<option>New text1/text2</option>' '<option class="xt-option-text1" ' 'value="texts:list__list:0:list:text1">text1</option>' '<option class="xt-option-text2" ' 'value="texts:list__list:0:list:text2">text2</option>' '</select>' '<a class="btn-delete" ' 'data-target="#texts:list__list:0:list:text1" title="Delete">' '</a>' '<a data-comment-name="texts:list__list:0:list:text1:_comment" ' 'class="btn-comment" title="Add comment"></a>' '<textarea class="form-control text1" ' 'name="texts:list__list:0:list:text1:_value" rows="1">' 'Hello world</textarea>' '</div>'), 'jstree_data': { 'li_attr': { 'class': 'tree_texts:list__list:0:list:text1 text1', }, 'a_attr': { 'id': 'tree_texts:list__list:0:list:text1' }, 'children': [], 'text': u'text1 <span class="_tree_text">(Hello world)</span>', 'state': { 'opened': True }, }, 'previous': [('inside', escape_attr('#tree_texts:list__list:0:list'))] } self.assertEqual(res, expected)
def test__get_obj_from_str_id(self): dtd_str = u''' <!ELEMENT texts (tag1, list*, tag2)> <!ELEMENT list (text)> <!ELEMENT text (#PCDATA)> <!ELEMENT tag1 (#PCDATA)> <!ELEMENT tag2 (#PCDATA)> ''' str_id = 'texts' data = {} obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'texts') str_id = 'texts:tag2' data = { 'texts': { 'tag2': { '_value': 'Hello world', } } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'tag2') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'texts') str_id = 'texts:list__list:0:list:text' data = { 'texts': { 'list__list': [{ 'list': { 'text': { '_value': 'Hello world' }, } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'list') self.assertEqual(len(obj._parent_obj._parent_obj), 1) # Test with list but missing elements: we have the element of index 2 # and not the ones for index 0, 1 str_id = 'texts:list__list:2:list:text' data = { 'texts': { 'list__list': [None, None, { 'list': { 'text': { '_value': 'Hello world' }, } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, 'Hello world') self.assertEqual(obj._parent_obj.tagname, 'list') list_obj = obj._parent_obj._parent_obj self.assertEqual(len(list_obj), 3) self.assertTrue(isinstance(list_obj[0], elements.EmptyElement)) self.assertTrue(isinstance(list_obj[1], elements.EmptyElement)) # Test with list but missing elements: we don't have enough element str_id = 'texts:list__list:2:list:text' data = { 'texts': { 'list__list': [{ 'list': { 'text': { '_value': 'Hello world' }, } }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, '') self.assertEqual(obj._parent_obj.tagname, 'list') list_obj = obj._parent_obj._parent_obj self.assertEqual(len(list_obj), 3) self.assertFalse(isinstance(list_obj[0], elements.EmptyElement)) self.assertTrue(isinstance(list_obj[1], elements.EmptyElement)) self.assertFalse(isinstance(list_obj[2], elements.EmptyElement)) self.assertEqual(list_obj[2], obj._parent_obj) # Test with enough element, but the one we want is an empty one str_id = 'texts:list__list:1:list:text' data = { 'texts': { 'list__list': [{ 'list': { 'text': { '_value': 'Hello world' }, }, }, None, { 'list': { 'text': { '_value': 'Hello world' }, }, }] } } obj = factory._get_obj_from_str_id(str_id, dtd_str=dtd_str, data=data) self.assertEqual(obj.tagname, 'text') self.assertEqual(obj.text, '') self.assertEqual(obj._parent_obj.tagname, 'list') list_obj = obj._parent_obj._parent_obj self.assertEqual(len(list_obj), 3) self.assertFalse(isinstance(list_obj[0], elements.EmptyElement)) # The good element has been generated self.assertFalse(isinstance(list_obj[1], elements.EmptyElement)) self.assertFalse(isinstance(list_obj[2], elements.EmptyElement)) self.assertEqual(list_obj[1], obj._parent_obj)