src/cm/tests/test_comment_positioning.py
author gibus
Wed, 11 Sep 2013 23:13:01 +0200
changeset 532 0bad3613f59d
parent 301 6e8fb4869d50
child 606 52f3e090eed9
permissions -rw-r--r--
Reverse to YUI 3.0.0 since with YUI.3.10.3, comment content including words 'paragraph' or 'section' do not show up on Firefox, this is weird and has to be investigated.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
from django.test import TestCase
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
from BeautifulSoup import BeautifulSoup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
from cm.models import *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
# python manage.py test 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
# python manage.py test cm.CommentPositioningTest
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
def create_comment(start_wrapper=0, end_wrapper=0, start_offset=0, end_offset=0, reply_to=None, user=None, state='pending'):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
    version = Text.objects.all()[0].get_latest_version()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
    co = Comment.objects.create(text_version=version,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
                           title="tt",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
                           content="tt",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
                           start_wrapper=start_wrapper,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
                           end_wrapper=end_wrapper,                                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
                           start_offset=start_offset,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
                           end_offset=end_offset,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
                           reply_to=reply_to,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
                           state=state,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
                           user=user)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    return co
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
class CommentPositioningTest(TestCase):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
    def assert_comment(self, old_comment_id, start_wrapper, end_wrapper, start_offset, end_offset):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        comment = Comment.objects.get(id=old_comment_id)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        #print comment.start_wrapper, comment.end_wrapper, comment.start_offset, comment.end_offset  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        #print start_wrapper, end_wrapper, start_offset, end_offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        self.assertEqual(comment.start_wrapper, start_wrapper)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        self.assertEqual(comment.end_wrapper, end_wrapper)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        self.assertEqual(comment.start_offset, start_offset)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        self.assertEqual(comment.end_offset, end_offset)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
    def preserve_comment_pos(self, content, new_content, comment_pos_list):
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        text = Text.objects.create_text("text", "html", content, "", "", "", None)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        version = Text.objects.all()[0].get_latest_version()
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        res = {}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        for old, new  in comment_pos_list:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            x, y, z, k = old 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            comment = create_comment(x, y, z, k)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
            res[comment.id] = new  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        
103
61fd17f9ab78 enh: detached comments
rbernard
parents: 0
diff changeset
    48
        version.edit("text", "html", new_content, keep_comments = True, cancel_modified_scopes=False)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        for id, new in res.items():
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
            if not new:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
                self.assertFalse(Comment.objects.filter(id=id))
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
            else:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
                x, y , z, k = new
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
                self.assert_comment(id, x, y, z, k) 
301
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    56
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    57
    def test_remove_comment(self):
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    58
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    59
        new_content = u"""<html><body>This is a <b>te</b>e<b>est</b> text</body></html>"""
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    60
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    61
        text = Text.objects.create_text("text", "html", content, "", "", "", None)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    62
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    63
        comment1 = create_comment(2, 2, 2, 4)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    64
        comment2 = create_comment(2, 2, 2, 4)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    65
        
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    66
        version = Text.objects.all()[0].get_latest_version()
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    67
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    68
        self.assertEqual(len(version.get_comments()), 2)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    69
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    70
        version.edit("text", "html", new_content, keep_comments = False, cancel_modified_scopes=False)
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    71
6e8fb4869d50 fix: use 'keep_comments' parameter when editing text
raph
parents: 278
diff changeset
    72
        self.assertEqual(len(version.get_comments()), 0)
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
    def test_wrapper_shifted(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    75
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    76
        new_content = u"""<html><body>This is a <b>te</b>e<b>est</b> text</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        self.preserve_comment_pos(content, new_content, [([2,2,2,4],[4,4,2,4]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
    def test_comment_removed(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    80
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    81
        new_content = u"""<html><body>This is a <b>test</b> txt</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        self.preserve_comment_pos(content, new_content, [([2,2,2,4],None),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
    def test_offset_shifted(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    85
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    86
        new_content = u"""<html><body>a <b>teXXXst</b>a text</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        self.preserve_comment_pos(content, new_content, [([2,2,2,4],[2,2,3,5]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
    def test_insert_wrapper(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    90
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    91
        new_content = u"""<html><body>This is a <b>test</b> te<b>x</b>t</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        self.preserve_comment_pos(content, new_content, [([2,2,2,5],[2,4,2,1]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
    def test_multiwrapper(self):
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    95
        content     = u"""<html><body>This is a <b>test</b> text</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    96
        new_content = u"""<html><body>This is a <b>testXXX<b>X</b>XXXXXXX</b>X text</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        self.preserve_comment_pos(content, new_content, [([0,2,2,4],None),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
278
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
    99
    def test_insert_wrapper2(self):
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
   100
        content     = u"""<html><body>aa<b>test</b>bb</body></html>"""
3d25afbd78ff fix unit tests
raph
parents: 103
diff changeset
   101
        new_content = u"""<html><body>aXa<b>test</b>bXb</body></html>"""
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
        self.preserve_comment_pos(content, new_content, [([0,2,1,1],[0,2,2,1]),])
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103