mirror of
https://github.com/servo/servo.git
synced 2025-09-15 09:28:20 +01:00
Update web-platform-tests to 5582e4d2bfcfd1fa9f105406b143170ee2af7db1
This commit is contained in:
parent
9f892edd87
commit
78369e95cf
814 changed files with 57501 additions and 857 deletions
|
@ -0,0 +1,53 @@
|
|||
# -*- mode: python; fill-column: 100; comment-column: 100; -*-
|
||||
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
from selenium.common import exceptions
|
||||
|
||||
|
||||
class ElementClearTest(base_test.WebDriverBaseTest):
|
||||
def test_writable_text_input_element_should_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_writable_input_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#writableTextInput")
|
||||
e.clear()
|
||||
self.assertEquals("", e.get_attribute("value"))
|
||||
|
||||
def test_disabled_text_input_element_should_not_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_disabled_input_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#disabledTextInput")
|
||||
self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
|
||||
|
||||
def test_read_only_text_input_element_should_not_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_readonly_input_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#readOnlyTextInput")
|
||||
self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
|
||||
|
||||
def test_writable_text_area_element_should_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_writable_textarea_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#writableTextArea")
|
||||
e.clear()
|
||||
self.assertEquals("", e.get_attribute("value"))
|
||||
|
||||
def test_disabled_text_area_element_should_not_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_disabled_textarea_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#disabledTextArea")
|
||||
self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
|
||||
|
||||
def test_read_only_text_input_element_should_not_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_readonly_textarea_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#readOnlyTextArea")
|
||||
self.assertRaises(exceptions.InvalidElementStateException, lambda: e.clear())
|
||||
|
||||
def test_content_editable_area_should_clear(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/element_clear_contenteditable_page.html"))
|
||||
e = self.driver.find_element_by_css_selector("#contentEditableElement")
|
||||
e.clear()
|
||||
self.assertEquals("", e.text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
|
@ -0,0 +1,349 @@
|
|||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
|
||||
from webdriver import exceptions, wait
|
||||
|
||||
|
||||
class ClickTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.wait = wait.WebDriverWait(self.driver, 5, ignored_exceptions = [exceptions.NoSuchAlertException])
|
||||
self.driver.get(self.webserver.where_is('modal/res/alerts.html'))
|
||||
|
||||
def tearDown(self):
|
||||
try:
|
||||
self.driver.switch_to_alert().dismiss()
|
||||
except exceptions.NoSuchAlertException:
|
||||
pass
|
||||
|
||||
def test_click_div(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("div")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "div")
|
||||
|
||||
def test_click_p(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("p")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "p")
|
||||
|
||||
def test_click_h1(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("h1")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "h1")
|
||||
|
||||
def test_click_pre(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("pre")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "pre")
|
||||
|
||||
def test_click_ol(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("ol")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "ol")
|
||||
|
||||
def test_click_ul(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("ul")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "ul")
|
||||
|
||||
def test_click_a(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("a")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "a")
|
||||
|
||||
def test_click_img(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("img")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "img")
|
||||
|
||||
def test_click_video(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("video")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "video")
|
||||
|
||||
def test_click_canvas(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("canvas")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "canvas")
|
||||
|
||||
def test_click_progress(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("progress")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "progress")
|
||||
|
||||
def test_click_textarea(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("textarea")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "textarea")
|
||||
|
||||
def test_click_button(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("button")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "button")
|
||||
|
||||
def test_click_svg(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("svg")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "svg")
|
||||
|
||||
def test_click_input_range(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_range")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_range")
|
||||
|
||||
def test_click_input_button(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_button")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_button")
|
||||
|
||||
def test_click_input_submit(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_submit")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_submit")
|
||||
|
||||
def test_click_input_reset(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_reset")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_reset")
|
||||
|
||||
def test_click_input_checkbox(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_checkbox")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_checkbox")
|
||||
|
||||
def test_click_input_radio(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_radio")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_radio")
|
||||
|
||||
def test_click_input_text(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_text")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_text")
|
||||
|
||||
def test_click_input_number(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_number")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_number")
|
||||
|
||||
def test_click_input_tel(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_tel")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_tel")
|
||||
|
||||
def test_click_input_url(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_url")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_url")
|
||||
|
||||
def test_click_input_email(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_email")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_email")
|
||||
|
||||
def test_click_input_search(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_search")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_search")
|
||||
|
||||
def test_click_input_image(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/click.html"))
|
||||
|
||||
element = self.driver.find_element_by_id("input_image")
|
||||
element.click()
|
||||
|
||||
alert = self.wait.until(lambda x: x.switch_to_alert())
|
||||
value = alert.get_text()
|
||||
alert.accept()
|
||||
|
||||
self.assertEquals(value, "input_image")
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<div id="contentEditableElement" contentEditable="true">
|
||||
This is a contentEditable area
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<input id="disabledTextInput" type="text" disabled="true" value="Test"/>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<textarea rows="5" id="disabledTextArea" disabled="true" cols="20">
|
||||
text area which is not supposed to be cleared
|
||||
</textarea>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<input id="readOnlyTextInput" type="text" readonly value="Test"/>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<textarea id="readOnlyTextArea" readonly rows="5" cols="20">
|
||||
text area which is not supposed to be cleared
|
||||
</textarea>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<input id="writableTextInput" type="text" value="Test"/>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Clear Elements Test</title>
|
||||
<meta charset=utf-8>
|
||||
</head>
|
||||
<body>
|
||||
<textarea id="writableTextArea" rows="2" cols="20">
|
||||
This is a sample text area which is supposed to be cleared
|
||||
</textarea>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>Text Form Landing</title>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,25 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Text Form</title>
|
||||
<meta charset="utf-8" />
|
||||
<script>
|
||||
function key_press() {
|
||||
document.getElementById("text").textContent = document.getElementById("Text1").value;
|
||||
}
|
||||
|
||||
function got_focus() {
|
||||
var output = document.getElementById("output");
|
||||
output.checked = true;
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p id="text"></p>
|
||||
<form action="text-form-landing.html">
|
||||
<input id="Text1" type="text" onkeyup="key_press()"/>
|
||||
<input id="Text2" type="text" onfocus="got_focus()" />
|
||||
<input id="output" type="checkbox" />
|
||||
<input type="submit" name="e" value="mc2" />
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,96 @@
|
|||
import os
|
||||
import sys
|
||||
import random
|
||||
import unittest
|
||||
|
||||
sys.path.insert(1, os.path.abspath(os.path.join(__file__, "../..")))
|
||||
import base_test
|
||||
|
||||
repo_root = os.path.abspath(os.path.join(__file__, "../../.."))
|
||||
sys.path.insert(1, os.path.join(repo_root, "tools", "webdriver"))
|
||||
from webdriver import exceptions
|
||||
|
||||
|
||||
class SendKeysTest(base_test.WebDriverBaseTest):
|
||||
def setUp(self):
|
||||
self.driver.get(self.webserver.where_is("user_input/res/text-form.html"))
|
||||
|
||||
def test_send_simple_string(self):
|
||||
element = self.driver.find_element_by_id("Text1")
|
||||
element.send_keys("lorem ipsum")
|
||||
|
||||
self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"lorem ipsum")
|
||||
|
||||
def test_send_return(self):
|
||||
element = self.driver.find_element_by_id("Text1")
|
||||
returnkey = unichr(int("E006", 16))
|
||||
element.send_keys([returnkey])
|
||||
|
||||
self.assertEquals(u"" + self.driver.get_current_url(), u"" + self.webserver.where_is("user_input/res/text-form-landing.html?e=mc2"))
|
||||
|
||||
def test_send_backspace(self):
|
||||
element = self.driver.find_element_by_id("Text1")
|
||||
element.send_keys("world ")
|
||||
element.send_keys("wide ")
|
||||
element.send_keys("web ")
|
||||
element.send_keys("consortium")
|
||||
|
||||
backspace= unichr(int("E003", 16))
|
||||
for i in range(0, 11):
|
||||
element.send_keys([backspace])
|
||||
|
||||
self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"world wide web")
|
||||
|
||||
def test_send_tab(self):
|
||||
element1 = self.driver.find_element_by_id("Text1")
|
||||
element2 = self.driver.find_element_by_id("Text2")
|
||||
element1.send_keys("typing here")
|
||||
|
||||
tab= unichr(int("E004", 16))
|
||||
element1.send_keys([tab])
|
||||
|
||||
output = self.driver.find_element_by_id("output")
|
||||
tab_pressed = output.get_attribute("checked")
|
||||
self.assertEquals(tab_pressed, u"true")
|
||||
|
||||
def test_send_shift(self):
|
||||
element = self.driver.find_element_by_id("Text1")
|
||||
element.send_keys("low ")
|
||||
|
||||
shift= unichr(int("E008", 16))
|
||||
element.send_keys([shift , "u", "p", shift])
|
||||
|
||||
self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"low UP")
|
||||
|
||||
def test_send_arrow_keys(self):
|
||||
element = self.driver.find_element_by_id("Text1")
|
||||
|
||||
element.send_keys("internet")
|
||||
|
||||
backspace= unichr(int("E003", 16))
|
||||
left= unichr(int("E012", 16))
|
||||
right= unichr(int("E014", 16))
|
||||
for i in range(0, 4):
|
||||
element.send_keys([left])
|
||||
|
||||
element.send_keys([backspace])
|
||||
element.send_keys([right])
|
||||
element.send_keys("a")
|
||||
|
||||
self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"intranet")
|
||||
|
||||
def test_select_text_with_shift(self):
|
||||
element = self.driver.find_element_by_id("Text1")
|
||||
|
||||
element.send_keys("WebDriver")
|
||||
backspace= unichr(int("E003", 16))
|
||||
shift= unichr(int("E008", 16))
|
||||
left= unichr(int("E012", 16))
|
||||
|
||||
element.send_keys([shift, left, left, left, left, left, left, backspace])
|
||||
|
||||
self.assertEquals(self.driver.find_element_by_id("text").get_text(), u"Web")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
Loading…
Add table
Add a link
Reference in a new issue