#!/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 mozunit import pytest from manifestparser.token import ManifestTokens, strip_unquoted class Index: def __init__(self): self.index = 1 self._manifest_tokens = ManifestTokens() def expected(self): self.index += 1 return self.index - 1 def manifest_tokens(self): return self._manifest_tokens def test_strip_unquoted(): assert strip_unquoted("") == "" assert strip_unquoted(" http3 ") == "http3" assert strip_unquoted("os == 'linux'") == "os == 'linux'" assert strip_unquoted(" os == 'Plucky Puffin' ") == "os == 'Plucky Puffin'" @pytest.fixture(scope="session") def index(): yield Index() @pytest.mark.parametrize( "test_index, condition, msg", [ ( 1, "", "empty condition", ), ( 2, "http3", "", ), ( 3, "http2 http3", "expected each operation to be an single variable or comparison", ), ( 4, "os <= 'android'", "unknown comparison operator '<=' in comparison: os <= 'android'", ), ( 5, "release == 'Plucky Puffin'", "unknown var 'release' in comparison: release == 'Plucky Puffin'", ), ( 6, "os == 'Plucky Puffin'", "unknown value 'Plucky Puffin' in comparison: os == 'Plucky Puffin'", ), ( 7, " os == 'android' && arch == 'x86_64' ", "", ), ( 8, "os_version == '22.04' && os == 'linux'", "variable os (rank 1) should appear before variable os_version (rank 2) in condition: os_version == '22.04' && os == 'linux'", ), ( 9, "os_version == '22.04' && os != 'linux'", "value 22.04 depends on os == 'linux' in condition: os_version == '22.04' && os != 'linux'", ), ( 10, "os_version <= '24.04'", "unknown comparison operator '<=' in comparison: os_version <= '24.04'", ), ( 11, "os == 'android' && os_version == '22.04'", "value 22.04 depends on os == 'linux' in condition: os == 'android' && os_version == '22.04'", ), ], ) def test_canonical_condition(index: Index, test_index: int, condition: str, msg: str): assert test_index == index.expected() test_msg = index.manifest_tokens().canonical_condition(condition) assert test_msg == msg if __name__ == "__main__": mozunit.main()