summaryrefslogtreecommitdiffstats
path: root/python/mozbuild/mozbuild/test/test_mozinfo.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/mozbuild/mozbuild/test/test_mozinfo.py')
-rwxr-xr-xpython/mozbuild/mozbuild/test/test_mozinfo.py318
1 files changed, 318 insertions, 0 deletions
diff --git a/python/mozbuild/mozbuild/test/test_mozinfo.py b/python/mozbuild/mozbuild/test/test_mozinfo.py
new file mode 100755
index 0000000000..0d966b3dcc
--- /dev/null
+++ b/python/mozbuild/mozbuild/test/test_mozinfo.py
@@ -0,0 +1,318 @@
+#!/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 tempfile
+import unittest
+
+import mozunit
+import six
+from mozfile.mozfile import NamedTemporaryFile
+from six import StringIO
+
+from mozbuild.backend.configenvironment import ConfigEnvironment
+from mozbuild.mozinfo import build_dict, write_mozinfo
+
+
+class Base(object):
+ def _config(self, substs={}):
+ d = os.path.dirname(__file__)
+ return ConfigEnvironment(d, d, substs=substs)
+
+
+class TestBuildDict(unittest.TestCase, Base):
+ def test_missing(self):
+ """
+ Test that missing required values raises.
+ """
+
+ with self.assertRaises(Exception):
+ build_dict(self._config(substs=dict(OS_TARGET="foo")))
+
+ with self.assertRaises(Exception):
+ build_dict(self._config(substs=dict(TARGET_CPU="foo")))
+
+ with self.assertRaises(Exception):
+ build_dict(self._config(substs=dict(MOZ_WIDGET_TOOLKIT="foo")))
+
+ def test_win(self):
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="WINNT",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="windows",
+ )
+ )
+ )
+ self.assertEqual("win", d["os"])
+ self.assertEqual("x86", d["processor"])
+ self.assertEqual("windows", d["toolkit"])
+ self.assertEqual(32, d["bits"])
+
+ def test_linux(self):
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ )
+ )
+ )
+ self.assertEqual("linux", d["os"])
+ self.assertEqual("x86", d["processor"])
+ self.assertEqual("gtk", d["toolkit"])
+ self.assertEqual(32, d["bits"])
+
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="x86_64",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ )
+ )
+ )
+ self.assertEqual("linux", d["os"])
+ self.assertEqual("x86_64", d["processor"])
+ self.assertEqual("gtk", d["toolkit"])
+ self.assertEqual(64, d["bits"])
+
+ def test_mac(self):
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Darwin",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="cocoa",
+ )
+ )
+ )
+ self.assertEqual("mac", d["os"])
+ self.assertEqual("x86", d["processor"])
+ self.assertEqual("cocoa", d["toolkit"])
+ self.assertEqual(32, d["bits"])
+
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Darwin",
+ TARGET_CPU="x86_64",
+ MOZ_WIDGET_TOOLKIT="cocoa",
+ )
+ )
+ )
+ self.assertEqual("mac", d["os"])
+ self.assertEqual("x86_64", d["processor"])
+ self.assertEqual("cocoa", d["toolkit"])
+ self.assertEqual(64, d["bits"])
+
+ def test_android(self):
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Android",
+ TARGET_CPU="arm",
+ MOZ_WIDGET_TOOLKIT="android",
+ )
+ )
+ )
+ self.assertEqual("android", d["os"])
+ self.assertEqual("arm", d["processor"])
+ self.assertEqual("android", d["toolkit"])
+ self.assertEqual(32, d["bits"])
+
+ def test_x86(self):
+ """
+ Test that various i?86 values => x86.
+ """
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="WINNT",
+ TARGET_CPU="i486",
+ MOZ_WIDGET_TOOLKIT="windows",
+ )
+ )
+ )
+ self.assertEqual("x86", d["processor"])
+
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="WINNT",
+ TARGET_CPU="i686",
+ MOZ_WIDGET_TOOLKIT="windows",
+ )
+ )
+ )
+ self.assertEqual("x86", d["processor"])
+
+ def test_arm(self):
+ """
+ Test that all arm CPU architectures => arm.
+ """
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="arm",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ )
+ )
+ )
+ self.assertEqual("arm", d["processor"])
+
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="armv7",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ )
+ )
+ )
+ self.assertEqual("arm", d["processor"])
+
+ def test_unknown(self):
+ """
+ Test that unknown values pass through okay.
+ """
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="RandOS",
+ TARGET_CPU="cptwo",
+ MOZ_WIDGET_TOOLKIT="foobar",
+ )
+ )
+ )
+ self.assertEqual("randos", d["os"])
+ self.assertEqual("cptwo", d["processor"])
+ self.assertEqual("foobar", d["toolkit"])
+ # unknown CPUs should not get a bits value
+ self.assertFalse("bits" in d)
+
+ def test_debug(self):
+ """
+ Test that debug values are properly detected.
+ """
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ )
+ )
+ )
+ self.assertEqual(False, d["debug"])
+
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ MOZ_DEBUG="1",
+ )
+ )
+ )
+ self.assertEqual(True, d["debug"])
+
+ def test_crashreporter(self):
+ """
+ Test that crashreporter values are properly detected.
+ """
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ )
+ )
+ )
+ self.assertEqual(False, d["crashreporter"])
+
+ d = build_dict(
+ self._config(
+ dict(
+ OS_TARGET="Linux",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="gtk",
+ MOZ_CRASHREPORTER="1",
+ )
+ )
+ )
+ self.assertEqual(True, d["crashreporter"])
+
+
+class TestWriteMozinfo(unittest.TestCase, Base):
+ """
+ Test the write_mozinfo function.
+ """
+
+ def setUp(self):
+ fd, f = tempfile.mkstemp()
+ self.f = six.ensure_text(f)
+ os.close(fd)
+
+ def tearDown(self):
+ os.unlink(self.f)
+
+ def test_basic(self):
+ """
+ Test that writing to a file produces correct output.
+ """
+ c = self._config(
+ dict(
+ OS_TARGET="WINNT",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="windows",
+ )
+ )
+ tempdir = tempfile.gettempdir()
+ c.topsrcdir = tempdir
+ with NamedTemporaryFile(
+ dir=os.path.normpath(c.topsrcdir), mode="wt"
+ ) as mozconfig:
+ mozconfig.write("unused contents")
+ mozconfig.flush()
+ c.mozconfig = mozconfig.name
+ write_mozinfo(self.f, c)
+ with open(self.f) as f:
+ d = json.load(f)
+ self.assertEqual("win", d["os"])
+ self.assertEqual("x86", d["processor"])
+ self.assertEqual("windows", d["toolkit"])
+ self.assertEqual(tempdir, d["topsrcdir"])
+ self.assertEqual(mozconfig.name, d["mozconfig"])
+ self.assertEqual(32, d["bits"])
+
+ def test_fileobj(self):
+ """
+ Test that writing to a file-like object produces correct output.
+ """
+ s = StringIO()
+ c = self._config(
+ dict(
+ OS_TARGET="WINNT",
+ TARGET_CPU="i386",
+ MOZ_WIDGET_TOOLKIT="windows",
+ )
+ )
+ write_mozinfo(s, c)
+ d = json.loads(s.getvalue())
+ self.assertEqual("win", d["os"])
+ self.assertEqual("x86", d["processor"])
+ self.assertEqual("windows", d["toolkit"])
+ self.assertEqual(32, d["bits"])
+
+
+if __name__ == "__main__":
+ mozunit.main()