Пример #1
0
    def test_invalid_charset(self):
        """Test decoding with different and invalid charsets."""
        charset = 'utf16'
        resp = CharsetTestCase._create_response(
            data=CharsetTestCase.LATIN1_BYTES)
        # Ignore WARNING: Encoding "utf16" requested but "utf-8" received
        with patch('pywikibot.warning'):
            self.assertRaisesRegex(UnicodeDecodeError,
                                   self.CODEC_CANT_DECODE_RE,
                                   http._decide_encoding, resp, charset)
        self.assertEqual(resp.content, CharsetTestCase.LATIN1_BYTES)

        try:
            resp.encoding = http._decide_encoding(resp, charset)
        except UnicodeDecodeError as e:
            resp.encoding = e

        with patch('pywikibot.error'):
            self.assertRaisesRegex(UnicodeDecodeError,
                                   self.CODEC_CANT_DECODE_RE,
                                   http.error_handling_callback, resp)

        # TODO: this is a breaking change
        # self.assertRaisesRegex(
        #     UnicodeDecodeError, self.CODEC_CANT_DECODE_RE, lambda: resp.text)

        # Response() would do:
        # encoding = UnicodeDecodeError -> str(self.content, errors='replace')
        self.assertEqual(resp.text, str(resp.content, errors='replace'))
        # encoding = None -> str(resp.content, resp.encoding, errors='replace')
        resp.encoding = None
        self.assertEqual(
            resp.text,
            str(resp.content, resp.apparent_encoding, errors='replace'))
Пример #2
0
 def test_unexpected_user(self):
     """Test Request object when username is not correct."""
     site = self.get_site()
     site._userinfo = {'name': 'other_username', 'groups': []}
     site._username[0] = 'myusername'
     # Ignore warning: API write action by unexpected username commenced.
     with patch('pywikibot.warning'):
         Request(site=site, parameters={'action': 'edit'})
Пример #3
0
 def test_header_charset(self):
     """Test decoding with different charsets and valid header charset."""
     req = CharsetTestCase._create_request('latin1')
     self.assertEqual('latin1', req.charset)
     # Ignore WARNING: Encoding "latin1" requested but "utf-8" received
     with patch('pywikibot.warning'):
         self.assertEqual('utf-8', req.encoding)
     self.assertEqual(req.raw, CharsetTestCase.UTF8_BYTES)
     self.assertEqual(req.content, CharsetTestCase.STR)
Пример #4
0
 def test_header_charset(self):
     """Test decoding with different charsets and valid header charset."""
     charset = 'latin1'
     resp = CharsetTestCase._create_response()
     resp.encoding = http._decide_encoding(resp, charset)
     # Ignore WARNING: Encoding "latin1" requested but "utf-8" received
     with patch('pywikibot.warning'):
         self.assertEqual('utf-8', resp.encoding)
     self.assertEqual(resp.content, CharsetTestCase.UTF8_BYTES)
     self.assertEqual(resp.text, CharsetTestCase.STR)
Пример #5
0
 def test_invalid_charset(self):
     """Test decoding with different and invalid charsets."""
     req = CharsetTestCase._create_request('utf16',
                                           CharsetTestCase.LATIN1_BYTES)
     self.assertEqual('utf16', req.charset)
     # Ignore WARNING: Encoding "utf16" requested but "utf-8" received
     with patch('pywikibot.warning'):
         self.assertRaisesRegex(
             UnicodeDecodeError, self.CODEC_CANT_DECODE_RE,
             lambda: req.encoding)
     self.assertEqual(req.raw, CharsetTestCase.LATIN1_BYTES)
     self.assertRaisesRegex(UnicodeDecodeError, self.CODEC_CANT_DECODE_RE, lambda: req.content)
Пример #6
0
 def test_unexpected_user(self):
     """Test Request object when username is not correct."""
     self.site._userinfo = {
         'name': 'other_username',
         'groups': [],
         'id': '1'
     }
     self.site._username = '******'
     # Ignore warning: API write action by unexpected username commenced.
     with patch('pywikibot.warning'):
         Request(site=self.site, parameters={'action': 'edit'})
     self.assertNotEqual(self.site.user(), self.site.username())
     self.assertNotEqual(self.site.userinfo['name'], self.site.username())
     self.assertFalse(self.site.logged_in())
Пример #7
0
    def test_invalid_charset(self):
        """Test decoding with different and invalid charsets."""
        invalid_charsets = ('utf16', 'win-1251')
        for charset in invalid_charsets:
            with self.subTest(charset=charset):
                resp = CharsetTestCase._create_response(
                    data=CharsetTestCase.LATIN1_BYTES)

                with patch('pywikibot.warning'):  # Ignore WARNING:
                    resp.encoding = http._decide_encoding(resp, charset)
                self.assertIsNone(resp.encoding)
                self.assertIsNotNone(resp.apparent_encoding)
                self.assertEqual(resp.content, CharsetTestCase.LATIN1_BYTES)

                # test Response.apparent_encoding
                self.assertEqual(resp.text, str(resp.content,
                                                resp.apparent_encoding,
                                                errors='replace'))
Пример #8
0
    def test_can_read_from_files(self, mock_get):
        mock_file = mock_open(
            read_data='https://www.google.com\nbad://address')

        mock_get.register_uri("GET", "https://www.google.com")
        #mock_peer_name.return_value = "1.1.1.1", "443"

        with patch('builtins.open', return_value=mock_file('some-filename')):
            cli = CLI()

        self.assertEqual(len(cli.urls), 2)

        first_url = cli.urls[0].as_dict()
        # make sure there's no errors
        self.assertNotIn("errors", first_url.keys())
        self.assertEqual(200, first_url["response_code"])

        second_url = cli.urls[1].as_dict()
        # make sure there's no errors
        self.assertIn("errors", second_url.keys())
        self.assertEqual(str(InvalidUrl()), second_url["errors"][0])
Пример #9
0
 def setUp(self):
     setup_patcher = patch('pysword.bible.SwordBible._setup')
     self.addCleanup(setup_patcher.stop)
     setup_patcher.start()