1
+ /* bender-tags: editor,unit,utils */
2
+
3
+ ( function ( ) {
4
+ 'use strict' ;
5
+
6
+ var doc = CKEDITOR . document ,
7
+ playground = doc . getById ( 'playground' ) ,
8
+ setRange = bender . tools . range . setWithHtml ,
9
+ getRange = bender . tools . range . getWithHtml ,
10
+ playgroundAddress = playground . getAddress ( ) ,
11
+
12
+ failIE11 = CKEDITOR . env . ie && CKEDITOR . env . version > 10 ,
13
+ failIE8 = CKEDITOR . env . ie && CKEDITOR . env . version < 9 ;
14
+
15
+ // Asserts setRange and getRange.
16
+ function s ( html , collapsed , startAddress , startOffset , endAddress , endOffset , htmlWithRange ) {
17
+ return function ( ) {
18
+ var range = setRange ( playground , html ) ,
19
+ startContainer , endContainer , range ;
20
+
21
+ // Get startContainer by address.
22
+ if ( startAddress && startOffset != undefined )
23
+ startContainer = doc . getByAddress ( playgroundAddress . concat ( startAddress ) ) ;
24
+
25
+ // Get endContainer by address.
26
+ if ( collapsed === true ) {
27
+ endContainer = startContainer ;
28
+ endOffset = startOffset ;
29
+ } else if ( collapsed === false )
30
+ endContainer = doc . getByAddress ( playgroundAddress . concat ( endAddress ) ) ;
31
+
32
+ if ( startContainer && endContainer ) {
33
+ assert . isTrue ( startContainer . equals ( range . startContainer ) , 'startContainer' ) ;
34
+ assert . isTrue ( endContainer . equals ( range . endContainer ) , 'endContainer' ) ;
35
+ assert . areSame ( startOffset , range . startOffset , 'startOffset' ) ;
36
+ assert . areSame ( endOffset , range . endOffset , 'endOffset' ) ;
37
+ assert . areSame ( collapsed , range . collapsed , 'collapsed' ) ;
38
+ } else {
39
+ assert . isNull ( range , 'No ranges returned' ) ;
40
+ }
41
+
42
+ assert . areSame ( html . replace ( / [ \{ \} \[ \] ] / g, '' ) , bender . tools . fixHtml ( playground . getHtml ( ) , 1 , 1 ) , 'Markers cleaned - setRange' ) ;
43
+ assert . areSame ( htmlWithRange == undefined ? html : htmlWithRange , bender . tools . fixHtml ( getRange ( playground , range ) , 1 , 1 ) , 'getRange' ) ;
44
+ } ;
45
+ }
46
+
47
+ bender . test ( {
48
+ _should : {
49
+ ignore : {
50
+ // IE11 inserts extra <br>.
51
+ 'test text #0' : failIE11 ,
52
+
53
+ // IE8 normalizes double spaces, etc.
54
+ 'test text #16' : failIE8 ,
55
+ 'test text #18' : failIE8 ,
56
+ 'test text #19' : failIE8 ,
57
+ 'test element #13' : failIE8 ,
58
+ 'test element #14' : failIE8 ,
59
+ 'test element #15' : failIE8 ,
60
+ 'test element #16' : failIE8 ,
61
+ 'test element #17' : failIE8 ,
62
+ 'test mixed #8' : failIE8
63
+ }
64
+ } ,
65
+
66
+ // Collapsed Start Address Start Offset End Address End offset HtmlWithRange
67
+ 'test text #0' : s ( '' ) ,
68
+ 'test text #1' : s ( '{}' , null , null , null , null , null , '' ) ,
69
+ 'test text #2' : s ( '<p>x</p>' ) ,
70
+ 'test text #3' : s ( '<p>x{}x</p>' , true , [ 0 , 0 ] , 1 ) ,
71
+ 'test text #4' : s ( '<p>{}x</p>' , true , [ 0 , 0 ] , 0 ) ,
72
+ 'test text #5' : s ( '<p>x{}</p>' , true , [ 0 , 0 ] , 1 ) ,
73
+ 'test text #6' : s ( '<p>{x}</p>' , false , [ 0 , 0 ] , 0 , [ 0 , 0 ] , 1 ) ,
74
+ 'test text #7' : s ( '<p>{x</p><p>y}</p>' , false , [ 0 , 0 ] , 0 , [ 1 , 0 ] , 1 ) ,
75
+ 'test text #8' : s ( '<p>x{</p><p>y}</p>' , false , [ 0 , 0 ] , 1 , [ 1 , 0 ] , 1 ) ,
76
+ 'test text #9' : s ( '<p>x{</p><p>}y</p>' , false , [ 0 , 0 ] , 1 , [ 1 , 0 ] , 0 ) ,
77
+ 'test text #10' : s ( '<ul><li>x{x</li><li>}y</li></ul>' , false , [ 0 , 0 , 0 ] , 1 , [ 0 , 1 , 0 ] , 0 ) ,
78
+ 'test text #11' : s ( '<ol><li>x{}<ul><li>y</li></ul></li></ol>' , true , [ 0 , 0 , 0 ] , 1 ) ,
79
+ 'test text #12' : s ( '<p>{}<span>x</span></p>' , null , null , null , null , null , '<p><span>x</span></p>' ) ,
80
+ 'test text #13' : s ( '<p>{<span>x</span>}</p>' , null , null , null , null , null , '<p><span>x</span></p>' ) ,
81
+ 'test text #14' : s ( '<p>x {}</p>' , true , [ 0 , 0 ] , 2 ) ,
82
+ 'test text #15' : s ( '<p>{} x</p>' , true , [ 0 , 0 ] , 0 ) ,
83
+ 'test text #16' : s ( '<p> {} </p>' , true , [ 0 , 0 ] , 1 ) ,
84
+ 'test text #17' : s ( '<p>{ }</p>' , false , [ 0 , 0 ] , 0 , [ 0 , 0 ] , 1 ) ,
85
+ 'test text #18' : s ( '<p>{ }</p>' , false , [ 0 , 0 ] , 0 , [ 0 , 0 ] , 2 ) ,
86
+ 'test text #19' : s ( '<div>{ <p> }</p></div>' , false , [ 0 , 0 ] , 0 , [ 0 , 1 , 0 ] , 1 ) ,
87
+ 'test text #20' : s ( '<p>{<span>x</span> }</p>' , false , null , null , null , null , '<p><span>x</span> </p>' ) ,
88
+
89
+ 'test element #0' : s ( '[]' , true , [ ] , 0 ) ,
90
+ 'test element #1' : s ( '<p>x[]x</p>' , true , [ 0 ] , 1 ) ,
91
+ 'test element #2' : s ( '<p>[]x</p>' , true , [ 0 ] , 0 ) ,
92
+ 'test element #3' : s ( '<p>x[]</p>' , true , [ 0 ] , 1 ) ,
93
+ 'test element #4' : s ( '<p>[x]</p>' , false , [ 0 ] , 0 , [ 0 ] , 1 ) ,
94
+ 'test element #5' : s ( '<ul>[<li>x</li><li>y</li>]</ul>' , false , [ 0 ] , 0 , [ 0 ] , 2 ) ,
95
+ 'test element #6' : s ( '<ul><li>x[x</li><li>]y</li></ul>' , false , [ 0 , 0 ] , 1 , [ 0 , 1 ] , 0 ) ,
96
+ 'test element #7' : s ( '<p>x[<span>y</span>]</p>' , false , [ 0 ] , 1 , [ 0 ] , 2 ) ,
97
+ 'test element #8' : s ( '<p>[]<span>x</span></p>' , true , [ 0 ] , 0 ) ,
98
+ 'test element #9' : s ( '<table><tbody><tr>[<td>x</td>]<td>x</td></tr></tbody></table>' , false , [ 0 , 0 , 0 ] , 0 , [ 0 , 0 , 0 ] , 1 ) ,
99
+ 'test element #10' : s ( '<ol><li>x[]<ul><li>y</li></ul></li></ol>' , true , [ 0 , 0 ] , 1 ) ,
100
+ 'test element #11' : s ( '<ol>[<li>x</li><li>y<ul><li>z</li>]<li>a</li></ul></li></ol>' , false , [ 0 ] , 0 , [ 0 , 1 , 1 ] , 1 ) ,
101
+ 'test element #12' : s ( '<p>x []</p>' , true , [ 0 ] , 1 ) ,
102
+ 'test element #13' : s ( '<p>[] x</p>' , true , [ 0 ] , 0 ) ,
103
+ 'test element #14' : s ( '<p> [] </p>' , true , [ 0 ] , 1 ) ,
104
+ 'test element #15' : s ( '<p>[ ]</p>' , false , [ 0 ] , 0 , [ 0 ] , 1 ) ,
105
+ 'test element #16' : s ( '<p>[ ]</p>' , false , [ 0 ] , 0 , [ 0 ] , 1 ) ,
106
+ 'test element #17' : s ( '<div>[ <p> ]</p></div>' , false , [ 0 ] , 0 , [ 0 , 1 ] , 1 ) ,
107
+
108
+ 'test mixed #1' : s ( '<p>x{x]</p>' , false , [ 0 , 0 ] , 1 , [ 0 ] , 1 ) ,
109
+ 'test mixed #2' : s ( '<p>{x]</p>' , false , [ 0 , 0 ] , 0 , [ 0 ] , 1 ) ,
110
+ 'test mixed #3' : s ( '<p>[x}</p>' , false , [ 0 ] , 0 , [ 0 , 0 ] , 1 ) ,
111
+ 'test mixed #4' : s ( '<p>[}x</p>' , false , [ 0 ] , 0 , [ 0 , 0 ] , 0 ) ,
112
+ 'test mixed #5' : s ( '<p>x{]</p>' , false , [ 0 , 0 ] , 1 , [ 0 ] , 1 ) ,
113
+ 'test mixed #6' : s ( '<p>[x</p><p>y}</p>' , false , [ 0 ] , 0 , [ 1 , 0 ] , 1 ) ,
114
+ 'test mixed #7' : s ( '<p>{ ]</p>' , false , [ 0 , 0 ] , 0 , [ 0 ] , 1 ) ,
115
+ 'test mixed #8' : s ( '<p> { ] </p>' , false , [ 0 , 0 ] , 1 , [ 0 ] , 1 )
116
+ } ) ;
117
+ } ) ( ) ;
0 commit comments