1# Copyright 2024 The Chromium Authors 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5from __future__ import annotations 6 7import abc 8import pathlib 9 10from crossbench.browsers.firefox.downloader import (FirefoxDownloader, 11 FirefoxDownloaderLinux, 12 FirefoxDownloaderMacOS, 13 FirefoxDownloaderWin) 14from tests import test_helper 15from tests.crossbench.browsers.downloader_helper import \ 16 AbstractDownloaderTestCase 17 18 19class AbstractFirefoxDownloaderTestCase( 20 AbstractDownloaderTestCase, metaclass=abc.ABCMeta): 21 __test__ = False 22 23 def test_wrong_versions(self) -> None: 24 with self.assertRaises(ValueError): 25 FirefoxDownloader.load("", self.platform) 26 with self.assertRaises(ValueError): 27 FirefoxDownloader.load("ff", self.platform) 28 with self.assertRaises(ValueError): 29 FirefoxDownloader.load("firefox", self.platform) 30 with self.assertRaises(ValueError): 31 FirefoxDownloader.load("124-0.2", self.platform) 32 with self.assertRaises(ValueError): 33 FirefoxDownloader.load("124-0.2", self.platform) 34 with self.assertRaises(ValueError): 35 FirefoxDownloader.load("124.0ab2", self.platform) 36 with self.assertRaises(ValueError): 37 FirefoxDownloader.load("124.0.2.3.5", self.platform) 38 39 def test_valid_versions_stable(self): 40 self.assertFalse(FirefoxDownloader.is_valid("124.0.2", self.platform)) 41 self.assertTrue(FirefoxDownloader.is_valid("ff-124.0.2", self.platform)) 42 self.assertTrue( 43 FirefoxDownloader.is_valid("firefox-124.0.2", self.platform)) 44 45 def test_valid_versions_beta(self): 46 self.assertTrue(FirefoxDownloader.is_valid("104.0b9", self.platform)) 47 self.assertTrue(FirefoxDownloader.is_valid("ff-104.0b9", self.platform)) 48 self.assertTrue( 49 FirefoxDownloader.is_valid("firefox-104.0b9", self.platform)) 50 51 self.assertFalse(FirefoxDownloader.is_valid("104.0ab9", self.platform)) 52 self.assertFalse(FirefoxDownloader.is_valid("ff-104.0ab9", self.platform)) 53 self.assertFalse( 54 FirefoxDownloader.is_valid("firefox-104.0ab9", self.platform)) 55 56 def test_valid_versions_esr(self): 57 self.assertTrue(FirefoxDownloader.is_valid("115.0.3esr", self.platform)) 58 self.assertTrue(FirefoxDownloader.is_valid("ff-115.0.3esr", self.platform)) 59 self.assertTrue( 60 FirefoxDownloader.is_valid("firefox-115.0.3esr", self.platform)) 61 62 self.assertFalse(FirefoxDownloader.is_valid("115.0a3esr", self.platform)) 63 self.assertFalse(FirefoxDownloader.is_valid("ff-115.0a3esr", self.platform)) 64 self.assertFalse( 65 FirefoxDownloader.is_valid("firefox-115.0a3esr", self.platform)) 66 67 def test_empty_path(self) -> None: 68 with self.assertRaises(ValueError): 69 FirefoxDownloader.load(pathlib.Path("custom"), self.platform) 70 71 72class BasicFirefoxDownloaderLinuxTestCase(AbstractFirefoxDownloaderTestCase): 73 __test__ = True 74 75 def setUp(self) -> None: 76 super().setUp() 77 self.platform.is_linux = True 78 79 def test_is_valid_archive(self) -> None: 80 path = pathlib.Path("download/archive.tar.bz2") 81 self.fs.create_file(path) 82 self.assertTrue(FirefoxDownloader.is_valid(path, self.platform)) 83 self.assertTrue(FirefoxDownloaderLinux.is_valid(path, self.platform)) 84 self.assertFalse(FirefoxDownloaderMacOS.is_valid(path, self.platform)) 85 self.assertFalse(FirefoxDownloaderWin.is_valid(path, self.platform)) 86 87 88class BasicFirefoxDownloaderMacOSTestCase(AbstractFirefoxDownloaderTestCase): 89 __test__ = True 90 91 def setUp(self) -> None: 92 super().setUp() 93 self.platform.is_macos = True 94 95 def test_is_valid_archive(self) -> None: 96 path = pathlib.Path("download/archive.dmg") 97 self.fs.create_file(path) 98 self.assertTrue(FirefoxDownloader.is_valid(path, self.platform)) 99 self.assertFalse(FirefoxDownloaderLinux.is_valid(path, self.platform)) 100 self.assertTrue(FirefoxDownloaderMacOS.is_valid(path, self.platform)) 101 self.assertFalse(FirefoxDownloaderWin.is_valid(path, self.platform)) 102 103 104if __name__ == "__main__": 105 test_helper.run_pytest(__file__) 106