98be6d3a6ef92afc2f995c5f65a6598a6aa1a46a.svn-base 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <?php
  2. // -----------------------------------------------------------------------------
  3. // setup
  4. error_reporting(E_ALL);
  5. require_once('../simple_html_dom.php');
  6. $dom = new simple_html_dom;
  7. // -----------------------------------------------------------------------------
  8. // innertext test
  9. $str = <<<HTML
  10. <html>
  11. <head></head>
  12. <body>
  13. <br>
  14. <span>foo</span>
  15. </body>
  16. </html>
  17. HTML;
  18. $dom->load($str);
  19. assert($dom==$str);
  20. // -----------------------------------------------
  21. $str = <<<HTML
  22. <html>
  23. <head></head>
  24. <body>
  25. <br>
  26. <span>bar</span>
  27. </body>
  28. </html>
  29. HTML;
  30. $dom->load($str);
  31. $dom->find('span', 0)->innertext = 'bar';
  32. assert($dom==$str);
  33. // -----------------------------------------------
  34. $str = <<<HTML
  35. <html>
  36. <head>ok</head>
  37. <body>
  38. <br>
  39. <span>bar</span>
  40. </body>
  41. </html>
  42. HTML;
  43. $dom->load($str);
  44. $dom->find('head', 0)->innertext = 'ok';
  45. assert($dom==$str);
  46. // -----------------------------------------------
  47. $str = <<<HTML
  48. <b>foo</b>
  49. HTML;
  50. $dom->load($str);
  51. $e = $dom->find('b text', 0);
  52. assert($e->innertext=='foo');
  53. assert($e->outertext=='foo');
  54. $e->innertext = 'bar';
  55. assert($e->innertext=='bar');
  56. assert($e->outertext=='bar');
  57. $e = $dom->find('b', 0);
  58. assert($e->innertext=='bar');
  59. assert($e->outertext=='<b>bar</b>');
  60. // -----------------------------------------------------------------------------
  61. // outertext test
  62. $str = <<<HTML
  63. <table>
  64. <tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>
  65. <tr><td>1</td><td>2</td><td>3</td></tr>
  66. </table>
  67. HTML;
  68. $dom->load($str);
  69. assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>');
  70. assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>');
  71. // -----------------------------------------------
  72. $str = <<<HTML
  73. <table><tr><th>Head1</th><th>Head2</th><th>Head3</th><tr><td>1</td><td>2</td><td>3</td></table>
  74. HTML;
  75. $dom->load($str);
  76. assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th>');
  77. assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td>');
  78. // -----------------------------------------------
  79. $str = <<<HTML
  80. <ul><li><b>li11</b></li><li><b>li12</b></li></ul><ul><li><b>li21</b></li><li><b>li22</b></li></ul>
  81. HTML;
  82. $dom->load($str);
  83. assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b></li><li><b>li12</b></li></ul>');
  84. assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b></li></ul>');
  85. // -----------------------------------------------
  86. $str = <<<HTML
  87. <ul><li><b>li11</b></li><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b></li>
  88. HTML;
  89. $dom->load($str);
  90. assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b></li><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b></li>');
  91. assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b></li>');
  92. // -----------------------------------------------
  93. $str = <<<HTML
  94. <ul><li><b>li11</b><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b>
  95. HTML;
  96. $dom->load($str);
  97. assert($dom->find('ul', 0)->outertext=='<ul><li><b>li11</b><li><b>li12</b></li><ul><li><b>li21</b></li><li><b>li22</b>');
  98. assert($dom->find('ul', 1)->outertext=='<ul><li><b>li21</b></li><li><b>li22</b>');
  99. // -----------------------------------------------
  100. $str = <<<HTML
  101. <table>
  102. <tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>
  103. <tr><td>1</td><td>2</td><td>3</td></tr>
  104. </table>
  105. HTML;
  106. $dom->load($str);
  107. assert($dom->find('tr', 0)->outertext=='<tr><th>Head1</th><th>Head2</th><th>Head3</th></tr>');
  108. assert($dom->find('tr', 1)->outertext=='<tr><td>1</td><td>2</td><td>3</td></tr>');
  109. // -----------------------------------------------------------------------------
  110. // replacement test
  111. $str = <<<HTML
  112. <div class="class1" id="id2" ><div class="class2">ok</div></div>
  113. HTML;
  114. $dom->load($str);
  115. $es = $dom->find('div');
  116. assert(count($es)==2);
  117. assert($es[0]->innertext=='<div class="class2">ok</div>');
  118. assert($es[0]->outertext=='<div class="class1" id="id2" ><div class="class2">ok</div></div>');
  119. // test isset
  120. $es[0]->class = 'class_test';
  121. assert(isset($es[0]->class)===true);
  122. assert(isset($es[0]->okok)===false);
  123. // test replacement
  124. $es[0]->class = 'class_test';
  125. assert($es[0]->outertext=='<div class="class_test" id="id2" ><div class="class2">ok</div></div>');
  126. // test replacement
  127. $es[0]->tag = 'span';
  128. assert($es[0]->outertext=='<span class="class_test" id="id2" ><div class="class2">ok</div></span>');
  129. // test unset (no more support...)
  130. //$dom = str_get_dom($str);
  131. //$es = $dom->find('div');
  132. //unset($es[0]->class);
  133. //assert($es[0]->outertext=='<div id="id2" ><div class="class2">ok</div></div>');
  134. $dom->load($str);
  135. $es = $dom->find('div');
  136. unset($es[0]->attr['class']);
  137. assert($es[0]->outertext=='<div id="id2" ><div class="class2">ok</div></div>');
  138. // -----------------------------------------------
  139. $str = <<<HTML
  140. <select name=something><options>blah</options><options>blah2</options></select>
  141. HTML;
  142. $dom->load($str);
  143. $e = $dom->find('select[name=something]', 0);
  144. $e->innertext = '';
  145. assert($e->outertext =='<select name=something></select>');
  146. // -----------------------------------------------------------------------------
  147. // nested replacement test
  148. $str = <<<HTML
  149. <div class="class0" id="id0" ><div class="class1">ok</div></div>
  150. HTML;
  151. $dom->load($str);
  152. $es = $dom->find('div');
  153. assert(count($es)==2);
  154. assert($es[0]->innertext=='<div class="class1">ok</div>');
  155. assert($es[0]->outertext=='<div class="class0" id="id0" ><div class="class1">ok</div></div>');
  156. assert($es[1]->innertext=='ok');
  157. assert($es[1]->outertext=='<div class="class1">ok</div>');
  158. // test replacement
  159. $es[1]->innertext = 'okok';
  160. assert($es[1]->outertext=='<div class="class1">okok</div>');
  161. assert($es[0]->outertext=='<div class="class0" id="id0" ><div class="class1">okok</div></div>');
  162. assert($dom=='<div class="class0" id="id0" ><div class="class1">okok</div></div>');
  163. $es[1]->class = 'class_test';
  164. assert($es[1]->outertext=='<div class="class_test">okok</div>');
  165. assert($es[0]->outertext=='<div class="class0" id="id0" ><div class="class_test">okok</div></div>');
  166. assert($dom=='<div class="class0" id="id0" ><div class="class_test">okok</div></div>');
  167. $es[0]->class = 'class_test';
  168. assert($es[0]->outertext=='<div class="class_test" id="id0" ><div class="class_test">okok</div></div>');
  169. assert($dom=='<div class="class_test" id="id0" ><div class="class_test">okok</div></div>');
  170. $es[0]->innertext = 'okokok';
  171. assert($es[0]->outertext=='<div class="class_test" id="id0" >okokok</div>');
  172. assert($dom=='<div class="class_test" id="id0" >okokok</div>');
  173. // -----------------------------------------------------------------------------
  174. // <p> test
  175. $str = <<<HTML
  176. <div class="class0">
  177. <p>ok0<a href="#">link0</a></p>
  178. <div class="class1"><p>ok1<a href="#">link1</a></p></div>
  179. <div class="class2"></div>
  180. <p>ok2<a href="#">link2</a></p>
  181. </div>
  182. HTML;
  183. $dom->load($str);
  184. $es = $dom->find('p');
  185. assert($es[0]->innertext=='ok0<a href="#">link0</a>');
  186. assert($es[1]->innertext=='ok1<a href="#">link1</a>');
  187. assert($es[2]->innertext=='ok2<a href="#">link2</a>');
  188. assert($dom->find('p', 0)->plaintext=='ok0link0');
  189. assert($dom->find('p', 1)->plaintext=='ok1link1');
  190. assert($dom->find('p', 2)->plaintext=='ok2link2');
  191. $count = 0;
  192. foreach($dom->find('p') as $p) {
  193. $a = $p->find('a');
  194. assert($a[0]->innertext=='link'.$count);
  195. ++$count;
  196. }
  197. $es = $dom->find('p a');
  198. assert($es[0]->innertext=='link0');
  199. assert($es[1]->innertext=='link1');
  200. assert($es[2]->innertext=='link2');
  201. assert($dom->find('p a', 0)->plaintext=='link0');
  202. assert($dom->find('p a', 1)->plaintext=='link1');
  203. assert($dom->find('p a', 2)->plaintext=='link2');
  204. assert($dom==$str);
  205. // -----------------------------------------------------------------------------
  206. // <embed> test
  207. $str = <<<HTML
  208. <EMBED
  209. SRC="../graphics/sounds/1812over.mid"
  210. HEIGHT=60 WIDTH=144>
  211. HTML;
  212. $dom->load($str);
  213. $e = $dom->find('embed', 0);
  214. assert($e->src=='../graphics/sounds/1812over.mid');
  215. assert($e->height=='60');
  216. assert($e->width=='144');
  217. assert($dom==strtolower($str));
  218. // -----------------------------------------------------------------------------
  219. // tear down
  220. $dom->clear();
  221. unset($dom);
  222. ?>