diff options
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.py | 115 |
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() + + |