1cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport unittest
2cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport encodings
3cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport encodings.aliases
4cef7893435aa41160dd1255c43cb8498279738ccChris Craikfrom modulegraph import util
5cef7893435aa41160dd1255c43cb8498279738ccChris Craikimport sys
6cef7893435aa41160dd1255c43cb8498279738ccChris Craik
7cef7893435aa41160dd1255c43cb8498279738ccChris Craiktry:
8cef7893435aa41160dd1255c43cb8498279738ccChris Craik    from io import BytesIO
9cef7893435aa41160dd1255c43cb8498279738ccChris Craikexcept ImportError:
10cef7893435aa41160dd1255c43cb8498279738ccChris Craik    from cStringIO import StringIO as BytesIO
11cef7893435aa41160dd1255c43cb8498279738ccChris Craik
12cef7893435aa41160dd1255c43cb8498279738ccChris Craikclass TestUtil (unittest.TestCase):
13cef7893435aa41160dd1255c43cb8498279738ccChris Craik    def test_imp_find_module(self):
14cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fn = util.imp_find_module('encodings.aliases')[1]
15cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertTrue(encodings.aliases.__file__.startswith(fn))
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik
17cef7893435aa41160dd1255c43cb8498279738ccChris Craik    def test_imp_walk(self):
18cef7893435aa41160dd1255c43cb8498279738ccChris Craik        imps = list(util.imp_walk('encodings.aliases'))
19cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(len(imps), 2)
20cef7893435aa41160dd1255c43cb8498279738ccChris Craik
21cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(imps[0][0], 'encodings')
22cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertTrue(encodings.__file__.startswith(imps[0][1][1]))
23cef7893435aa41160dd1255c43cb8498279738ccChris Craik
24cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(imps[1][0], 'aliases')
25cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertTrue(encodings.aliases.__file__.startswith(imps[1][1][1]))
26cef7893435aa41160dd1255c43cb8498279738ccChris Craik
27cef7893435aa41160dd1255c43cb8498279738ccChris Craik        # Close all files, avoid warning by unittest
28cef7893435aa41160dd1255c43cb8498279738ccChris Craik        for i in imps:
29cef7893435aa41160dd1255c43cb8498279738ccChris Craik            if i[1][0] is not None:
30cef7893435aa41160dd1255c43cb8498279738ccChris Craik                i[1][0].close()
31cef7893435aa41160dd1255c43cb8498279738ccChris Craik
32cef7893435aa41160dd1255c43cb8498279738ccChris Craik
33cef7893435aa41160dd1255c43cb8498279738ccChris Craik    def test_guess_encoding(self):
34cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fp = BytesIO(b"# coding: utf-8")
35cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(util.guess_encoding(fp), "utf-8")
36cef7893435aa41160dd1255c43cb8498279738ccChris Craik
37cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fp = BytesIO(b"\n# coding: utf-8")
38cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(util.guess_encoding(fp), "utf-8")
39cef7893435aa41160dd1255c43cb8498279738ccChris Craik
40cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fp = BytesIO(b"# coding: latin-1")
41cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(util.guess_encoding(fp), "latin-1")
42cef7893435aa41160dd1255c43cb8498279738ccChris Craik
43cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fp = BytesIO(b"\n# coding: latin-1")
44cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(util.guess_encoding(fp), "latin-1")
45cef7893435aa41160dd1255c43cb8498279738ccChris Craik
46cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fp = BytesIO(b"#!/usr/bin/env/python\n# vim: set fileencoding=latin-1 :")
47cef7893435aa41160dd1255c43cb8498279738ccChris Craik        self.assertEqual(util.guess_encoding(fp), "latin-1")
48cef7893435aa41160dd1255c43cb8498279738ccChris Craik
49cef7893435aa41160dd1255c43cb8498279738ccChris Craik        fp = BytesIO(b"\n\n\n# coding: latin-1")
50cef7893435aa41160dd1255c43cb8498279738ccChris Craik        if sys.version_info[0] == 2:
51cef7893435aa41160dd1255c43cb8498279738ccChris Craik            self.assertEqual(util.guess_encoding(fp), "ascii")
52cef7893435aa41160dd1255c43cb8498279738ccChris Craik        else:
53cef7893435aa41160dd1255c43cb8498279738ccChris Craik            self.assertEqual(util.guess_encoding(fp), "utf-8")
54cef7893435aa41160dd1255c43cb8498279738ccChris Craik
55cef7893435aa41160dd1255c43cb8498279738ccChris Craik        del fp
56cef7893435aa41160dd1255c43cb8498279738ccChris Craik
57cef7893435aa41160dd1255c43cb8498279738ccChris Craik
58cef7893435aa41160dd1255c43cb8498279738ccChris Craikif __name__ == "__main__":
59cef7893435aa41160dd1255c43cb8498279738ccChris Craik    unittest.main()
60