diff options
Diffstat (limited to 'python/mozbuild/mozbuild/test/test_mozinfo.py')
-rwxr-xr-x | python/mozbuild/mozbuild/test/test_mozinfo.py | 318 |
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() |