3 QUnit.module( 'jquery.textSelection', QUnit.newMwEnvironment() );
6 * Test factory for $.fn.textSelection( 'encapsulateText' )
8 * @param options {object} associative array containing:
12 * start {int} starting char for selection
13 * end {int} ending char for selection
14 * params {object} add'l parameters for $().textSelection( 'encapsulateText' )
16 function encapsulateTest( options ) {
24 opt.before = $.extend( {
29 opt.after = $.extend( {
34 QUnit.test( opt.description, function ( assert ) {
35 var $textarea, start, end, options, text, selected,
37 if ( opt.after.selected !== null ) {
40 QUnit.expect( tests );
42 $textarea = $( '<textarea>' );
44 $( '#qunit-fixture' ).append( $textarea );
46 $textarea.textSelection( 'setContents', opt.before.text );
48 start = opt.before.start;
52 options = $.extend( {}, opt.replace );
53 options.selectionStart = start;
54 options.selectionEnd = end;
55 $textarea.textSelection( 'encapsulateSelection', options );
57 text = $textarea.textSelection( 'getContents' ).replace( /\r\n/g, '\n' );
59 assert.equal( text, opt.after.text, 'Checking full text after encapsulation' );
61 if ( opt.after.selected !== null ) {
62 selected = $textarea.textSelection( 'getSelection' );
63 assert.equal( selected, opt.after.selected, 'Checking selected text after encapsulation.' );
82 regex: /^(\s*)(={1,6})(.*?)\2(\s*)$/,
83 regexReplace: '$1==$3==$4',
88 peri: 'Bulleted list item',
95 description: 'Adding sig to end of text',
97 text: 'Wikilove dude! ',
102 text: 'Wikilove dude! --~~~~',
109 description: 'Adding bold to empty',
116 text: '\'\'\'Bold text\'\'\'',
117 selected: 'Bold text' // selected because it's the default
123 description: 'Adding bold to existing text',
125 text: 'Now is the time for all good men to come to the aid of their country',
130 text: 'Now is the time for \'\'\'all good men\'\'\' to come to the aid of their country',
131 selected: '' // empty because it's not the default'
137 description: 'ownline option: adding new h2',
139 text: 'Before\nAfter',
144 text: 'Before\n== Heading 2 ==\nAfter',
145 selected: 'Heading 2'
151 description: 'ownline option: turn a whole line into new h2',
153 text: 'Before\nMy heading\nAfter',
158 text: 'Before\n== My heading ==\nAfter',
165 description: 'ownline option: turn a partial line into new h2',
167 text: 'BeforeMy headingAfter',
172 text: 'Before\n== My heading ==\nAfter',
179 description: 'splitlines option: no selection, insert new list item',
181 text: 'Before\nAfter',
186 text: 'Before\n* Bulleted list item\nAfter'
192 description: 'splitlines option: single partial line selection, insert new list item',
194 text: 'BeforeMy List ItemAfter',
199 text: 'Before\n* My List Item\nAfter'
205 description: 'splitlines option: multiple lines',
207 text: 'Before\nFirst\nSecond\nThird\nAfter',
212 text: 'Before\n* First\n* Second\n* Third\nAfter'
217 function caretTest( options ) {
218 QUnit.test( options.description, 2, function ( assert ) {
220 $textarea = $( '<textarea>' ).text( options.text );
222 $( '#qunit-fixture' ).append( $textarea );
224 if ( options.mode === 'set' ) {
225 $textarea.textSelection( 'setSelection', {
226 start: options.start,
231 function among( actual, expected, message ) {
232 if ( $.isArray( expected ) ) {
233 assert.ok( $.inArray( actual, expected ) !== -1, message + ' (got ' + actual + '; expected one of ' + expected.join( ', ' ) + ')' );
235 assert.equal( actual, expected, message );
239 pos = $textarea.textSelection( 'getCaretPosition', { startAndEnd: true } );
240 among( pos[0], options.start, 'Caret start should be where we set it.' );
241 among( pos[1], options.end, 'Caret end should be where we set it.' );
245 caretSample = 'Some big text that we like to work with. Nothing fancy... you know what I mean?';
248 // @broken: Disabled per bug 34820
250 description: 'getCaretPosition with original/empty selection - bug 31847 with IE 6/7/8',
252 start: [0, caretSample.length], // Opera and Firefox (prior to FF 6.0) default caret to the end of the box (caretSample.length)
253 end: [0, caretSample.length], // Other browsers default it to the beginning (0), so check both.
259 description: 'set/getCaretPosition with forced empty selection',
267 description: 'set/getCaretPosition with small selection',