#!/usr/bin/env python # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. import os import tempfile import unittest import mozfile from mozversion import errors, get_version class SourcesTest(unittest.TestCase): """test getting version information from a sources xml""" application_ini = """[App]\nName = B2G\n""" platform_ini = """[Build] BuildID = PlatformBuildID SourceStamp = PlatformSourceStamp SourceRepository = PlatformSourceRepo """ sources_xml = """ """ def setUp(self): self.cwd = os.getcwd() self.tempdir = tempfile.mkdtemp() self.binary = os.path.join(self.tempdir, 'binary') with open(self.binary, 'w') as f: f.write('foobar') def tearDown(self): os.chdir(self.cwd) mozfile.remove(self.tempdir) def _write_conf_files(self, sources=True): with open(os.path.join(self.tempdir, 'application.ini'), 'w') as f: f.writelines(self.application_ini) with open(os.path.join(self.tempdir, 'platform.ini'), 'w') as f: f.writelines(self.platform_ini) if sources: with open(os.path.join(self.tempdir, 'sources.xml'), 'w') as f: f.writelines(self.sources_xml) def test_sources(self): self._write_conf_files() os.chdir(self.tempdir) self._check_version(get_version(sources=os.path.join(self.tempdir, 'sources.xml'))) def test_sources_in_current_directory(self): self._write_conf_files() os.chdir(self.tempdir) self._check_version(get_version()) def test_invalid_sources_path(self): """An invalid source path should cause an exception""" self.assertRaises(errors.AppNotFoundError, get_version, self.binary, os.path.join(self.tempdir, 'invalid')) def test_without_sources_file(self): """With a missing sources file no exception should be thrown""" self._write_conf_files(sources=False) get_version(self.binary) def _check_version(self, version): self.assertEqual(version.get('build_changeset'), 'build_revision') self.assertEqual(version.get('gaia_changeset'), 'gaia_revision') self.assertEqual(version.get('gecko_changeset'), 'gecko_revision') self.assertIsNone(version.get('invalid_key')) if __name__ == '__main__': unittest.main()