예제 #1
0
    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)
예제 #2
0
    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')
예제 #3
0
    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)
예제 #4
0
    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)
예제 #5
0
 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')
예제 #6
0
    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)
예제 #7
0
    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')
예제 #8
0
    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)
예제 #9
0
    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 = '''
예제 #10
0
    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)
예제 #11
0
    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)