3 # http://www.drdobbs.com/testing/unit-testing-with-python/240165163
13 localmodule = os.path.realpath(
14 os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..'))
15 print('localmodule: ' + localmodule)
16 if localmodule not in sys.path:
17 sys.path.insert(0, localmodule)
19 import fdroidserver.common
20 import fdroidserver.metadata
23 class MetadataTest(unittest.TestCase):
24 '''fdroidserver/metadata.py'''
26 def test_read_metadata(self):
28 def _build_yaml_representer(dumper, data):
29 '''Creates a YAML representation of a Build instance'''
30 return dumper.represent_dict(data)
32 testsdir = os.path.dirname(__file__)
37 # these need to be set to prevent code running on None, only
38 # 'accepted_formats' is actually used in metadata.py
40 config['sdk_path'] = '/opt/android-sdk'
41 config['ndk_paths'] = dict()
42 config['accepted_formats'] = ['json', 'txt', 'yml']
43 fdroidserver.common.config = config
45 apps = fdroidserver.metadata.read_metadata(xref=True)
46 for appid in ('org.smssecure.smssecure', 'org.adaway', 'org.videolan.vlc'):
47 savepath = os.path.join('metadata', 'dump', appid + '.yaml')
48 frommeta = dict(apps[appid])
49 self.assertTrue(appid in apps)
50 with open(savepath, 'r') as f:
51 frompickle = yaml.load(f)
52 self.assertEqual(frommeta, frompickle)
53 # Uncomment to overwrite
54 # with open(savepath, 'w') as f:
55 # yaml.add_representer(fdroidserver.metadata.Build, _build_yaml_representer)
56 # yaml.dump(frommeta, f, default_flow_style=False)
58 def test_rewrite_yaml_fakeotaupdate(self):
60 # setup/reset test dir if necessary and setup params
61 tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
62 if not os.path.exists(tmpdir):
64 testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
65 fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
68 allapps = fdroidserver.metadata.read_metadata(xref=True)
69 for appid, app in allapps.items():
70 if appid == 'fake.ota.update':
71 fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
73 # assert rewrite result
74 with open(os.path.join(testdir, 'fake.ota.update.yml'), 'r', encoding='utf-8') as result:
75 with open('metadata/rewrite-yml/fake.ota.update.yml', 'r', encoding='utf-8') as orig:
77 self.assertEqual(result.read(), orig.read())
79 def test_rewrite_yaml_fdroidclient(self):
81 # setup/reset test dir if necessary and setup params
82 tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
83 if not os.path.exists(tmpdir):
85 testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
86 fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
89 allapps = fdroidserver.metadata.read_metadata(xref=True)
90 for appid, app in allapps.items():
91 if appid == 'org.fdroid.fdroid':
92 fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
94 # assert rewrite result
95 with open(os.path.join(testdir, 'org.fdroid.fdroid.yml'), 'r', encoding='utf-8') as result:
96 with open('metadata/rewrite-yml/org.fdroid.fdroid.yml', 'r', encoding='utf-8') as orig:
98 self.assertEqual(result.read(), orig.read())
100 def test_rewrite_yaml_special_build_params(self):
102 # setup/reset test dir if necessary and setup params
103 tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
104 if not os.path.exists(tmpdir):
106 testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
107 fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
110 allapps = fdroidserver.metadata.read_metadata(xref=True)
111 for appid, app in allapps.items():
112 if appid == 'app.with.special.build.params':
113 fdroidserver.metadata.write_metadata(os.path.join(testdir, appid + '.yml'), app)
115 # assert rewrite result
116 with open(os.path.join(testdir, 'app.with.special.build.params.yml'), 'r', encoding='utf-8') as result:
117 with open('metadata/rewrite-yml/app.with.special.build.params.yml', 'r', encoding='utf-8') as orig:
119 self.assertEqual(result.read(), orig.read())
122 if __name__ == "__main__":
123 parser = optparse.OptionParser()
124 parser.add_option("-v", "--verbose", action="store_true", default=False,
125 help="Spew out even more information than normal")
126 (fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
128 newSuite = unittest.TestSuite()
129 newSuite.addTest(unittest.makeSuite(MetadataTest))