Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

#!/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 json
import os
import sys
from importlib import reload
from unittest import mock
import mozinfo
import mozunit
import pytest
@pytest.fixture(autouse=True)
def on_every_test():
# per-test set up
reload(mozinfo)
# When running from an objdir mozinfo will use a build generated json file
# instead of the ones created for testing. Prevent that from happening.
# See bug 896038 for details.
sys.modules["mozbuild"] = None
yield
# per-test tear down
del sys.modules["mozbuild"]
def test_basic():
"""Test that mozinfo has a few attributes."""
assert mozinfo.os is not None
# should have isFoo == True where os == "foo"
assert getattr(mozinfo, "is" + mozinfo.os[0].upper() + mozinfo.os[1:])
def test_update():
"""Test that mozinfo.update works."""
mozinfo.update({"foo": 123})
assert mozinfo.info["foo"] == 123
def test_update_file(tmpdir):
"""Test that mozinfo.update can load a JSON file."""
j = os.path.join(tmpdir, "mozinfo.json")
with open(j, "w") as f:
f.write(json.dumps({"foo": "xyz"}))
mozinfo.update(j)
assert mozinfo.info["foo"] == "xyz"
def test_update_file_invalid_json(tmpdir):
"""Test that mozinfo.update handles invalid JSON correctly"""
j = os.path.join(tmpdir, "test.json")
with open(j, "w") as f:
f.write('invalid{"json":')
with pytest.raises(ValueError):
mozinfo.update([j])
def test_find_and_update_file(tmpdir):
"""Test that mozinfo.find_and_update_from_json can
find mozinfo.json in a directory passed to it."""
j = os.path.join(tmpdir, "mozinfo.json")
with open(j, "w") as f:
f.write(json.dumps({"foo": "abcdefg"}))
assert mozinfo.find_and_update_from_json(tmpdir) == j
assert mozinfo.info["foo"] == "abcdefg"
def test_find_and_update_file_no_argument():
"""Test that mozinfo.find_and_update_from_json no-ops on not being
given any arguments.
"""
assert mozinfo.find_and_update_from_json() is None
def test_find_and_update_file_invalid_json(tmpdir):
"""Test that mozinfo.find_and_update_from_json can
handle invalid JSON"""
j = os.path.join(tmpdir, "mozinfo.json")
with open(j, "w") as f:
f.write('invalid{"json":')
with pytest.raises(ValueError):
mozinfo.find_and_update_from_json(tmpdir)
def test_find_and_update_file_raise_exception():
"""Test that mozinfo.find_and_update_from_json raises
an IOError when exceptions are unsuppressed.
"""
with pytest.raises(IOError):
mozinfo.find_and_update_from_json(raise_exception=True)
def test_find_and_update_file_suppress_exception():
"""Test that mozinfo.find_and_update_from_json suppresses
an IOError exception if a False boolean value is
provided as the only argument.
"""
assert mozinfo.find_and_update_from_json(raise_exception=False) is None
def test_find_and_update_file_mozbuild(tmpdir):
"""Test that mozinfo.find_and_update_from_json can
find mozinfo.json using the mozbuild module."""
j = os.path.join(tmpdir, "mozinfo.json")
with open(j, "w") as f:
f.write(json.dumps({"foo": "123456"}))
m = mock.MagicMock()
# Mock the value of MozbuildObject.from_environment().topobjdir.
m.MozbuildObject.from_environment.return_value.topobjdir = tmpdir
mocked_modules = {
"mozbuild": m,
"mozbuild.base": m,
"mozbuild.mozconfig": m,
}
with mock.patch.dict(sys.modules, mocked_modules):
assert mozinfo.find_and_update_from_json() == j
assert mozinfo.info["foo"] == "123456"
def test_output_to_file(tmpdir):
"""Test that mozinfo.output_to_file works."""
path = os.path.join(tmpdir, "mozinfo.json")
mozinfo.output_to_file(path)
assert open(path).read() == json.dumps(mozinfo.info)
def test_os_version_is_a_StringVersion():
assert isinstance(mozinfo.os_version, mozinfo.StringVersion)
def test_compare_to_string():
version = mozinfo.StringVersion("10.10")
assert version > "10.2"
assert "11" > version
assert version >= "10.10"
assert "10.11" >= version
assert version == "10.10"
assert "10.10" == version
assert version != "10.2"
assert "11" != version
assert version < "11.8.5"
assert "10.2" < version
assert version <= "11"
assert "10.10" <= version
# Can have non-numeric versions (Bug 1654915)
assert version != mozinfo.StringVersion("Testing")
assert mozinfo.StringVersion("Testing") != version
assert mozinfo.StringVersion("") == ""
assert "" == mozinfo.StringVersion("")
a = mozinfo.StringVersion("1.2.5a")
b = mozinfo.StringVersion("1.2.5b")
assert a < b
assert b > a
# Make sure we can compare against unicode (for python 2).
assert a == "1.2.5a"
assert "1.2.5a" == a
def test_to_string():
assert "10.10" == str(mozinfo.StringVersion("10.10"))
if __name__ == "__main__":
mozunit.main()