blob: f95bf1770fdf4587b92b1ab0af61db7ab414ca68 [file] [log] [blame]
#!/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
from StringIO import StringIO
import mozunit
from mozbuild.backend.configenvironment import ConfigEnvironment
from mozbuild.mozinfo import (
build_dict,
write_mozinfo,
)
from mozfile.mozfile import NamedTemporaryFile
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='gtk2',
)))
self.assertEqual('linux', d['os'])
self.assertEqual('x86', d['processor'])
self.assertEqual('gtk2', d['toolkit'])
self.assertEqual(32, d['bits'])
d = build_dict(self._config(dict(
OS_TARGET='Linux',
TARGET_CPU='x86_64',
MOZ_WIDGET_TOOLKIT='gtk2',
)))
self.assertEqual('linux', d['os'])
self.assertEqual('x86_64', d['processor'])
self.assertEqual('gtk2', 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_mac_universal(self):
d = build_dict(self._config(dict(
OS_TARGET='Darwin',
TARGET_CPU='i386',
MOZ_WIDGET_TOOLKIT='cocoa',
UNIVERSAL_BINARY='1',
)))
self.assertEqual('mac', d['os'])
self.assertEqual('universal-x86-x86_64', d['processor'])
self.assertEqual('cocoa', d['toolkit'])
self.assertFalse('bits' in d)
d = build_dict(self._config(dict(
OS_TARGET='Darwin',
TARGET_CPU='x86_64',
MOZ_WIDGET_TOOLKIT='cocoa',
UNIVERSAL_BINARY='1',
)))
self.assertEqual('mac', d['os'])
self.assertEqual('universal-x86-x86_64', d['processor'])
self.assertEqual('cocoa', d['toolkit'])
self.assertFalse('bits' in d)
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='gtk2',
)))
self.assertEqual('arm', d['processor'])
d = build_dict(self._config(dict(
OS_TARGET='Linux',
TARGET_CPU='armv7',
MOZ_WIDGET_TOOLKIT='gtk2',
)))
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='gtk2',
)))
self.assertEqual(False, d['debug'])
d = build_dict(self._config(dict(
OS_TARGET='Linux',
TARGET_CPU='i386',
MOZ_WIDGET_TOOLKIT='gtk2',
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='gtk2',
)))
self.assertEqual(False, d['crashreporter'])
d = build_dict(self._config(dict(
OS_TARGET='Linux',
TARGET_CPU='i386',
MOZ_WIDGET_TOOLKIT='gtk2',
MOZ_CRASHREPORTER='1',
)))
self.assertEqual(True, d['crashreporter'])
class TestWriteMozinfo(unittest.TestCase, Base):
"""
Test the write_mozinfo function.
"""
def setUp(self):
fd, self.f = tempfile.mkstemp()
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.tempdir
c.topsrcdir = tempdir
with NamedTemporaryFile(dir=os.path.normpath(c.topsrcdir)) as mozconfig:
mozconfig.write('unused contents')
mozconfig.flush()
write_mozinfo(self.f, c, {'MOZCONFIG': mozconfig.name})
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()