aboutsummaryrefslogtreecommitdiffstats
path: root/tests/wpt/web-platform-tests/tools/pytest/testing/test_pastebin.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/wpt/web-platform-tests/tools/pytest/testing/test_pastebin.py')
-rw-r--r--tests/wpt/web-platform-tests/tools/pytest/testing/test_pastebin.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/wpt/web-platform-tests/tools/pytest/testing/test_pastebin.py b/tests/wpt/web-platform-tests/tools/pytest/testing/test_pastebin.py
new file mode 100644
index 00000000000..03570a5c70b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/pytest/testing/test_pastebin.py
@@ -0,0 +1,115 @@
+# encoding: utf-8
+import sys
+import pytest
+
+class TestPasteCapture:
+
+ @pytest.fixture
+ def pastebinlist(self, monkeypatch, request):
+ pastebinlist = []
+ plugin = request.config.pluginmanager.getplugin('pastebin')
+ monkeypatch.setattr(plugin, 'create_new_paste', pastebinlist.append)
+ return pastebinlist
+
+ def test_failed(self, testdir, pastebinlist):
+ testpath = testdir.makepyfile("""
+ import pytest
+ def test_pass():
+ pass
+ def test_fail():
+ assert 0
+ def test_skip():
+ pytest.skip("")
+ """)
+ reprec = testdir.inline_run(testpath, "--paste=failed")
+ assert len(pastebinlist) == 1
+ s = pastebinlist[0]
+ assert s.find("def test_fail") != -1
+ assert reprec.countoutcomes() == [1,1,1]
+
+ def test_all(self, testdir, pastebinlist):
+ from _pytest.pytester import LineMatcher
+ testpath = testdir.makepyfile("""
+ import pytest
+ def test_pass():
+ pass
+ def test_fail():
+ assert 0
+ def test_skip():
+ pytest.skip("")
+ """)
+ reprec = testdir.inline_run(testpath, "--pastebin=all", '-v')
+ assert reprec.countoutcomes() == [1,1,1]
+ assert len(pastebinlist) == 1
+ contents = pastebinlist[0].decode('utf-8')
+ matcher = LineMatcher(contents.splitlines())
+ matcher.fnmatch_lines([
+ '*test_pass PASSED*',
+ '*test_fail FAILED*',
+ '*test_skip SKIPPED*',
+ '*== 1 failed, 1 passed, 1 skipped in *'
+ ])
+
+ def test_non_ascii_paste_text(self, testdir):
+ """Make sure that text which contains non-ascii characters is pasted
+ correctly. See #1219.
+ """
+ testdir.makepyfile(test_unicode="""
+ # encoding: utf-8
+ def test():
+ assert '☺' == 1
+ """)
+ result = testdir.runpytest('--pastebin=all')
+ if sys.version_info[0] == 3:
+ expected_msg = "*assert '☺' == 1*"
+ else:
+ expected_msg = "*assert '\\xe2\\x98\\xba' == 1*"
+ result.stdout.fnmatch_lines([
+ expected_msg,
+ "*== 1 failed in *",
+ '*Sending information to Paste Service*',
+ ])
+
+
+class TestPaste:
+
+ @pytest.fixture
+ def pastebin(self, request):
+ return request.config.pluginmanager.getplugin('pastebin')
+
+ @pytest.fixture
+ def mocked_urlopen(self, monkeypatch):
+ """
+ monkeypatch the actual urlopen calls done by the internal plugin
+ function that connects to bpaste service.
+ """
+ calls = []
+ def mocked(url, data):
+ calls.append((url, data))
+ class DummyFile:
+ def read(self):
+ # part of html of a normal response
+ return b'View <a href="/raw/3c0c6750bd">raw</a>.'
+ return DummyFile()
+
+ if sys.version_info < (3, 0):
+ import urllib
+ monkeypatch.setattr(urllib, 'urlopen', mocked)
+ else:
+ import urllib.request
+ monkeypatch.setattr(urllib.request, 'urlopen', mocked)
+ return calls
+
+ def test_create_new_paste(self, pastebin, mocked_urlopen):
+ result = pastebin.create_new_paste(b'full-paste-contents')
+ assert result == 'https://bpaste.net/show/3c0c6750bd'
+ assert len(mocked_urlopen) == 1
+ url, data = mocked_urlopen[0]
+ assert type(data) is bytes
+ lexer = 'python3' if sys.version_info[0] == 3 else 'python'
+ assert url == 'https://bpaste.net'
+ assert 'lexer=%s' % lexer in data.decode()
+ assert 'code=full-paste-contents' in data.decode()
+ assert 'expiry=1week' in data.decode()
+
+