3 # http://www.drdobbs.com/testing/unit-testing-with-python/240165163
14 localmodule = os.path.realpath(
15 os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
16 print('localmodule: ' + localmodule)
17 if localmodule not in sys.path:
18 sys.path.insert(0, localmodule)
20 import fdroidserver.common
21 import fdroidserver.lint
22 import fdroidserver.metadata
25 class LintTest(unittest.TestCase):
26 '''fdroidserver/lint.py'''
29 logging.basicConfig(level=logging.INFO)
30 self.basedir = os.path.join(localmodule, 'tests')
31 self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
32 if not os.path.exists(self.tmpdir):
33 os.makedirs(self.tmpdir)
34 os.chdir(self.basedir)
36 def test_check_for_unsupported_metadata_files(self):
38 fdroidserver.common.fill_config_defaults(config)
39 config['accepted_formats'] = ('txt', 'yml')
40 fdroidserver.common.config = config
41 fdroidserver.lint.config = config
42 self.assertTrue(fdroidserver.lint.check_for_unsupported_metadata_files())
44 tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
46 self.assertFalse(fdroidserver.lint.check_for_unsupported_metadata_files(tmptestsdir + '/'))
47 shutil.copytree(os.path.join(localmodule, 'tests', 'metadata'),
48 os.path.join(tmptestsdir, 'metadata'),
49 ignore=shutil.ignore_patterns('apk', 'dump', '*.json'))
50 self.assertFalse(fdroidserver.lint.check_for_unsupported_metadata_files(tmptestsdir + '/'))
51 shutil.copy(os.path.join(localmodule, 'tests', 'metadata', 'org.adaway.json'),
52 os.path.join(tmptestsdir, 'metadata'))
53 self.assertTrue(fdroidserver.lint.check_for_unsupported_metadata_files(tmptestsdir + '/'))
55 def test_forbidden_html_tags(self):
57 fdroidserver.common.fill_config_defaults(config)
58 fdroidserver.common.config = config
59 fdroidserver.lint.config = config
63 'Summary': 'We pwn you',
64 'Description': 'This way: <style><img src="</style><img src=x onerror=alert(1)//">',
68 for warn in fdroidserver.lint.check_regexes(app):
71 self.assertTrue(anywarns)
73 def test_check_vercode_operation(self):
75 fdroidserver.common.fill_config_defaults(config)
76 fdroidserver.common.config = config
77 fdroidserver.lint.config = config
79 app = fdroidserver.metadata.App()
81 app.Summary = 'We pwn you'
82 app.Description = 'These are some back'
96 'open("/etc/passwd")',
104 for good in good_fields:
105 app.VercodeOperation = good
106 for warn in fdroidserver.lint.check_vercode_operation(app):
109 self.assertFalse(anywarns)
111 for bad in bad_fields:
113 app.VercodeOperation = bad
114 for warn in fdroidserver.lint.check_vercode_operation(app):
117 self.assertTrue(anywarns)
120 if __name__ == "__main__":
121 parser = optparse.OptionParser()
122 parser.add_option("-v", "--verbose", action="store_true", default=False,
123 help="Spew out even more information than normal")
124 (fdroidserver.lint.options, args) = parser.parse_args(['--verbose'])
125 fdroidserver.common.options = fdroidserver.lint.options
127 newSuite = unittest.TestSuite()
128 newSuite.addTest(unittest.makeSuite(LintTest))
129 unittest.main(failfast=False)