layer at (0,0) size 800x600
  RenderView at (0,0) size 800x600
layer at (0,0) size 800x600
  RenderBlock {HTML} at (0,0) size 800x600
    RenderBody {BODY} at (8,8) size 784x584
      RenderText {#text} at (0,0) size 270x19
        text run at (0,0) width 270: "This tests the -webkit-line-clamp property"
      RenderBR {BR} at (269,15) size 1x0
      RenderBR {BR} at (0,20) size 0x19
      RenderText {#text} at (102,121) size 4x19
        text run at (102,121) width 4: " "
      RenderText {#text} at (208,121) size 4x19
        text run at (208,121) width 4: " "
      RenderText {#text} at (314,121) size 4x19
        text run at (314,121) width 4: " "
      RenderText {#text} at (420,121) size 4x19
        text run at (420,121) width 4: " "
      RenderText {#text} at (526,121) size 4x19
        text run at (526,121) width 4: " "
      RenderText {#text} at (632,121) size 4x19
        text run at (632,121) width 4: " "
      RenderText {#text} at (0,0) size 0x0
      RenderText {#text} at (102,263) size 4x19
        text run at (102,263) width 4: " "
      RenderText {#text} at (208,263) size 4x19
        text run at (208,263) width 4: " "
      RenderText {#text} at (0,0) size 0x0
layer at (8,63) size 102x81 clip at (9,64) size 100x79 scrollHeight 159
  RenderDeprecatedFlexibleBox {DIV} at (0,55) size 102x81 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x79
      RenderText {#text} at (0,0) size 83x159
        text run at (0,0) width 30: "50%"
        text run at (0,20) width 69: "truncation."
        text run at (0,40) width 63: "This is an"
        text run at (0,60) width 72: "example of"
        text run at (0,80) width 51: "ellipsis-"
        text run at (0,100) width 83: "truncation of"
        text run at (0,120) width 64: "multi-line"
        text run at (0,140) width 28: "text."
      RenderInline {A} at (0,0) size 36x19 [color=#0000EE]
        RenderText {#text} at (27,140) size 36x19
          text run at (27,140) width 36: "More"
      RenderText {#text} at (0,0) size 0x0
layer at (114,123) size 102x21 clip at (115,124) size 100x19 scrollHeight 119
  RenderDeprecatedFlexibleBox {DIV} at (106,115) size 102x21 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x19
      RenderText {#text} at (0,0) size 100x119
        text run at (0,0) width 95: "0% truncation."
        text run at (0,20) width 86: "This does the"
        text run at (0,40) width 100: "most truncation"
        text run at (0,60) width 57: "possible,"
        text run at (0,80) width 94: "truncating to 1"
        text run at (0,100) width 28: "line."
      RenderInline {A} at (0,0) size 36x19 [color=#0000EE]
        RenderText {#text} at (27,100) size 36x19
          text run at (27,100) width 36: "More"
      RenderText {#text} at (0,0) size 0x0
layer at (220,103) size 102x41 clip at (221,104) size 100x39 scrollHeight 119
  RenderDeprecatedFlexibleBox {DIV} at (212,95) size 102x41 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x39
      RenderText {#text} at (0,0) size 94x119
        text run at (0,0) width 51: "2 lines. "
        text run at (50,0) width 44: "This is"
        text run at (0,20) width 91: "an example of"
        text run at (0,40) width 51: "ellipsis-"
        text run at (0,60) width 83: "truncation of"
        text run at (0,80) width 64: "multi-line"
        text run at (0,100) width 28: "text."
      RenderInline {A} at (0,0) size 36x19 [color=#0000EE]
        RenderText {#text} at (27,100) size 36x19
          text run at (27,100) width 36: "More"
      RenderText {#text} at (0,0) size 0x0
layer at (326,83) size 102x61 clip at (327,84) size 100x59 scrollHeight 179
  RenderDeprecatedFlexibleBox {DIV} at (318,75) size 102x61 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x59
      RenderText {#text} at (0,0) size 85x179
        text run at (0,0) width 72: "Backwards"
        text run at (0,20) width 72: "compatible"
        text run at (0,40) width 73: "truncation. "
        text run at (72,40) width 9: "3"
        text run at (0,60) width 74: "lines on the"
        text run at (0,80) width 85: "latest version"
        text run at (0,100) width 75: "of WebKit. "
        text run at (74,100) width 9: "1"
        text run at (0,120) width 81: "line on older"
        text run at (0,140) width 71: "versions of"
        text run at (0,160) width 54: "WebKit."
      RenderInline {A} at (0,0) size 36x19 [color=#0000EE]
        RenderText {#text} at (53,160) size 36x19
          text run at (53,160) width 36: "More"
      RenderText {#text} at (0,0) size 0x0
layer at (432,103) size 102x41 clip at (433,104) size 100x39 scrollHeight 159
  RenderDeprecatedFlexibleBox {DIV} at (424,95) size 102x41 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x39
      RenderText {#text} at (0,0) size 96x159
        text run at (0,0) width 30: "30%"
        text run at (0,20) width 73: "truncation. "
        text run at (72,20) width 21: "No"
        text run at (0,40) width 96: "link at the end."
        text run at (0,60) width 63: "This is an"
        text run at (0,80) width 72: "example of"
        text run at (0,100) width 51: "ellipsis-"
        text run at (0,120) width 83: "truncation of"
        text run at (0,140) width 96: "multi-line text."
layer at (538,83) size 102x61 clip at (539,84) size 100x59 scrollHeight 119
  RenderDeprecatedFlexibleBox {DIV} at (530,75) size 102x61 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x59
      RenderText {#text} at (0,0) size 99x119
        text run at (0,0) width 51: "3 lines. "
        text run at (50,0) width 49: "No link"
        text run at (0,20) width 71: "at the end. "
        text run at (70,20) width 29: "This"
        text run at (0,40) width 88: "is an example"
        text run at (0,60) width 68: "of ellipsis-"
        text run at (0,80) width 83: "truncation of"
        text run at (0,100) width 96: "multi-line text."
layer at (644,48) size 102x102 clip at (645,49) size 100x100
  RenderDeprecatedFlexibleBox {DIV} at (636,40) size 102x102 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x100
      RenderText {#text} at (0,0) size 94x99
        text run at (0,0) width 51: "0 lines. "
        text run at (50,0) width 44: "This is"
        text run at (0,20) width 64: "an invalid"
        text run at (0,40) width 67: "value for -"
        text run at (0,60) width 79: "webkit-line-"
        text run at (0,80) width 44: "clamp."
layer at (8,190) size 102x102 clip at (9,191) size 100x100
  RenderDeprecatedFlexibleBox {DIV} at (0,182) size 102x102 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x100
      RenderText {#text} at (0,0) size 99x99
        text run at (0,0) width 56: "-1 lines. "
        text run at (55,0) width 44: "This is"
        text run at (0,20) width 64: "an invalid"
        text run at (0,40) width 67: "value for -"
        text run at (0,60) width 79: "webkit-line-"
        text run at (0,80) width 44: "clamp."
layer at (114,210) size 102x82 clip at (115,211) size 100x80
  RenderDeprecatedFlexibleBox {DIV} at (106,202) size 102x82 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x80
      RenderText {#text} at (0,0) size 97x79
        text run at (0,0) width 35: "-1%. "
        text run at (34,0) width 63: "This is an"
        text run at (0,20) width 84: "invalid value"
        text run at (0,40) width 77: "for -webkit-"
        text run at (0,60) width 73: "line-clamp."
layer at (220,150) size 102x142 clip at (221,151) size 100x140
  RenderDeprecatedFlexibleBox {DIV} at (212,142) size 102x142 [border: (1px solid #808080)]
    RenderBlock (anonymous) at (1,1) size 100x140
      RenderText {#text} at (0,0) size 99x139
        text run at (0,0) width 38: "150%"
        text run at (0,20) width 69: "truncation."
        text run at (0,40) width 86: "This does the"
        text run at (0,60) width 99: "least truncation"
        text run at (0,80) width 57: "possible,"
        text run at (0,100) width 65: "truncating"
        text run at (0,120) width 53: "nothing."
