firewatir 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/MozillaBaseElement.rb +1778 -0
  2. data/container.rb +889 -0
  3. data/firewatir/exceptions.rb +44 -0
  4. data/firewatir/testUnitAddons.rb +8 -0
  5. data/firewatir.rb +1130 -0
  6. data/htmlelements.rb +2277 -0
  7. data/unittests/attach_to_new_window_test.rb +34 -0
  8. data/unittests/bug_fixes_test.rb +188 -0
  9. data/unittests/buttons_test.rb +215 -0
  10. data/unittests/buttons_xpath_test.rb +87 -0
  11. data/unittests/checkbox_test.rb +154 -0
  12. data/unittests/checkbox_xpath_test.rb +107 -0
  13. data/unittests/div_test.rb +274 -0
  14. data/unittests/filefield_test.rb +45 -0
  15. data/unittests/filefield_xpath_test.rb +35 -0
  16. data/unittests/form_test.rb +307 -0
  17. data/unittests/frame_test.rb +151 -0
  18. data/unittests/hidden_test.rb +85 -0
  19. data/unittests/hidden_xpath_test.rb +72 -0
  20. data/unittests/html/JavascriptClick.html +42 -0
  21. data/unittests/html/blankpage.html +12 -0
  22. data/unittests/html/buttons1.html +61 -0
  23. data/unittests/html/checkboxes1.html +71 -0
  24. data/unittests/html/complex_table.html +36 -0
  25. data/unittests/html/cssTest.html +42 -0
  26. data/unittests/html/div.html +72 -0
  27. data/unittests/html/div_xml.html +21 -0
  28. data/unittests/html/fileupload.html +45 -0
  29. data/unittests/html/formTest1.html +39 -0
  30. data/unittests/html/forms2.html +45 -0
  31. data/unittests/html/forms3.html +132 -0
  32. data/unittests/html/forms4.html +27 -0
  33. data/unittests/html/frame_buttons.html +4 -0
  34. data/unittests/html/frame_links.html +4 -0
  35. data/unittests/html/frame_multi.html +5 -0
  36. data/unittests/html/iframeTest.html +15 -0
  37. data/unittests/html/iframeTest1.html +14 -0
  38. data/unittests/html/iframeTest2.html +6 -0
  39. data/unittests/html/images/1.gif +0 -0
  40. data/unittests/html/images/2.GIF +0 -0
  41. data/unittests/html/images/3.GIF +0 -0
  42. data/unittests/html/images/button.jpg +0 -0
  43. data/unittests/html/images/circle.jpg +0 -0
  44. data/unittests/html/images/minus.GIF +0 -0
  45. data/unittests/html/images/originaltriangle.jpg +0 -0
  46. data/unittests/html/images/plus.gif +0 -0
  47. data/unittests/html/images/square.jpg +0 -0
  48. data/unittests/html/images/triangle.jpg +0 -0
  49. data/unittests/html/images1.html +67 -0
  50. data/unittests/html/javascriptevents.html +35 -0
  51. data/unittests/html/link_pass.html +11 -0
  52. data/unittests/html/links1.html +42 -0
  53. data/unittests/html/links2.html +11 -0
  54. data/unittests/html/modal_dialog.html +8 -0
  55. data/unittests/html/modal_dialog_launcher.html +12 -0
  56. data/unittests/html/nestedFrames.html +6 -0
  57. data/unittests/html/new_browser.html +17 -0
  58. data/unittests/html/pass.html +10 -0
  59. data/unittests/html/popups1.html +60 -0
  60. data/unittests/html/pre.html +28 -0
  61. data/unittests/html/radioButtons1.html +71 -0
  62. data/unittests/html/redirect.html +10 -0
  63. data/unittests/html/redirect1.html +9 -0
  64. data/unittests/html/redirect2.html +9 -0
  65. data/unittests/html/redirect3.html +9 -0
  66. data/unittests/html/select_tealeaf.html +54 -0
  67. data/unittests/html/selectboxes1.html +55 -0
  68. data/unittests/html/simple_table.html +26 -0
  69. data/unittests/html/simple_table_buttons.html +104 -0
  70. data/unittests/html/simple_table_columns.html +74 -0
  71. data/unittests/html/table1.html +165 -0
  72. data/unittests/html/tableCell_using_xpath.html +19 -0
  73. data/unittests/html/textarea.html +30 -0
  74. data/unittests/html/textfields1.html +62 -0
  75. data/unittests/html/textsearch.html +44 -0
  76. data/unittests/images_test.rb +204 -0
  77. data/unittests/images_xpath_test.rb +118 -0
  78. data/unittests/iostring.rb +30 -0
  79. data/unittests/iostring_test.rb +48 -0
  80. data/unittests/javascript_test.rb +71 -0
  81. data/unittests/links_test.rb +230 -0
  82. data/unittests/links_xpath_test.rb +79 -0
  83. data/unittests/mozilla_all_tests.rb +18 -0
  84. data/unittests/pre_test.rb +74 -0
  85. data/unittests/radios_test.rb +166 -0
  86. data/unittests/radios_xpath_test.rb +101 -0
  87. data/unittests/redirect_test.rb +40 -0
  88. data/unittests/selectbox_test.rb +141 -0
  89. data/unittests/selectbox_xpath_test.rb +127 -0
  90. data/unittests/setup.rb +35 -0
  91. data/unittests/table_test.rb +372 -0
  92. data/unittests/table_xpath_test.rb +184 -0
  93. data/unittests/textfields_test.rb +230 -0
  94. data/unittests/textfields_xpath_test.rb +112 -0
  95. metadata +144 -0
@@ -0,0 +1,104 @@
1
+ <html>
2
+ <head>
3
+ <title>
4
+ simple table buttons
5
+ </title>
6
+ </head>
7
+ <body>
8
+
9
+ <input type = text name="confirmtext">
10
+ <table >
11
+ <tr>
12
+ <td> <input type = button value = "Click" id = "b1" onClick = "document.all.confirmtext.value = 'CLICK1';"><td>Click1 </td>
13
+ </tr>
14
+ <tr>
15
+ <td> <input type = button value = "Click" onClick = "document.all.confirmtext.value = 'CLICK2';"><td>Click2 </td>
16
+ </tr>
17
+ <tr>
18
+ <td> <input type = button value = "Click" onClick = "document.all.confirmtext.value = 'CLICK3';">
19
+ <input type = button value = "Click too" onClick = "document.all.confirmtext.value = 'CLICK TOO';">
20
+ <td>Click3</td>
21
+ </tr>
22
+ <tr>
23
+ <td> <input type = text value = "Im a text field" ></td>
24
+ </tr>
25
+
26
+
27
+ <tr>
28
+ <td>An input field and a button in the same cell<br> <input type = text name='same_cell' value = "Click ->" ><input type=button value = "Click To Change <-" onClick = "document.all.same_cell.value = '';" </td>
29
+ </tr>
30
+
31
+ </table>
32
+
33
+ This table has 3 images in each row. Each is a seperate cell
34
+ <table>
35
+ <tr>
36
+ <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
37
+ <tr>
38
+ <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
39
+ <tr>
40
+ <td><img src = images/1.gif><td><img src = images/2.gif><td><img src = images/3.gif>
41
+ </table>
42
+
43
+ This table has 3 images in each row. They are all in the same cell
44
+ <table>
45
+ <tr>
46
+ <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
47
+ <tr>
48
+ <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
49
+ <tr>
50
+ <td><img src = images/1.gif><img src = images/2.gif><img src = images/3.gif>
51
+ </table>
52
+
53
+
54
+ <style type="text/css">
55
+ div.hide { display: none; margin-left: auto; margin-right: auto; }
56
+ div.show { display: block; margin-left: auto; margin-right: auto; }
57
+
58
+ tr.hide { display: none; margin-left: auto; margin-right: auto; }
59
+ tr.show { display: block; margin-left: auto; margin-right: auto; }
60
+
61
+ </style>
62
+
63
+
64
+ <script language=javascript>
65
+
66
+ function expand_or_shrink_row( row ) {
67
+
68
+ which_row = 'r' + row;
69
+ which_image = 'i' + row;
70
+ if ( document.getElementById(which_row).className=='hide' ){
71
+ document.getElementById(which_row).className='show';
72
+ document.getElementById(which_image).src='images/minus.gif';
73
+
74
+ }
75
+ else {
76
+ document.getElementById(which_row).className='hide'
77
+ document.getElementById(which_image).src='images/plus.gif'
78
+ }
79
+
80
+ }
81
+
82
+ </script>
83
+
84
+ The table below can show or hide its rows. Click the + (or -) to show or hide the row
85
+ <table id=show_hide>
86
+ <tr><td><img id=i1 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("1")'>
87
+ <tr class = hide id=r1><td>Line 1
88
+ <tr><td><img id=i2 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("2")'>
89
+ <tr class = hide id=r2><td>Line 2
90
+ <tr><td><img id=i3 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("3")'>
91
+ <tr class = hide id=r3><td>Line 3
92
+ <tr><td><img id=i4 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("4")'>
93
+ <tr class = hide id=r4><td>Line 4
94
+ <tr><td><img id=i5 width=30 height=30 src = images/plus.gif onClick='javascript:expand_or_shrink_row("5")'>
95
+ <tr class = hide id=r5><td>Line 5
96
+ </table>
97
+
98
+
99
+
100
+
101
+
102
+ </body>
103
+
104
+ </html>
@@ -0,0 +1,74 @@
1
+ <html>
2
+ <head>
3
+ <title>Test page for testing column value extraction </title>
4
+ </head>
5
+ <body>
6
+ CVS Revision: "$Revision: 1.0 $"
7
+ <br>
8
+ <br>
9
+ <b>Test page for testing column value extraction</b>
10
+ <br>
11
+ <br>
12
+ Single Column
13
+ <table border="1">
14
+ <tr>
15
+ <td>R1C1</td>
16
+ </tr>
17
+ <tr>
18
+ <td>R2C1</td>
19
+ </tr>
20
+ <tr>
21
+ <td>R3C1</td>
22
+ </tr>
23
+ </table>
24
+ <br>
25
+ Multiple Column
26
+ <table border="1">
27
+ <tr>
28
+ <td>R1C1</td>
29
+ <td>R1C2</td>
30
+ <td>R1C3</td>
31
+ </tr>
32
+ <tr>
33
+ <td>R2C1</td>
34
+ <td>R2C2</td>
35
+ <td>R2C3</td>
36
+ </tr>
37
+ <tr>
38
+ <td>R3C1</td>
39
+ <td>R3C2</td>
40
+ <td>R3C3</td>
41
+ </tr>
42
+ </table>
43
+ <br>
44
+ Multiple Column With Jagged ColSpan
45
+ <table border="1">
46
+ <tr>
47
+ <td>R1C1</td>
48
+ <td>R1C2</td>
49
+ <td>R1C3</td>
50
+ </tr>
51
+ <tr>
52
+ <td colspan="2">R2C1</td>
53
+ <td>R2C2</td>
54
+ </tr>
55
+ <tr>
56
+ <td>R3C1</td>
57
+ <td>R3C2</td>
58
+ <td>R3C3</td>
59
+ </tr>
60
+ <tr>
61
+ <td colspan="3">R4C1</td>
62
+ </tr>
63
+ <tr>
64
+ <td rowspan="2">R5C1</td>
65
+ <td>R5C2</td>
66
+ <td>R5C3</td>
67
+ </tr>
68
+ <tr>
69
+ <td>R6C2</td>
70
+ <td>R6C3</td>
71
+ </tr>
72
+ </table>
73
+ </body>
74
+ </html>
@@ -0,0 +1,165 @@
1
+ <html>
2
+ <head>
3
+ <title>
4
+ Test page for Tables
5
+ </title>
6
+ </head>
7
+ <body>
8
+
9
+ <script language=javascript>
10
+
11
+ function addRow() {
12
+
13
+ var tbody = document.getElementById('t1' ).getElementsByTagName("TBODY")[0];
14
+
15
+ // Create a TR
16
+ var row = document.createElement("TR");
17
+ row.setAttribute("class", "normal");
18
+ row.setAttribute("border", "1");
19
+
20
+ for (j=0 ; j < document.getElementById('t1' ).rows[1].cells.length; j++) {
21
+ // Create a TD
22
+ var td = document.createElement("TD");
23
+ td.setAttribute("border","1");
24
+ td.innerHTML = "New Cell";
25
+
26
+ // Assign TD to TR and then assign TR to TBODY
27
+ row.appendChild(td);
28
+ }
29
+ tbody.appendChild(row);
30
+ }
31
+
32
+ </script>
33
+
34
+
35
+ CVS Revision: "$Revision: 1.0 $"
36
+ <br>
37
+ <br>
38
+ <table border="1" id='tblTest' cellspacing="3" cellpadding="6" class="TableClass">
39
+ <tr>
40
+ <td> Row 1 Col1</td>
41
+ <td> Row 1 Col2</td>
42
+ </tr> <tr>
43
+ <td> Row 2 Col1</td>
44
+ <td> Row 2 Col2</td>
45
+ </tr>
46
+ </table>
47
+
48
+
49
+ <br>
50
+ <br>
51
+ <table id= 't1'>
52
+ <Tr><td id=cell_with_colspan colspan=2>Table 2
53
+ <tr>
54
+ <td id=cell1> Row 1 Col1</td>
55
+ <td> Row 1 Col2</td>
56
+ </tr>
57
+ <tr id=row1>
58
+ <td> Row 2 Col1</td>
59
+ <td> Row 2 Col2</td>
60
+ </tr>
61
+ <tr>
62
+ <td> Row 3 Col1</td>
63
+ <td> Row 3 Col2</td>
64
+ </tr>
65
+ <tr>
66
+ <td> Row 4 Col1</td>
67
+ <td> Row 4 Col2</td>
68
+ </tr>
69
+ </table>
70
+ <br>
71
+ <input type=button value='add row' onClick='javascript:addRow()'>
72
+
73
+ <br>
74
+ <br>
75
+
76
+ The following has a nested table
77
+ <table id='t2' border=1>
78
+ <tr>
79
+ <td>
80
+ cell 1</td>
81
+ <td>
82
+ cell2</td>
83
+ </tr>
84
+ <tr>
85
+ <td>
86
+ <table><tr><td>nest1</td><td>nest2</td></tr></table>
87
+ </td>
88
+ <td>
89
+ Normal
90
+ </td>
91
+ </tr>
92
+ </table>
93
+ <br>
94
+ This table has 3 body tags.
95
+ <br><br>
96
+ <table id=body_test>
97
+ <THEAD>
98
+ <TR>
99
+ <TD>
100
+ This text is in the THEAD.
101
+ </TD>
102
+ </TR>
103
+ </THEAD>
104
+ <TBODY>
105
+ <TR>
106
+ <TD>
107
+ This text is in the FRST TBODY.
108
+ </TD>
109
+ </TR>
110
+ </TBODY>
111
+
112
+ <TBODY>
113
+ <TR>
114
+ <TD>
115
+ This text is in the SECOND TBODY.
116
+ </TD>
117
+ </TR>
118
+ <TR>
119
+ <TD>
120
+ This text is also in the SECOND TBODY.
121
+ </TD>
122
+ </TR>
123
+ </TBODY>
124
+
125
+ <TBODY>
126
+ <TR>
127
+ <TD>
128
+ This text is in the THIRD TBODY.
129
+ </TD>
130
+ </TR>
131
+ </TBODY>
132
+
133
+ </TABLE>
134
+
135
+ <table border="1" id=pic_table>
136
+ <tr>
137
+ <td> A picture is in the next cell</td>
138
+ <td><img src=images/circle.jpg></td>
139
+ </tr><tr>
140
+ <td> A link is in the next cell</td>
141
+ <td><a href = http://google.com>Google</a></td>
142
+ </tr>
143
+ </table>
144
+ Table to string test
145
+ <table border="1" id='tblTest1' cellspacing="3" cellpadding="6" class="TableClass">
146
+ <tr><td id=cellwithcolspan colspan=2>Table 3</td></tr>
147
+ <tr>
148
+ <td id=cell1> Row 1 Col1</td>
149
+ <td> Row 1 Col2</td>
150
+ </tr>
151
+ <tr id=row1>
152
+ <td> Row 2 Col1</td>
153
+ <td> Row 2 Col2</td>
154
+ </tr>
155
+ <tr>
156
+ <td> Row 3 Col1</td>
157
+ <td> Row 3 Col2</td>
158
+ </tr>
159
+ <tr>
160
+ <td> Row 4 Col1</td>
161
+ <td> Row 4 Col2</td>
162
+ </tr>
163
+ </table>
164
+ </body>
165
+ </html>
@@ -0,0 +1,19 @@
1
+ <html>
2
+ <head>
3
+ <title>Testing table cell using xpath.</title>
4
+ </head>
5
+ <body>
6
+ <table>
7
+ <tr>
8
+ <td colspan="1"><img src="images/square.jpg"> Table Cell with image of square.
9
+ </td>
10
+ <td colspan="2"><img src="images/triangle.jpg"> Table Cell with image of triangle.
11
+ </td>
12
+ <td colspan="3"><img src="images/circle.jpg"> Table Cell with image of circle.
13
+ </td>
14
+ <td colspan="4"><img src="images/button.jpg"> Table Cell with image of button.
15
+ </td>
16
+ </tr>
17
+ </table>
18
+ </body>
19
+ </html>
@@ -0,0 +1,30 @@
1
+
2
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3
+ <HTML>
4
+ <HEAD>
5
+ <title>TextArea-MultiLine</title>
6
+ </HEAD>
7
+ <body MS_POSITIONING="FlowLayout">
8
+
9
+ <form name="Form1" method="post" action="textArea.html" id="Form1">
10
+
11
+ <textarea name="txtMultiLine1" id="txtMultiLine1" style="height:152px;width:248px;">Hello World</textarea>
12
+ <textarea name="txtReadOnly" id="txtReadOnly" style="height:152px;width:248px;" readonly></textarea>
13
+ </form>
14
+ <form name="Form2" method="post" action="textArea.html" id="Form1">
15
+
16
+ <textarea name="txtMultiLine2" id="txtMultiLine2" style="height:152px;width:248px;">
17
+ IExplore.exe is at the top level; it is a small application that is instantiated when Internet Explorer is loaded. This executable application uses Internet Explorer components to perform the navigation, history maintenance, favorites maintenance, HTML parsing and rendering, and so on, while it supplies the toolbar and frame for the stand-alone browser. IExplorer.exe directly hosts the Shdocvw.dll component.
18
+ </textarea>
19
+ <textarea name="txtDisabled" id="txtDisabled" disabled>
20
+ Disabled here </textarea>
21
+ <form name="Form3" method="post" action="textArea.html" id="Form1">
22
+
23
+ <textarea name="txtMultiLine3" id="txtMultiLine3" style="height:152px;width:248px;">
24
+ Shdocvw.dll in turn hosts the Mshtml.dll component, as well as any other Active Document component (such as a Microsoft Office application) that can be loaded in place in the browser when the user navigates to a specific document type. Shdocvw.dll supplies the functionality associated with navigation, in-place linking, favorites and history management, and PICS support. This dynamic-link library (DLL) also exposes interfaces to its host to allow it to be hosted separately as an ActiveX control. The Shdocvw.dll component is more frequently referred to as the WebBrowser Control. In-place linking refers to the ability to click a link in the HTML of the loaded document and to load a new HTML document in the same instance of the WebBrowser Control. If only Mshtml.dll is being hosted, a click on the link results in a new instance of the browser.
25
+ </textarea>
26
+ </form>
27
+ </form>
28
+ </body>
29
+ </HTML>
30
+
@@ -0,0 +1,62 @@
1
+ <html>
2
+ <head>
3
+ <title>Test page for Text Fields </title>
4
+ </head>
5
+ <body>
6
+ CVS Revision: "$Revision: 1.0 $"
7
+ <script>
8
+ function addEvent(e) {
9
+ document.all.events_text.value = document.all.events_text.value + "\n" + e
10
+ }
11
+ </script>
12
+ <br>
13
+ <br>
14
+ <table>
15
+ <tr>
16
+ <td>
17
+ <input type="text" name="text1" value='Hello World' maxlength="500">number 1
18
+ <br>
19
+ <label for="text2">Label For this Field </label><input type="text" id="text2" value='goodbye all' maxlength="500">
20
+ <td>
21
+ These text fields are not in a form
22
+ <tr>
23
+ <td>
24
+ <input type="text" name="disabled" value="Cant enter text in me" disabled>
25
+ <td>
26
+ Disabled text box
27
+ <tr>
28
+ <td>
29
+ <input type="text" maxlength="400" name="readOnly" value="Cant enter text in me" readonly>
30
+ <br>
31
+ <label for="readOnly2" id="label2">Another Label (pointless- its a readonly box!) </label><input type="text" id="readOnly2" value="Cant enter text in me" readonly>
32
+ <td>
33
+ readonly text boxes
34
+ <form name="test1" method="get" action="pass.html">
35
+ <tr>
36
+ <td>
37
+ <input type="text" name="text1" value='Ruby'>
38
+ <td>
39
+ This is used in text1 in form test1
40
+ </form>
41
+ </tr>
42
+ </table>
43
+ These text fields are used to test :beforeText and :afterText
44
+ <br>
45
+ <input type="text" name="beforetest" value='Before Text Test'>This Text After
46
+ <br>
47
+ This Text Before<input type="text" name="aftertest" value='AfterText Test' title="This used to test :afterText">
48
+ <br>
49
+ <br>
50
+ This Field has javascript events in it <input type="text" name="events_tester" onKeyUp='javascript:addEvent("keyup")' onKeyDown='javascript:addEvent("keydown")'
51
+ onKeyPress='javascript:addEvent("keypress")'>
52
+ <br>
53
+ <textarea name="events_text" cols="20" rows="10"></textarea> <input type="button" onClick='document.all.events_text.value=""' value="Clear Events Box">
54
+ <br>
55
+ Password Fields
56
+ <br>
57
+ Password With Name<input type="password" name="password1">
58
+ <br>
59
+ <label for="password1">Password With ID ( the text here is a label for it )</label><input type="password" id="password1">
60
+ <div name="divvy">Div Text</div>
61
+ </body>
62
+ </html>
@@ -0,0 +1,44 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
+ <html>
3
+ <head>
4
+ </head>
5
+ <body>
6
+ To be, or not to be: that is the question:<br>
7
+ Whether 'tis nobler in the mind to suffer<br>
8
+ The slings and arrows of outrageous fortune,<br>
9
+ Or to take arms against a sea of troubles,<br>
10
+ And by opposing end them? To die: to sleep:<br>
11
+ No more; and by a sleep to say we end<br>
12
+ The heartache and the thousand natural shocks<br>
13
+ That flesh is heir to,--'t is a consummation<br>
14
+ Devoutly to be wish'd. To die, to sleep;<br>
15
+ To sleep: perchance to dream: ay, there's the rub:<br>
16
+ For in that sleep of death what dreams may come,<br>
17
+ When we have shuffled off this mortal coil,<br>
18
+ Must give us pause: there's the respect<br>
19
+ That makes calamity of so long life;<br>
20
+ For who would bear the whips and scorns of time,<br>
21
+ The oppressor's wrong, the proud man's contumely,<br>
22
+ The pangs of despised love, the law's delay,<br>
23
+ The insolence of office and the spurns<br>
24
+ That patient merit of the unworthy takes,<br>
25
+ When he himself might his quietus make<br>
26
+ With a bare bodkin? who would fardels bear,<br>
27
+ To grunt and sweat under a weary life,<br>
28
+ But that the dread of something after death,<br>
29
+ The undiscover'd country from whose bourn<br>
30
+ No traveller returns, puzzles the will<br>
31
+ And makes us rather bear those ills we have<br>
32
+ Than fly to others that we know not of?<br>
33
+ Thus conscience does make cowards of us all;<br>
34
+ And thus the native hue of resolution<br>
35
+ Is sicklied o'er with the pale cast of thought,<br>
36
+ And enterprises of great pith and moment<br>
37
+ With this regard their currents turn awry,<br>
38
+ And lose the name of action.<br>
39
+ <br>
40
+ Messages 42<br>
41
+ <br>
42
+ <br>
43
+ </body>
44
+ </html>