Approved, but more changes are needed. I'm attaching an updated unit test that shows failures in FF2/dhtml. It works in IE7/dhtml. Do you want this to be a new bug?


Change 20071217-maxcarlson-V by [EMAIL PROTECTED] on 2007-12-17
18:14:44 PST
     in /Users/maxcarlson/openlaszlo/trunk
for <http://svn.openlaszlo.org/openlaszlo/trunk>http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Add seuuport for setting/getting inputtext selection in DHTML

New Features:

Bugs Fixed: LPP-4106 - LzText getSelectionPosition, getSelectionSize not implemented in DHTML

Technical Reviewer: promanik
QA Reviewer: ptw
Doc Reviewer: (pending)

Documentation:

Release Notes:

Details: lztest-text.lzx - Changed selection tests to use inputtext.

LzSprite.js - Clean up quirks setting, add text_selection_use_range for IE. Fix _parent braino.

LzInputTextSprite.js - Add setSelection() and getSelectionStart() and getSelectionEnd.


Tests: lztest-text.lzx now passes all tests in test4() - selection.
Tested in Firefox, Safari and IE 7.

Files:
M      test/lztest/lztest-text.lzx
M      WEB-INF/lps/lfc/kernel/dhtml/LzSprite.js
M      WEB-INF/lps/lfc/kernel/dhtml/LzInputTextSprite.js

Changeset: <http://svn.openlaszlo.org/openlaszlo/patches/20071217-maxcarlson-V.tar>http://svn.openlaszlo.org/openlaszlo/patches/20071217-maxcarlson-V.tar
<canvas debug="true">
  <font name="mono" src="../../lps/fonts/mono-7-bold-regular-s.ttf"/>

  <include href="lztest/lztestmanager.lzx" /> 

  <simplelayout axis="x" spacing="5"/>

<!-- text1: simple view -->
  <text name="text1" x="10" y="20" width="50" height="30" label="label" 
bgcolor="0xaaaaaa" maxlength="10" multiline="true" pattern="[a-zA-Z]*" 
resize="true" selectable="true" text="text"></text>

<!-- text2: simple view for manipulating text. -->
  <view name="view2">
    <simplelayout axis="x" spacing="0"/>
    <text name="t1" width="50" height="30" bgcolor="0xaaaaaa" multiline="false" 
resize="true"/>
    <text name="t2" width="50" height="30" bgcolor="0xcccccc" multiline="true" 
resize="true"/>
  </view>

<!-- text3: simple text for checking methods -->
  <text name="text3" resize="false" y="20" bgcolor="0xaaaaaa"/>

<!-- text4: simple text for checking selection methods -->
  <inputtext name="text4" resize="false" bgcolor="0xaaaaaa"/>
  <inputtext name="text4ml" width="100" multiline="true" bgcolor="0xaaaaaa"/>

<!-- text5: simple text for checking scroll methods -->
  <view name="view5">
    <simplelayout axis="x"/>
    <text name="t1" y="20" resize="false" width="50" height="40" 
bgcolor="0xaaaaaa">
      1234567890abcdefghijklmnopqrstuvwxyz
    </text>
    <text name="t2" y="20" resize="false" width="50" height="40" 
multiline="true" bgcolor="0xcccccc">
      1234567890abcdefghijklmnopqrstuvwxyz
    </text>
  </view>

<!-- view6: HTML Markup -->
  <view name="view6">
    <simplelayout axis="x"/>
    <text name="t1" resize="true" bgcolor="0xaaaaaa" multiline="false"/>
    <text name="t2" resize="true" bgcolor="0xcccccc" multiline="true"/>
  </view>

<!-- text7: Accessibility -->
  <text name="text7" y="20" bgcolor="0xaaaaaa" resize="false" aaactive="true">
  openLaszlo
  </text>


<!-- text8: x-stacking of text/input text -->
  <view name="view8">
      <simplelayout axis="y"/>
    <view name="v1">
      <simplelayout axis="x"/>
      <text name="t1" resize="false" bgcolor="0xaaaaaa">Hello</text>
      <text name="t2" resize="false" bgcolor="0xcccccc">World</text>
    </view>
    <view name="v2">
      <simplelayout axis="x"/>
      <text name="t1" resize="false" bgcolor="0xcccccc">Hello</text>
      <inputtext name="t2" bgcolor="0xaaaaaa">World</inputtext>
    </view>
    <view name="v3">
      <simplelayout axis="x"/>
      <text name="t1" resize="false" bgcolor="0xaaaaaa">HelloWorld</text>
    </view>

  </view>

<!-- text9: font test and sizing -->
  <view name="view9">
    <simplelayout axis="y"/>
    <text name="t1" resize="false" font="mono" 
bgcolor="0xaaaaaa">&lt;&gt;&apos;&amp;&quot;</text>
    <text name="t2" resize="false" font="mono" bgcolor="0xcccccc">.....</text>
    <text name="t3" resize="false" font="mono" bgcolor="0xaaaaaa">*****</text>
    <text name="t4" resize="false" font="mono" bgcolor="0xcccccc" width="66" 
multiline="true">1234567890</text>
  </view>

<script><![CDATA[

// Selection test
function seltest(msg,obj,size,pos)
{
  LzTestManager.assertEquals (size, obj.getSelectionSize(),  msg + ": " + 
obj.name + ".getSelectionSize()");    
  LzTestManager.assertEquals (size, obj.getSelectionPosition(),  msg + ": " + 
obj.name + ".getSelectionPosition()");    
}

var suite = new LzTestSuite("LzText Test Suite"); 

// NOTE:
//
// Future enhancements to LzView unit test:
//   - Test event generation
//   - Assume a specific font and check sizes
//   - Other fonts


//
// Helper functions
//

// z-order (for test5)
function ztest(msg,exp,act)
{
  LzTestManager.assertEquals (exp.length, act.length, msg + ": ztest length");
  for (var i=0; i<exp.length; i++) {
    LzTestManager.assertEquals (exp[i].name, act[i].name, msg + ": index " + i);
  }
}

// Inspect [x,y,width,height] and compare with the specified view
function loctest(msg,view,exp)
{
  LzTestManager.assertEquals (exp[0], view.x, msg + ": x failure");  
  LzTestManager.assertEquals (exp[1], view.y, msg + ": y failure");  
  LzTestManager.assertEquals (exp[2], view.width, msg + ": width failure");  
  LzTestManager.assertEquals (exp[3], view.height, msg + ": height failure");  
}


// 
// LzText
// 

// test1:  simple. Also tests some getters and setters
suite.test1 = function() {
  // Verify state
  loctest("text1", text1, [0,20,50,30]);
  LzTestManager.assertEquals (true, text1.resize, "text1.resize failure");
  LzTestManager.assertEquals (10, text1.maxlength, "text1.maxlength failure");

  // Change the length of the string
  text1.setText('12345678901234567890');
  LzTestManager.assertEquals ("1234567890", text1.getText(), "LPP-2208: text1 
maxlength not working");  

  // Now change the maxLength and try again
  text1.setMaxLength (8);
  LzTestManager.assertEquals (8, text1.maxlength, "text1.maxlength failure");
  LzTestManager.assertEquals ("12345678", text1.getText(), "LPP-4775: text1 
maxlength not working");  

  // Use invalid characters (not in the pattern)
  text1.setText('1abc23def4');
  LzTestManager.assertEquals ("abcdef", text1.getText(), "LPP-2209: text1 
pattern not working");  

}

// test2:  Tests multiline vs. non-multiline, as well as spacing
suite.test2 = function() {
  LzTestManager.assertEquals ('', view2.t1.getText(), "view2.t1.getText() 
failure");
  LzTestManager.assertEquals ('', view2.t2.getText(), "view2.t1.getText() 
failure");


  // Determine the spacing and make sure it is constant
  var xspacing = 0;
  var yspacing = 0;
  var wlast = view2.t2.getTextWidth();
  var hlast = view2.t2.getTextHeight();
  var t = '';
  for (var i=0; i<20; i++) {
    t = t + '*';
    view2.t1.addText ('*');
    view2.t2.addText ('*');
    LzTestManager.assertEquals (t, view2.t1.getText(), "view2.t1.getText() 
failure (2)");
    LzTestManager.assertEquals (t, view2.t2.getText(), "view2.t1.getText() 
failure (2)");

    // I guess this is a feature. getTextWidth() doesn't respect multiline
    LzTestManager.assertEquals (view2.t1.getTextWidth(), 
view2.t2.getTextWidth(), "getTextWidth do not match");

    // Make sure spacing is consistent
    /* Update, JC: getTextWidth() also measures the space before the first 
character, which wasn't accounted for
    in the test. */
    if (i != 0 && wlast != view2.t2.getTextWidth()) { // Wait until there's 
more than one character
      if (i == 1){
        xspacing = view2.t2.getTextWidth() - wlast;
      }
      LzTestManager.assertEquals (xspacing, (view2.t2.getTextWidth()-wlast), 
"xspacing error at character " + i);
    }

    if (hlast != view2.t2.getTextHeight()) {
      if (yspacing == 0)
        yspacing = view2.t2.getTextHeight() - hlast;
      LzTestManager.assertEquals (yspacing, (view2.t2.getTextHeight()-hlast), 
"yspacing error at character " + i);
    }

    wlast = view2.t2.getTextWidth();
    hlast = view2.t2.getTextHeight();
  }


  // Change the state of multiline and see what happens
  LzTestManager.assertEquals (false, view2.t1.getAttribute('multiline'), 
"view2.t1.multiline failure");
  LzTestManager.assertEquals (true, view2.t2.getAttribute('multiline'), 
"view2.t2.multiline failure");

  var w1 = view2.t1.getTextWidth();
  var h1 = view2.t1.getTextHeight();
  var w2 = view2.t2.getTextWidth();
  var h2 = view2.t2.getTextHeight();

  view2.t1.setMultiline(true);
  view2.t2.setMultiline(false);

  var w3 = view2.t1.getTextWidth();
  var h3 = view2.t1.getTextHeight();
  var w4 = view2.t2.getTextWidth();
  var h4 = view2.t2.getTextHeight();

  LzTestManager.assertEquals (true, view2.t1.getAttribute('multiline'), 
"view2.t1.multiline failure (2)");
  LzTestManager.assertEquals (false, view2.t2.getAttribute('multiline'), 
"view2.t2.multiline failure (2)");

  // width should not change, but height should change
  LzTestManager.assertEquals (w1, w3, "view2.t1.multiline switch width 
failure");
  LzTestManager.assertEquals (w2, w4, "view2.t2.multiline switch width 
failure");
  LzTestManager.assertEquals (h1, h3, "view2.t1.multiline switch height 
failure");
  LzTestManager.assertEquals (h1, h4, "view2.t2.multiline switch height 
failure");


  //Debug.format ("Before: %dx%d.  After:%dx%d\n", w1, h1, 
view2.t1.getTextWidth(), view2.t1.getTextHeight());
  //Debug.format ("Before: %dx%d.  After:%dx%d\n", w2, h2, 
view2.t2.getTextWidth(), view2.t2.getTextHeight());

  LzTestManager.assertEquals (true, view2.t1.getAttribute('multiline'), 
"view2.t1.multiline failure (2)");
  LzTestManager.assertEquals (false, view2.t2.getAttribute('multiline'), 
"view2.t2.multiline failure (2)");

}

// test3:  Test methods
suite.test3 = function() {
  // setResize()
  text3.setText ("1");
  var w = text3.getWidth();
  var h = text3.getHeight();

  text3.setResize (false);
  text3.addText ("2");
  LzTestManager.assertEquals (w, text3.getWidth(), "text3.getTextWidth() 
failure");
  LzTestManager.assertEquals (h, text3.getHeight(), "text3.getTextHeight() 
failure");
  LzTestManager.assertTrue (text3.getTextWidth() != text3.getWidth());

  text3.setResize (true);
  text3.addText ("3");
  LzTestManager.assertTrue (text3.getTextWidth() == text3.getWidth());

  // clearText ()
  LzTestManager.assertEquals ('123', text3.getText(),  "text3.getText() 
failure");  
  text3.clearText();
  LzTestManager.assertEquals ('', text3.getText(),  "text3.getText() failure 
(2)");  
  /* This doesn't pad the text if there's no text to pad, so we need to set the 
text and then
  find the size of the pre-padding. */
  var prew = 0;
  text3.setText('*');
  var t3w1 = text3.getTextWidth();
  text3.setText('**');
  var t3w2 = text3.getTextWidth() - t3w1;
  text3.setText('');
  LzTestManager.assertEquals (text3.sprite.PAD_TEXTWIDTH, t3w1 - t3w2,  
"text3.getTextWidth() failure (2)");  
  LzTestManager.assertEquals (0, text3.getTextHeight(),  "text3.getTextHeight() 
failure (2)");  

  // setText () (special characters)
  text3.setText ("<>");  // Works ok but not displayed
  LzTestManager.assertEquals ("<>", text3.getText(),  "text3.getText() failure 
(3)");    
  // escapeText ()
  LzTestManager.assertEquals ('', text3.escapeText(''),  "text3.escapeText() 
failure");  
  LzTestManager.assertEquals ('&', text3.escapeText('&'),  "text3.escapeText() 
& failure");  
  LzTestManager.assertEquals ("\\", text3.escapeText("\\"),  
'text3.escapeText() backslash failure');  
  LzTestManager.assertEquals ("\"", text3.escapeText("\""),  
'text3.escapeText() doublequote failure');  
  LzTestManager.assertEquals ("123", text3.escapeText("123"),  
'text3.escapeText() 123 failure');  
  LzTestManager.assertEquals ('&lt;', text3.escapeText('<'),  
"text3.escapeText() < failure");  
  LzTestManager.assertEquals ('&gt;', text3.escapeText('>'),  
"text3.escapeText() > failure");  
  LzTestManager.assertEquals ('&gt;&lt;', text3.escapeText('><'),  
"text3.escapeText() >< failure");  

  text3.setText ("&\\\"<>");
  LzTestManager.assertEquals ("&\\\"&lt;&gt;", text3.escapeText(),  
"text3.escapeText() string failure");  
}

// test4:  Test selection methods
suite.test4 = function() {
  // Check initial values
  seltest("initial value", text4, -1, -1);
  seltest("initial value", text4ml, -1, -1);

  // Set selection on an empty string
  text4.setSelection(1,1);
  text4ml.setSelection(1,1);
  seltest("empty string", text4, -1, -1);
  seltest("empty string", text4ml, 0, 0);  // I'm a bit surprised by this

  text4.setText (" 123 ");
  LzTestManager.assertEquals (' 123 ', text4.getText(),  "text4.getText() 
failure");  

  LzTestManager.assertEquals (-1, text4.getSelectionSize(),  
"text4.getSelectionSize() failure");    
  LzTestManager.assertEquals (-1, text4.getSelectionPosition(),  
"text4.getSelectionPosition() failure");    

  text4.setSelection (0);  // No selection, just position
  LzTestManager.assertEquals (0, text4.getSelectionSize(),  
"text4.getSelectionSize() failure (2)");    
  LzTestManager.assertEquals (0, text4.getSelectionPosition(),  
"text4.getSelectionPosition() failure (2");    

  text4.setSelection (1);  // No selection, just position
  LzTestManager.assertEquals (0, text4.getSelectionSize(),  
"text4.getSelectionSize() failure (3)");    
  LzTestManager.assertEquals (1, text4.getSelectionPosition(),  
"text4.getSelectionPosition() failure (3)");    

  text4.setSelection (9999);  // No selection, just position
  LzTestManager.assertEquals (0, text4.getSelectionSize(),  
"text4.getSelectionSize() failure (4)");    
  LzTestManager.assertEquals (text4.getText().length, 
text4.getSelectionPosition(),  "text4.getSelectionPosition() failure (4)");    


  text4.setSelection (0, 2);
  LzTestManager.assertEquals (2, text4.getSelectionSize(),  
"text4.getSelectionSize() failure (5)");    
  LzTestManager.assertEquals (0, text4.getSelectionPosition(),  
"text4.getSelectionPosition() failure (5)");    

  // Reverse selection
  text4.setSelection (2, 1);
  seltest("reverse selection", text4, 1, 1);


  if ($dhtml) {
      text4ml.setText('\r\n01234\r\n\r\n567890123456789\r\n')
  } else {
      text4ml.setText('\n01234\n\n567890123456789\n')
  }

  text4ml.setSelection(5, 14);
  LzTestManager.assertEquals (9, text4ml.getSelectionSize(),  
"text4ml.getSelectionSize() failure (6)");    
  LzTestManager.assertEquals (5, text4ml.getSelectionPosition(),  
"text4ml.getSelectionPosition() failure (6)");    
  text4ml.setSelection(6, 9);
  LzTestManager.assertEquals (3, text4ml.getSelectionSize(),  
"text4ml.getSelectionSize() failure (7)");    
  LzTestManager.assertEquals (6, text4ml.getSelectionPosition(),  
"text4ml.getSelectionPosition() failure (7)");    
  text4ml.setSelection(5, 8);
  LzTestManager.assertEquals (3, text4ml.getSelectionSize(),  
"text4ml.getSelectionSize() failure (8)");    
  LzTestManager.assertEquals (5, text4ml.getSelectionPosition(),  
"text4ml.getSelectionPosition() failure (8)");    

  // Reverse selection
  text4ml.setSelection (2, 1);
  seltest("reverse selection", text4ml, 1, 1);

  // Single line
  text4ml.setText('Hello World');
  seltest("single line", text4ml, 0, 0);

/*
  text4.setText ("     ");  // Note: The user cannot select a string of spaces
  text4.setSelection (0, 4);
  text4.setSelectable(true);
  text4.setText ("123");
*/
}

// test5:  Test scroll methods
suite.test5 = function() {

  // Single line so scrolling doesn't do anything
  LzTestManager.assertEquals (1, view5.t1.getScroll(),  "view5.t1.getScroll() 
failure");    
  view5.t1.setScroll (2);
  LzTestManager.assertEquals (1, view5.t1.getScroll(),  "view5.t1.getScroll() 
failure (2)");    

  // Count the number of lines in t2
  var txt = view5.t2.getText ();
  
  var lines = 0;
  var yspacing = 0;
  for (var i=0; i<txt.length; i++) {
    view5.t2.setText (txt.substr(0, i+1));
    var y = view5.t2.getTextHeight();
    if (yspacing == 0)
      yspacing = y;
    if (y != yspacing) {
      lines++;
      yspacing = y;
    }
  }

  LzTestManager.assertEquals (1, view5.t1.getMaxScroll(),  
"view5.t1.getMaxScroll() failure");    
  LzTestManager.assertEquals (lines, view5.t2.getMaxScroll(),  
"view5.t2.getMaxScroll() failure");    

  // Nothing else an automated test can verify
  // There is no getXScroll, getyScroll methods
  //view5.t1.setHScroll(10);
  //view5.t2.setHScroll(10);
  
  //Debug.write(view5.t1.getMaxScroll() + " and " + view5.t2.getMaxScroll());
}

// test6:  HTML Markup
suite.test6 = function() {
  var s1 = '<a href="http://www.openlaszlo.org";>Link</a>';
  view6.t1.setText(s1);
  view6.t2.setText(s1);
  LzTestManager.assertEquals (s1, view6.t1.getText(),  "view6.t1.getText() 
failure");    
  LzTestManager.assertEquals (s1, view6.t2.getText(),  "view6.t2.getText() 
failure");    
  view6.t1.setText('openLaszlo');
  var w = view6.t1.getTextWidth();
  var h = view6.t1.getTextHeight();

  var s2 = 'open<b>Laszlo</b>';
  view6.t1.setText(s2);
  view6.t2.setText(s2);
  LzTestManager.assertEquals (s2, view6.t1.getText(),  "view6.t1.getText() 
failure (2)");    
  LzTestManager.assertEquals (s2, view6.t2.getText(),  "view6.t2.getText() 
failure (2)");    
  LzTestManager.assertTrue (view6.t1.getTextWidth()>w,  
"view6.t1.getTextWidth() bold failure");     
  LzTestManager.assertTrue (view6.t2.getTextWidth()>w,  
"view6.t2.getTextWidth() bold failure");     

  var s3 = 'open<i>Laszlo</i>';
  view6.t1.setText(s3);
  view6.t2.setText(s3);
  LzTestManager.assertEquals (s3, view6.t1.getText(),  "view6.t1.getText() 
failure (3)");    
  LzTestManager.assertEquals (s3, view6.t2.getText(),  "view6.t2.getText() 
failure (3)");    

  LzTestManager.assertEquals (w, view6.t1.getTextWidth(),  
"view6.t1.getTextWidth() italic failure");     
  LzTestManager.assertEquals (w, view6.t2.getTextWidth(),  
"view6.t2.getTextWidth() italic failure");     

  var s4 = 'open<u>Laszlo</u>';
  view6.t1.setText(s4);
  view6.t2.setText(s4);
  LzTestManager.assertEquals (s4, view6.t1.getText(),  "view6.t1.getText() 
failure (4)");    
  LzTestManager.assertEquals (s4, view6.t2.getText(),  "view6.t2.getText() 
failure (4)");    

  LzTestManager.assertEquals (w, view6.t1.getTextWidth(),  
"view6.t1.getTextWidth() underline failure");
  LzTestManager.assertEquals (h, view6.t1.getTextHeight(),  
"view6.t1.getTextHeight() underline failure");
  LzTestManager.assertEquals (w, view6.t2.getTextWidth(),  
"view6.t2.getTextWidth() underline failure");
  LzTestManager.assertEquals (h, view6.t2.getTextHeight(),  "LPP-4651: 
view6.t2.getTextHeight() underline failure");

  var s5 = 'open<p>Laszlo</p>';
  view6.t1.setText(s5);
  view6.t2.setText(s5);
  LzTestManager.assertEquals (s5, view6.t1.getText(),  "view6.t1.getText() 
failure (5)");    
  LzTestManager.assertEquals (s5, view6.t2.getText(),  "view6.t2.getText() 
failure (5)");    

  LzTestManager.assertEquals (w, view6.t1.getTextWidth(),  
"view6.t1.getTextWidth() <p> failure");
  LzTestManager.assertEquals (h, view6.t1.getTextHeight(),  
"view6.t1.getTextHeight() <p> failure");
  LzTestManager.assertEquals (w, view6.t2.getTextWidth(),  
"view6.t2.getTextWidth() <p> failure");
  LzTestManager.assertTrue (view6.t2.getTextHeight() > h, 
"view6.t2.getTextHeight() <p> failure");


  var s6 = 'open<br/><br/>Laszlo';
  view6.t1.setText(s6);
  view6.t2.setText(s6);
  LzTestManager.assertEquals (s6, view6.t1.getText(),  "view6.t1.getText() 
failure (6)");    
  LzTestManager.assertEquals (s6, view6.t2.getText(),  "view6.t2.getText() 
failure (6)");    

  LzTestManager.assertEquals (w, view6.t1.getTextWidth(),  
"view6.t1.getTextWidth() <br> failure");
  LzTestManager.assertEquals (h, view6.t1.getTextHeight(),  
"view6.t1.getTextHeight() <br> failure");
  LzTestManager.assertEquals (w, view6.t2.getTextWidth(),  "LPP-2214: 
view6.t2.getTextWidth() <br> failure");
  LzTestManager.assertEquals (h*3, view6.t2.getTextHeight(),  "LPP-4651: 
view6.t2.getTextHeight() <br> failure");

  var s7 = 'open<img src="10x10.gif"/>Laszlo';
  view6.t1.setText(s7);
  view6.t2.setText(s7);
  LzTestManager.assertEquals (s7, view6.t1.getText(),  "view6.t1.getText() 
failure (7)");
  LzTestManager.assertEquals (s7, view6.t2.getText(),  "view6.t2.getText() 
failure (7)");

  LzTestManager.assertTrue (view6.t1.getTextWidth() > w, 
"view6.t1.getTextWidth() <img> failure");
  LzTestManager.assertTrue (view6.t2.getTextWidth() > w, 
"view6.t2.getTextWidth() <img> failure");

  //Debug.format ("tw=%d, th=%d w=%d, h=%d\n", view6.t2.getTextWidth(), 
view6.t2.getTextHeight(), view6.t2.getWidth(), view6.t2.getHeight());
}

// test7:  Accessibility
suite.test7 = function() {
  var w = text7.getTextWidth();

  var s1 = 'open<img alt="alt tag" src="na"/>Laszlo';
  text7.setWidth(s1);
  LzTestManager.assertEquals ("openLaszlo", text7.getText(), 'text7.getText() 
failure');

  LzTestManager.assertFalse (w == text7.getTextWidth(), 'LPP-2215: alt tag 
appears to be ignored');
}

// test8: x-stacking of text/input text
suite.test8 = function() {
  LzTestManager.assertEquals (view8.v1.getWidth(), view8.v2.getWidth(),  
"view8.v1.getWidth() failure");
  LzTestManager.assertTrue (view8.v3.getWidth() < view8.v1.getWidth(), 
"view8.v3.getWidth() < view8.v1.getWidth() failure");

  var w1 = view8.v1.t1.getTextWidth() + view8.v1.t2.getTextWidth();
  var w2 = view8.v2.t1.getTextWidth() + view8.v2.t2.getTextWidth();
  LzTestManager.assertEquals (w1, w2, "view8.v1, view8.v2 text width failure");
  LzTestManager.assertTrue (view8.v3.t1.getTextWidth() < w1, "view8.v1, 
view8.v3 text width failure");

  LzTestManager.assertEquals (view8.v1.t1.getTextHeight(), 
view8.v1.t2.getTextHeight(), "view8.v1 getTextHeight failure");
  LzTestManager.assertEquals (view8.v2.t1.getTextHeight(), 
view8.v2.t2.getTextHeight(), "view8.v2 getTextHeight failure");
  LzTestManager.assertEquals (view8.v1.t1.getTextHeight(), 
view8.v2.t1.getTextHeight(), "view8.v1, view8.v2 getTextHeight failure");
  LzTestManager.assertEquals (view8.v1.t1.getTextHeight(), 
view8.v3.t1.getTextHeight(), "view8.v1, view8.v3 getTextHeight failure");

}

  
// test9: Font and size
suite.test9 = function() {
  LzTestManager.assertEquals (view9.t1.getWidth(), view9.t2.getWidth(), "view9 
width failure");
  LzTestManager.assertEquals (view9.t1.getWidth(), view9.t3.getWidth(), "view9 
width failure (2)");
  LzTestManager.assertEquals (view9.t1.getHeight(), view9.t2.getHeight(), 
"view9 height failure");
  LzTestManager.assertEquals (view9.t1.getHeight(), view9.t3.getHeight(), 
"view9 height failure (2)");

  LzTestManager.assertEquals (view9.t1.getTextWidth(), view9.t2.getTextWidth(), 
"view9 textwidth failure");
  LzTestManager.assertEquals (view9.t1.getTextWidth(), view9.t3.getTextWidth(), 
"view9 textwidth failure (2)");
  LzTestManager.assertEquals (view9.t1.getTextHeight(), 
view9.t2.getTextHeight(), "view9 textheight failure");
  LzTestManager.assertEquals (view9.t1.getTextHeight(), 
view9.t3.getTextHeight(), "view9 textheight failure (2)");

  //NOTE: These tests use hard-wired numbers based on the font (from trunk)
  LzTestManager.assertEquals (65, view9.t1.getTextWidth(), "view9 font-specific 
textwidth failure");
  LzTestManager.assertEquals (17, view9.t1.getTextHeight(), "view9 
font-specific textheight failure");

  LzTestManager.assertEquals (127, view9.t4.getTextWidth(), "view9.t4 
font-specific textwidth failure");
  LzTestManager.assertEquals (35, view9.t4.getTextHeight(), "view9.t4 
font-specific textheight failure");

//  view9.t4.clearText();
//  for (var i=0; i<12; i++) {
//    view9.t4.addText ('*');
//    Debug.format ("%d: %d %d\n", i, view9.t4.getTextWidth(), 
view9.t4.getTextHeight());
//  }
}


suite.addTest(suite.test1);
suite.addTest(suite.test2);
suite.addTest(suite.test3);
suite.addTest(suite.test4);
suite.addTest(suite.test5);
suite.addTest(suite.test6);
suite.addTest(suite.test7);
suite.addTest(suite.test8);
suite.addTest(suite.test9);



]]>
</script>


</canvas>
<!-- 
/* X_LZ_COPYRIGHT_BEGIN ***************************************************
* Copyright 2007 Laszlo Systems, Inc.  All Rights Reserved.          *
* Use is subject to license terms.                                        *
* X_LZ_COPYRIGHT_END ******************************************************/
-->

Reply via email to