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'))
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'})
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)
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)
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)
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())
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'))
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])
def setUp(self): setup_patcher = patch('pysword.bible.SwordBible._setup') self.addCleanup(setup_patcher.stop) setup_patcher.start()