mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-04 13:07:52 +00:00
M dist/mcp-test/src/test/java/cardemo/CarDemoTest.java
M webclient/classes_spec/org/mozilla/mcp/package.html - Use DOM to make assertions about response XML
This commit is contained in:
parent
5eb68a7ad5
commit
3085164917
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: CarDemoTest.java,v 1.6 2007/03/09 04:34:23 edburns%acm.org Exp $
|
||||
* $Id: CarDemoTest.java,v 1.7 2007/03/15 00:33:10 edburns%acm.org Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -32,6 +32,8 @@ import org.mozilla.mcp.AjaxListener;
|
||||
import org.mozilla.mcp.MCP;
|
||||
import org.mozilla.webclient.WebclientTestCase;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.Node;
|
||||
import org.w3c.dom.Document;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -61,7 +63,8 @@ public class CarDemoTest extends WebclientTestCase {
|
||||
enum TestFeature {
|
||||
RECEIVED_END_AJAX_EVENT,
|
||||
HAS_MAP,
|
||||
HAS_VALID_PARTIAL_RESPONSE,
|
||||
HAS_VALID_RESPONSE_TEXT,
|
||||
HAS_VALID_RESPONSE_XML,
|
||||
HAS_VALID_READYSTATE,
|
||||
STOP_WAITING
|
||||
}
|
||||
@ -75,13 +78,39 @@ public class CarDemoTest extends WebclientTestCase {
|
||||
if (null != eventMap) {
|
||||
bitSet.flip(TestFeature.HAS_MAP.ordinal());
|
||||
}
|
||||
// Make some assertions about the response text
|
||||
String responseText = (String) eventMap.get("responseText");
|
||||
if (null != responseText) {
|
||||
if (-1 != responseText.indexOf("<partial-response>") &&
|
||||
-1 != responseText.indexOf("</partial-response>")) {
|
||||
bitSet.flip(TestFeature.HAS_VALID_PARTIAL_RESPONSE.ordinal());
|
||||
bitSet.flip(TestFeature.HAS_VALID_RESPONSE_TEXT.ordinal());
|
||||
}
|
||||
}
|
||||
Document responseXML = (Document)
|
||||
eventMap.get("responseXML");
|
||||
Element rootElement = null, element = null;
|
||||
Node node = null;
|
||||
String tagName = null;
|
||||
try {
|
||||
rootElement = responseXML.getDocumentElement();
|
||||
tagName = rootElement.getTagName();
|
||||
if (tagName.equals("partial-response")) {
|
||||
element = (Element) rootElement.getFirstChild();
|
||||
tagName = element.getTagName();
|
||||
if (tagName.equals("components")) {
|
||||
element = (Element) rootElement.getLastChild();
|
||||
tagName = element.getTagName();
|
||||
if (tagName.equals("state")) {
|
||||
bitSet.flip(TestFeature.
|
||||
HAS_VALID_RESPONSE_XML.ordinal());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Throwable t) {
|
||||
|
||||
}
|
||||
|
||||
String readyState = (String) eventMap.get("readyState");
|
||||
bitSet.set(TestFeature.HAS_VALID_READYSTATE.ordinal(),
|
||||
null != readyState && readyState.equals("4"));
|
||||
@ -117,7 +146,8 @@ public class CarDemoTest extends WebclientTestCase {
|
||||
// assert that the ajax transaction succeeded
|
||||
assertTrue(bitSet.get(TestFeature.RECEIVED_END_AJAX_EVENT.ordinal()));
|
||||
assertTrue(bitSet.get(TestFeature.HAS_MAP.ordinal()));
|
||||
assertTrue(bitSet.get(TestFeature.HAS_VALID_PARTIAL_RESPONSE.ordinal()));
|
||||
assertTrue(bitSet.get(TestFeature.HAS_VALID_RESPONSE_TEXT.ordinal()));
|
||||
assertTrue(bitSet.get(TestFeature.HAS_VALID_RESPONSE_XML.ordinal()));
|
||||
assertTrue(bitSet.get(TestFeature.HAS_VALID_READYSTATE.ordinal()));
|
||||
bitSet.clear();
|
||||
|
||||
|
@ -110,40 +110,48 @@ href="http://developers.sun.com/web/swdp/index.jsp">Project Dynamic
|
||||
Faces</a> for Ajax.</p>
|
||||
|
||||
|
||||
<div class="syntax"><div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">enum</span> TestFeature <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> RECEIVED_END_AJAX_EVENT,</div></li>
|
||||
<li class="li1"><div class="de1"> HAS_MAP,</div></li>
|
||||
<li class="li2"><div class="de2"> HAS_VALID_PARTIAL_RESPONSE,</div></li>
|
||||
<li class="li1"><div class="de1"> HAS_VALID_READYSTATE,</div></li>
|
||||
<li class="li2"><div class="de2"> STOP_WAITING</div></li>
|
||||
<li class="li1"><div class="de1"><span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> testCardemo<span class="br0">(</span><span class="br0">)</span> <span class="kw2">throws</span> <span class="kw3">Exception</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> MCP mcp = <span class="kw2">new</span> MCP<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">try</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> mcp.<span class="me1">setAppData</span><span class="br0">(</span>getBrowserBinDir<span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">catch</span> <span class="br0">(</span><span class="kw3">Exception</span> e<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> fail<span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> mcp.<span class="me1">getRealizedVisibleBrowserWindow</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">final</span> <span class="kw3">BitSet</span> bitSet = <span class="kw2">new</span> <span class="kw3">BitSet</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> AjaxListener listener = <span class="kw2">new</span> AjaxListener<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw2">public</span> <span class="kw4">void</span> endAjax<span class="br0">(</span><span class="kw3">Map</span> eventMap<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.<span class="me1">RECEIVED_END_AJAX_EVENT</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span> <span class="br0">(</span><span class="kw2">null</span> != eventMap<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_MAP</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<div class="java" style="font-family: monospace;"><ol><li class="li1"><div class="de1"><span class="kw2">public</span> <span class="kw4">void</span> testCardemo<span class="br0">(</span><span class="br0">)</span> <span class="kw2">throws</span> <span class="kw3">Exception</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> mcp.<span class="me1">getRealizedVisibleBrowserWindow</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">final</span> <span class="kw3">BitSet</span> bitSet = <span class="kw2">new</span> <span class="kw3">BitSet</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> AjaxListener listener = <span class="kw2">new</span> AjaxListener<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">public</span> <span class="kw4">void</span> endAjax<span class="br0">(</span><span class="kw3">Map</span> eventMap<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.<span class="me1">RECEIVED_END_AJAX_EVENT</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span> <span class="br0">(</span><span class="kw2">null</span> != eventMap<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_MAP</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="co1">// Make some assertions about the response text</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw3">String</span> responseText = <span class="br0">(</span><span class="kw3">String</span><span class="br0">)</span> eventMap.<span class="me1">get</span><span class="br0">(</span><span class="st0">"responseText"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span> <span class="br0">(</span><span class="kw2">null</span> != responseText<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span> <span class="br0">(</span><span class="nu0">-1</span> != responseText.<span class="me1">indexOf</span><span class="br0">(</span><span class="st0">"<partial-response>"</span><span class="br0">)</span> &&</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="nu0">-1</span> != responseText.<span class="me1">indexOf</span><span class="br0">(</span><span class="st0">"</partial-response>"</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="me1">HAS_VALID_PARTIAL_RESPONSE</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_RESPONSE_TEXT</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw3">Document</span> responseXML = <span class="br0">(</span><span class="kw3">Document</span><span class="br0">)</span> </div></li>
|
||||
<li class="li1"><div class="de1"> eventMap.<span class="me1">get</span><span class="br0">(</span><span class="st0">"responseXML"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw3">Element</span> rootElement = <span class="kw2">null</span>, element = <span class="kw2">null</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> Node node = <span class="kw2">null</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw3">String</span> tagName = <span class="kw2">null</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">try</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> rootElement = responseXML.<span class="me1">getDocumentElement</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> tagName = rootElement.<span class="me1">getTagName</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span> <span class="br0">(</span>tagName.<span class="me1">equals</span><span class="br0">(</span><span class="st0">"partial-response"</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> element = <span class="br0">(</span><span class="kw3">Element</span><span class="br0">)</span> rootElement.<span class="me1">getFirstChild</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> tagName = element.<span class="me1">getTagName</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw1">if</span> <span class="br0">(</span>tagName.<span class="me1">equals</span><span class="br0">(</span><span class="st0">"components"</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> element = <span class="br0">(</span><span class="kw3">Element</span><span class="br0">)</span> rootElement.<span class="me1">getLastChild</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> tagName = element.<span class="me1">getTagName</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="kw1">if</span> <span class="br0">(</span>tagName.<span class="me1">equals</span><span class="br0">(</span><span class="st0">"state"</span><span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li1"><div class="de1"> bitSet.<span class="me1">flip</span><span class="br0">(</span>TestFeature.</div></li>
|
||||
<li class="li2"><div class="de2"> <span class="me1">HAS_VALID_RESPONSE_XML</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> <span class="br0">}</span></div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">catch</span> <span class="br0">(</span><span class="kw3">Throwable</span> t<span class="br0">)</span> <span class="br0">{</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="br0">}</span></div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw3">String</span> readyState = <span class="br0">(</span><span class="kw3">String</span><span class="br0">)</span> eventMap.<span class="me1">get</span><span class="br0">(</span><span class="st0">"readyState"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> bitSet.<span class="me1">set</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_READYSTATE</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span>, </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="kw2">null</span> != readyState && readyState.<span class="me1">equals</span><span class="br0">(</span><span class="st0">"4"</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
@ -179,21 +187,22 @@ Faces</a> for Ajax.</p>
|
||||
<li class="li1"><div class="de1"> <span class="co1">// assert that the ajax transaction succeeded</span></div></li>
|
||||
<li class="li2"><div class="de2"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">RECEIVED_END_AJAX_EVENT</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_MAP</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_PARTIAL_RESPONSE</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_READYSTATE</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> bitSet.<span class="me1">clear</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_RESPONSE_TEXT</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_RESPONSE_XML</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> assertTrue<span class="br0">(</span>bitSet.<span class="me1">get</span><span class="br0">(</span>TestFeature.<span class="me1">HAS_VALID_READYSTATE</span>.<span class="me1">ordinal</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> bitSet.<span class="me1">clear</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> <span class="co1">// Sample the Basis-Preis and Ihr-Preis after the ajax transaction</span></div></li>
|
||||
<li class="li2"><div class="de2"> pricePanel = mcp.<span class="me1">findElement</span><span class="br0">(</span><span class="st0">"j_id_id10:zone1"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> assertNotNull<span class="br0">(</span>pricePanel<span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> pricePanelText = pricePanel.<span class="me1">getTextContent</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"> <span class="co1">// Sample the Basis-Preis and Ihr-Preis after the ajax transaction</span></div></li>
|
||||
<li class="li1"><div class="de1"> pricePanel = mcp.<span class="me1">findElement</span><span class="br0">(</span><span class="st0">"j_id_id10:zone1"</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> assertNotNull<span class="br0">(</span>pricePanel<span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> pricePanelText = pricePanel.<span class="me1">getTextContent</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> assertNotNull<span class="br0">(</span>pricePanelText<span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> assertTrue<span class="br0">(</span>pricePanelText.<span class="me1">matches</span><span class="br0">(</span><span class="st0">"(?s).*Basis-Preis<span class="es0">\\</span>s*15700.*"</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> assertTrue<span class="br0">(</span>pricePanelText.<span class="me1">matches</span><span class="br0">(</span><span class="st0">"(?s).*Ihr Preis<span class="es0">\\</span>s*16600.*"</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> </div></li>
|
||||
<li class="li1"><div class="de1"> mcp.<span class="me1">deleteBrowserControl</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"><span class="br0">}</span> </div></li></ol></div></div>
|
||||
<li class="li2"><div class="de2"> assertNotNull<span class="br0">(</span>pricePanelText<span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> assertTrue<span class="br0">(</span>pricePanelText.<span class="me1">matches</span><span class="br0">(</span><span class="st0">"(?s).*Basis-Preis<span class="es0">\\</span>s*15700.*"</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li2"><div class="de2"> assertTrue<span class="br0">(</span>pricePanelText.<span class="me1">matches</span><span class="br0">(</span><span class="st0">"(?s).*Ihr Preis<span class="es0">\\</span>s*16600.*"</span><span class="br0">)</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"> </div></li>
|
||||
<li class="li2"><div class="de2"> mcp.<span class="me1">deleteBrowserControl</span><span class="br0">(</span><span class="br0">)</span>;</div></li>
|
||||
<li class="li1"><div class="de1"><span class="br0">}</span> </div></li></ol></div></div>
|
||||
|
||||
|
||||
</body>
|
||||
|
Loading…
x
Reference in New Issue
Block a user