118 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
# encoding: utf-8
 | 
						|
import sys
 | 
						|
import pytest
 | 
						|
 | 
						|
class TestPasteCapture(object):
 | 
						|
 | 
						|
    @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(object):
 | 
						|
 | 
						|
    @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(object):
 | 
						|
                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()
 | 
						|
 | 
						|
 |