| #!/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 mozinfo |
| import mozinstall |
| import mozfile |
| import os |
| import tempfile |
| import unittest |
| |
| # Store file location at load time |
| here = os.path.dirname(os.path.abspath(__file__)) |
| |
| class TestMozInstall(unittest.TestCase): |
| |
| @classmethod |
| def setUpClass(cls): |
| """ Setting up stub installers """ |
| cls.dmg = os.path.join(here, 'Installer-Stubs', 'firefox.dmg') |
| # XXX: We have removed firefox.exe since it is not valid for mozinstall 1.12 and higher |
| # Bug 1157352 - We should grab a firefox.exe from the build process or download it |
| cls.exe = os.path.join(here, 'Installer-Stubs', 'firefox.exe') |
| cls.zipfile = os.path.join(here, 'Installer-Stubs', 'firefox.zip') |
| cls.bz2 = os.path.join(here, 'Installer-Stubs', 'firefox.tar.bz2') |
| |
| def setUp(self): |
| self.tempdir = tempfile.mkdtemp() |
| |
| def tearDown(self): |
| mozfile.rmtree(self.tempdir) |
| |
| @unittest.skipIf(mozinfo.isWin, "Bug 1157352 - We need a new firefox.exe for mozinstall 1.12 and higher.") |
| def test_get_binary(self): |
| """ Test mozinstall's get_binary method """ |
| |
| if mozinfo.isLinux: |
| installdir = mozinstall.install(self.bz2, self.tempdir) |
| binary = os.path.join(installdir, 'firefox') |
| self.assertEqual(binary, mozinstall.get_binary(installdir, 'firefox')) |
| |
| elif mozinfo.isWin: |
| installdir_exe = mozinstall.install(self.exe, |
| os.path.join(self.tempdir, 'exe')) |
| binary_exe = os.path.join(installdir_exe, 'core', 'firefox.exe') |
| self.assertEqual(binary_exe, mozinstall.get_binary(installdir_exe, |
| 'firefox')) |
| |
| installdir_zip = mozinstall.install(self.zipfile, |
| os.path.join(self.tempdir, 'zip')) |
| binary_zip = os.path.join(installdir_zip, 'firefox.exe') |
| self.assertEqual(binary_zip, mozinstall.get_binary(installdir_zip, |
| 'firefox')) |
| |
| elif mozinfo.isMac: |
| installdir = mozinstall.install(self.dmg, self.tempdir) |
| binary = os.path.join(installdir, 'Contents', 'MacOS', 'firefox') |
| self.assertEqual(binary, mozinstall.get_binary(installdir, 'firefox')) |
| |
| def test_get_binary_error(self): |
| """ Test an InvalidBinary error is raised """ |
| |
| tempdir_empty = tempfile.mkdtemp() |
| self.assertRaises(mozinstall.InvalidBinary, mozinstall.get_binary, |
| tempdir_empty, 'firefox') |
| mozfile.rmtree(tempdir_empty) |
| |
| @unittest.skipIf(mozinfo.isWin, "Bug 1157352 - We need a new firefox.exe for mozinstall 1.12 and higher.") |
| def test_is_installer(self): |
| """ Test we can identify a correct installer """ |
| |
| if mozinfo.isLinux: |
| self.assertTrue(mozinstall.is_installer(self.bz2)) |
| |
| if mozinfo.isWin: |
| # test zip installer |
| self.assertTrue(mozinstall.is_installer(self.zipfile)) |
| |
| # test exe installer |
| self.assertTrue(mozinstall.is_installer(self.exe)) |
| |
| try: |
| # test stub browser file |
| # without pefile on the system this test will fail |
| import pefile |
| stub_exe = os.path.join(here, 'build_stub', 'firefox.exe') |
| self.assertFalse(mozinstall.is_installer(stub_exe)) |
| except ImportError: |
| pass |
| |
| if mozinfo.isMac: |
| self.assertTrue(mozinstall.is_installer(self.dmg)) |
| |
| def test_invalid_source_error(self): |
| """ Test InvalidSource error is raised with an incorrect installer """ |
| |
| if mozinfo.isLinux: |
| self.assertRaises(mozinstall.InvalidSource, mozinstall.install, |
| self.dmg, 'firefox') |
| |
| elif mozinfo.isWin: |
| self.assertRaises(mozinstall.InvalidSource, mozinstall.install, |
| self.bz2, 'firefox') |
| |
| elif mozinfo.isMac: |
| self.assertRaises(mozinstall.InvalidSource, mozinstall.install, |
| self.bz2, 'firefox') |
| |
| @unittest.skipIf(mozinfo.isWin, "Bug 1157352 - We need a new firefox.exe for mozinstall 1.12 and higher.") |
| def test_install(self): |
| """ Test mozinstall's install capability """ |
| |
| if mozinfo.isLinux: |
| installdir = mozinstall.install(self.bz2, self.tempdir) |
| self.assertEqual(os.path.join(self.tempdir, 'firefox'), installdir) |
| |
| elif mozinfo.isWin: |
| installdir_exe = mozinstall.install(self.exe, |
| os.path.join(self.tempdir, 'exe')) |
| self.assertEqual(os.path.join(self.tempdir, 'exe', 'firefox'), |
| installdir_exe) |
| |
| installdir_zip = mozinstall.install(self.zipfile, |
| os.path.join(self.tempdir, 'zip')) |
| self.assertEqual(os.path.join(self.tempdir, 'zip', 'firefox'), |
| installdir_zip) |
| |
| elif mozinfo.isMac: |
| installdir = mozinstall.install(self.dmg, self.tempdir) |
| self.assertEqual(os.path.join(os.path.realpath(self.tempdir), |
| 'FirefoxStub.app'), installdir) |
| |
| @unittest.skipIf(mozinfo.isWin, "Bug 1157352 - We need a new firefox.exe for mozinstall 1.12 and higher.") |
| def test_uninstall(self): |
| """ Test mozinstall's uninstall capabilites """ |
| # Uninstall after installing |
| |
| if mozinfo.isLinux: |
| installdir = mozinstall.install(self.bz2, self.tempdir) |
| mozinstall.uninstall(installdir) |
| self.assertFalse(os.path.exists(installdir)) |
| |
| elif mozinfo.isWin: |
| # Exe installer for Windows |
| installdir_exe = mozinstall.install(self.exe, |
| os.path.join(self.tempdir, 'exe')) |
| mozinstall.uninstall(installdir_exe) |
| self.assertFalse(os.path.exists(installdir_exe)) |
| |
| # Zip installer for Windows |
| installdir_zip = mozinstall.install(self.zipfile, |
| os.path.join(self.tempdir, 'zip')) |
| mozinstall.uninstall(installdir_zip) |
| self.assertFalse(os.path.exists(installdir_zip)) |
| |
| elif mozinfo.isMac: |
| installdir = mozinstall.install(self.dmg, self.tempdir) |
| mozinstall.uninstall(installdir) |
| self.assertFalse(os.path.exists(installdir)) |
| |
| if __name__ == '__main__': |
| unittest.main() |