<?php
/**
* The CSSQuery object has far too many variations
* to test all of them, but here are the most popular
*
*/
//load the CSSQuery class file
require 'CSSQuery.php';
$br = "\n";//"<br>";
//establish a DOMDocument object
$doc = new DOMDocument();
//load some HTML for testing
$doc->loadHTML('<html>
<body>
<h3>Header 3</h3>
<table id="dataset">
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
<tr>
<td>column 1</td>
<td>column 2</td>
<td>column 3</td>
<td>column 4</td>
<td>column 5</td>
</tr>
</table>
<p class="second-class-name paragraph">
<span id="spanner">
<a name="anchor">
<img src="javascript:;" alt="empty"/>
</a>
</span><b>Adjacent siBLing</b><i>General sibling</i>
</p>
<p>
<span>EMpty</span>
<u>Adjacent sibling</u>
<b>General sibling</b>
</p>
<i> monkey wrench</i>
<a href="#">Just another test</a>
<input disabled/>
<input type="checkbox" checked/>
</body>
</html>');
//establish new CSSQuery like you would a DOMXPath query
$css = new CSSQuery($doc);
//get elements by tag name
print "{$br}Tag: " . (count( $css->query("p") ) == 2 ? "TRUE" : "FALSE");
//get elements by id
print "{$br}ID: " . (count( $css->query("#spanner") ) == 1 ? "TRUE" : "FALSE");
//get span elements by id
print "{$br}tag and ID: " . (count( $css->query("span#spanner") ) == 1 ? "TRUE" : "FALSE");
//get elements by class name
print "{$br}className: " . (count( $css->query(".paragraph") ) == 1 ? "TRUE" : "FALSE");
//get p elements by class name
print "{$br}tag and className: " . (count( $css->query("p.paragraph") ) == 1 ? "TRUE" : "FALSE");
//get elements by an attribute
print "{$br}has attribute: " . (count( $css->query("p[class]") ) == 1 ? "TRUE" : "FALSE");
//get elements by an attribute
print "{$br}attribute equals: " . (count( $css->query("a[name='anchor']") ) == 1 ? "TRUE" : "FALSE");
//get elements by an attribute
print "{$br}attribute begins with: " . (count( $css->query("a[name^='an']") ) == 1 ? "TRUE" : "FALSE");
//get elements by an attribute
print "{$br}attribute ends with: " . (count( $css->query("img[alt$=ty]") ) == 1 ? "TRUE" : "FALSE");
//get elements by an attribute
print "{$br}attribute contains: " . (count( $css->query("a[name*='ch']") ) == 1 ? "TRUE" : "FALSE");
//get elements by an attribute
print "{$br}attribute dashed: " . (count( $css->query("p[class|='second']") ) == 1 ? "TRUE" : "FALSE");
//get elements using descendant selector
print "{$br}descendant: " . (count( $css->query("span img") ) == 1 ? "TRUE" : "FALSE");
//get elements using children selector
print "{$br}children: " . (count( $css->query("a > img") ) == 1 ? "TRUE" : "FALSE");
//get elements using adjacent sibling selector
print "{$br}adjacent sibling: " . (count( $css->query("span + b") ) == 1 ? "TRUE" : "FALSE");
//get elements using general sibling selector
print "{$br}general sibling: " . (count( $css->query("i ~ span") ) == 1 ? "TRUE" : "FALSE");
//get elements using first-child psuedo selector
print "{$br}first-child: " . (count( $css->query("p span:first-child") ) == 2 ? "TRUE" : "FALSE");
//get elements using last-child psuedo selector
print "{$br}last-child: " . (count( $css->query("p b:last-child") ) == 1 ? "TRUE" : "FALSE");
//get elements using only-child psuedo selector
print "{$br}only-child: " . (count( $css->query("a img:only-child") ) == 1 ? "TRUE" : "FALSE");
//get elements using disabled psuedo selector
print "{$br}disabled: " . (count( $css->query("input:disabled") ) == 1 ? "TRUE" : "FALSE");
//get elements using enabled psuedo selector
print "{$br}enabled: " . (count( $css->query("input:enabled") ) == 1 ? "TRUE" : "FALSE");
//get elements using checked psuedo selector
print "{$br}checked: " . (count( $css->query("input:checked") ) == 1 ? "TRUE" : "FALSE");
//get elements using checked psuedo selector
print "{$br}empty: " . (count( $css->query("*:empty") ) == 3 ? "TRUE" : "FALSE");
//get elements using first-of-type psuedo selector
print "{$br}first-of-type: " . (count( $css->query("tr:first-of-type") ) == 1 ? "TRUE" : "FALSE");
//get elements using last-of-type psuedo selector
print "{$br}last-of-type: " . (count( $css->query("td:last-of-type") ) == 8 ? "TRUE" : "FALSE");
//get elements using only-of-type psuedo selector
print "{$br}only-of-type: " . (count( $css->query("u:only-of-type") ) == 1 ? "TRUE" : "FALSE");
//get elements using not
print "{$br}not: " . (count( $css->query("a:not([href])") ) == 1 ? "TRUE" : "FALSE");
//get elements using nth-of-type psuedo selector
print "{$br}nth-of-type: " . (count( $css->query("tr:nth-of-type(odd)") ) == 4 ? "TRUE" : "FALSE");
//get elements using nth-last-of-type psuedo selector
print "{$br}nth-last-of-type: " . (count( $css->query("tr:nth-last-of-type(even)") ) == 4 ? "TRUE" : "FALSE");
//get elements using nth-child psuedo selector
print "{$br}nth-child: " . (count( $css->query("tr:nth-child(n+2)") ) == 4 ? "TRUE" : "FALSE");
//get elements using nth-last-child psuedo selector
print "{$br}nth-last-child: " . (count( $css->query("td:nth-last-child(3)") ) == 8 ? "TRUE" : "FALSE");
//get elements using first psuedo selector
print "{$br}first: " . (count( $css->query("tr:first") ) == 1 ? "TRUE" : "FALSE");
//get elements using last psuedo selector
print "{$br}last: " . (count( $css->query("tr:last") ) == 1 ? "TRUE" : "FALSE");
//get elements using eq psuedo selector
print "{$br}eq: " . (count( $css->query("tr:eq(5)") ) == 1 ? "TRUE" : "FALSE");
//get elements using lt psuedo selector
print "{$br}lt: " . (count( $css->query("tr:lt(5)") ) == 5 ? "TRUE" : "FALSE");
//get elements using gt psuedo selector
print "{$br}gt: " . (count( $css->query("tr:gt(5)") ) == 2 ? "TRUE" : "FALSE");
//get elements using nth psuedo selector
print "{$br}nth: " . (count( $css->query("tr:nth(odd)") ) == 4 ? "TRUE" : "FALSE");
//get elements using parent psuedo selector
print "{$br}parent: " . (count( $css->query("a:parent") ) == 1 ? "TRUE" : "FALSE");
//get elements using parent-node psuedo selector
print "{$br}parent-node: " . (count( $css->query("a:parent-node") ) == 2 ? "TRUE" : "FALSE");
//get elements using parent-node psuedo selector
print "{$br}parent-node(span): " . (count( $css->query("a:parent-node(span)") ) == 1 ? "TRUE" : "FALSE");
//get elements using parents psuedo selector
print "{$br}parents: " . (count( $css->query("input:parents") ) == 2 ? "TRUE" : "FALSE");
//get elements using parents psuedo selector
print "{$br}parents(p): " . (count( $css->query("span:parents(p)") ) == 2 ? "TRUE" : "FALSE");
//get elements using headers psuedo selector
print "{$br}header: " . (count( $css->query(":header") ) == 1 ? "TRUE" : "FALSE");
//get elements using checkbox psuedo selector
print "{$br}checkbox: " . (count( $css->query(":checkbox") ) == 1 ? "TRUE" : "FALSE");
//get elements using input psuedo selector
print "{$br}input: " . (count( $css->query(":input") ) == 2 ? "TRUE" : "FALSE");
//get elements using contains psuedo selector
print "{$br}contains: " . (count( $css->query("b:contains('General')") ) == 1 ? "TRUE" : "FALSE");
//get elements using Contains psuedo selector
print "{$br}Contains: " . (count( $css->query("b:Contains('sibling')") ) == 2 ? "TRUE" : "FALSE");
//comma
print "{$br}comma: " . (count( $css->query("p, #spanner, tr:first") ) == 4 ? "TRUE" : "FALSE");
?>