Changeset 1179


Ignore:
Timestamp:
04/09/09 20:01:09 (10 years ago)
Author:
douglas
Message:

Enhance the test engine, fix the tests, and fix one bug found by the tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/Ticket1226/paraHandlerBest.js

    r1178 r1179  
    860860EnterParagraphs.RunTests = function(xinha, debug) 
    861861{ 
    862   function test(message, before, cursorBefore, after, cursorAfter) { 
    863     console.group('Test: ', message, null, before); 
     862  function test(message, before, cursorBefore, after, cursorAfter, cursorAfter2) { 
     863    console.group('Test: ', message); 
    864864    if (before !== null) { 
    865865      xinha.setHTML(before); 
     
    875875      cAnchor = xinha._doc.body; 
    876876      cOffset = 0; 
    877       for (var index=0; index<commands.length; ++index) { 
    878         var command = commands[index]; 
    879         if ('id' == command[0]) { 
    880             cAnchor = xinha._doc.getElementById(command[1]); 
    881         } else if ('tag' == command[0]) { 
    882             cAnchor = xinha._doc.getElementsByTagName(command[1])[0]; 
    883         } else if ('child' == command[0]) { 
    884             cAnchor = cAnchor.childNodes[command[1]]; 
    885         } else if ('next' == command[0]) { 
    886           for (var next=command[1]; next > 0 && cAnchor.nextSibling; --next) { 
    887             cAnchor = cAnchor.nextSibling; 
    888           } 
    889         } else if ('previous' == command[0]) { 
    890           for (var previous=command[1]; previous > 0 && cAnchor.previousSibling; --previous) { 
    891             cAnchor = cAnchor.previousSibling; 
    892           } 
    893         } else if ('offset' == command[0]) { 
    894           if (command[1] == 'length') { 
    895             if (TEXT_NODE == cAnchor.nodeType) { 
    896               cOffset = cAnchor.nodeValue.length; 
     877      try { 
     878        for (var index=0; index<commands.length; ++index) { 
     879          var command = commands[index]; 
     880          if ('id' == command[0]) { 
     881              cAnchor = xinha._doc.getElementById(command[1]); 
     882          } else if ('firsttag' == command[0]) { 
     883              cAnchor = xinha._doc.getElementsByTagName(command[1])[0]; 
     884          } else if ('child' == command[0]) { 
     885              cAnchor = cAnchor.childNodes[command[1]]; 
     886          } else if ('next' == command[0]) { 
     887            for (var next=command[1]; next > 0 && cAnchor.nextSibling; --next) { 
     888              cAnchor = cAnchor.nextSibling; 
     889            } 
     890          } else if ('previous' == command[0]) { 
     891            for (var previous=command[1]; previous > 0 && cAnchor.previousSibling; --previous) { 
     892              cAnchor = cAnchor.previousSibling; 
     893            } 
     894          } else if ('offset' == command[0]) { 
     895            if (command[1] == 'length') { 
     896              if (TEXT_NODE == cAnchor.nodeType) { 
     897                cOffset = cAnchor.nodeValue.length; 
     898              } else { 
     899                cOffset = cAnchor.childNodes.length; 
     900              } 
     901            } else if (command[1] < 0) { 
     902              if (TEXT_NODE == cAnchor.nodeType) { 
     903                cOffset = cAnchor.nodeValue.length + command[1]; 
     904              } else { 
     905                cOffset = cAnchor.childNodes.length + command[1]; 
     906              } 
    897907            } else { 
    898               cOffset = cAnchor.childNodes.length; 
     908              cOffset = command[1]; 
    899909            } 
    900           } else if (command[1] < 0) { 
    901             if (TEXT_NODE == cAnchor.nodeType) { 
    902               cOffset = cAnchor.nodeValue.length + command[1]; 
    903             } else { 
    904               cOffset = cAnchor.childNodes.length + command[1]; 
    905             } 
    906           } else { 
    907             cOffset = command[1]; 
    908910          } 
    909911        } 
     912      } catch(e) { 
     913        cAnchor = null; 
     914        cOffset = null; 
    910915      } 
    911916    } 
     
    930935 
    931936    if ((selection.anchorNode != cAnchor) || (selection.anchorOffset != cOffset)) { 
    932       console.error('Actual anchor:', selection.anchorNode, 'Actual offset:', selection.anchorOffset, 'Expected anchor:', cAnchor, 'Expected offset:', cOffset); 
     937      // Sometimes there are multiple equivalent selection, let's see if we received alternatives. 
     938      if (typeof cursorAfter2 != 'undefined') { 
     939        setCursor(cursorAfter2); 
     940        if ((selection.anchorNode != cAnchor) || (selection.anchorOffset != cOffset)) { 
     941          console.error('Actual anchor:', selection.anchorNode, 'Actual offset:', selection.anchorOffset, 'Expected anchor:', cAnchor, 'Expected offset:', cOffset); 
     942        } 
     943      } else { 
     944        console.error('Actual anchor:', selection.anchorNode, 'Actual offset:', selection.anchorOffset, 'Expected anchor:', cAnchor, 'Expected offset:', cOffset); 
     945      } 
    933946    } 
    934947 
     
    954967       '<br>\n', [], 
    955968       '<p>&nbsp;</p><p><br>&nbsp;</p>\n', [['child', 1]]);  // Mozilla kicks off a trailing newline.  Do I care about this? 
     969 
    956970  test('Empty Body', 
    957971       '', [], 
    958        '<p>&nbsp;</p><p></p>', [['child', 1], ['offset', 0]]); 
    959   test('Text node in body', 
    960        'Hi', [], 
    961        '<p>&nbsp;</p><p>Hi</p>', [['child', 1], ['offset', 0]]); 
    962   test('Split h1', 
    963        '<h1 id="before">hi</h1>', [['id', 'before'], ['child', 0], ['offset', 2]], 
    964        '<h1 id="before">hi</h1><h1></h1>', [['id', 'before'], ['next', 1], ['offset', 2]]); 
     972       '<p>&nbsp;</p><p>&nbsp;</p>', [['child', 1]], 
     973                                     [['child', 1], ['child', 0]]); 
     974 
     975  test('Text node in body: text node', 
     976       'Hi', [], // Point to text node 
     977       '<p>&nbsp;</p><p>Hi</p>', [['child', 1]], 
     978                                 [['child', 1], ['child', 0]]); 
     979  test('Text node in body: first char', 
     980       'Hi', [['child', 0]], // Point to 'H' 
     981       '<p>&nbsp;</p><p>Hi</p>', [['child', 1]], 
     982                                 [['child', 1], ['child', 0]]); 
     983  test('Text node in body: split text', 
     984       'Hi', [['child', 0], ['offset', 1]], // Point to 'i' 
     985       '<p>H</p><p>i</p>', [['child', 1]], 
     986                           [['child', 1], ['child', 0]]); 
     987  test('Text node in body: after text', 
     988       'Hi', [['child', 0], ['offset', -1]], // Point after 'i' 
     989       '<p>Hi</p><p>&nbsp;</p>', [['child', 1]], 
     990                                 [['child', 1], ['child', 0]]); 
     991  test('Text node in body: after text node', 
     992       'Hi', [['offset', -1]], // Point after text node 
     993       '<p>Hi</p><p>&nbsp;</p>', [['child', 1]], 
     994                                 [['child', 1], ['child', 0]]); 
     995 
     996  /***************  Repeat the header block for each header level once the tests are passing *********************/ 
     997  test('Split header 1: h1 node', 
     998       '<h1>hi</h1>', [], 
     999       '<p>&nbsp;</p><h1>hi</h1>', [['child', 1]], 
     1000                                   [['child', 1], ['child', 0]]); 
     1001  test('Split header 1: text node', 
     1002       '<h1>hi</h1>', [['child', 0]], 
     1003       '<p>&nbsp;</p><h1>hi</h1>', [['child', 1]], 
     1004                                   [['child', 1], ['child', 0]]); 
     1005  test('Split header 1: first char', 
     1006       '<h1>hi</h1>', [['child', 0], ['child', 0]], 
     1007       '<p>&nbsp;</p><h1>hi</h1>', [['child', 1]], 
     1008                                   [['child', 1], ['child', 0]]); 
     1009  test('Split header 1: split text', 
     1010       '<h1>hi</h1>', [['child', 0], ['child', 0], ['offset', 1]], 
     1011       '<h1>h</h1><h1>i</h1>', [['child', 1]], 
     1012                               [['child', 1], ['child', 0]]); 
     1013  test('Split header 1: after text', 
     1014       '<h1>hi</h1>', [['child', 0], ['child', 0], ['offset', -1]], 
     1015       '<h1>hi</h1><p>&nbsp;</p>', [['child', 1]], 
     1016                                   [['child', 1], ['child', 0]]); 
     1017  test('Split header 1: after text node', 
     1018       '<h1>hi</h1>', [['child', 0], ['offset', -1]], 
     1019       '<h1>hi</h1><p>&nbsp;</p>', [['child', 1]], 
     1020                                   [['child', 1], ['child', 0]]); 
     1021  test('Split header 1: after h1 node', 
     1022       '<h1>hi</h1>', [['offset', -1]], 
     1023       '<h1>hi</h1><p>&nbsp;</p>', [['child', 1]], 
     1024                                   [['child', 1], ['child', 0]]); 
    9651025  console.groupEnd(); 
    9661026  xinha.setHTML(contentBackup); 
     
    15111571      var newCursor = treeRoot; 
    15121572    } 
     1573    else if (TEXT_NODE == treeRoot.nodeType) 
     1574    { 
     1575      var newCursor = splitTree(embedNode, treeRoot, cursorOffset, doc); 
     1576    } 
    15131577    else 
    15141578    { 
Note: See TracChangeset for help on using the changeset viewer.