blob: ec230f67b928808588737865950ef063e0b7173a [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2019 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Tests the generate_sabi_id module."""
import json
import os
import sys
import tempfile
import unittest
sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
# pylint: disable=wrong-import-position
from starboard.sabi import generate_sabi_id
from starboard.tools import paths
_TEST_SABI = os.path.join(paths.STARBOARD_ROOT, 'sabi', 'test', 'sabi.json')
# pylint: disable=line-too-long
_TEST_SABI_ID = '{"alignment_char":1,"alignment_double":8,"alignment_float":4,"alignment_int":4,"alignment_llong":8,"alignment_long":8,"alignment_pointer":8,"alignment_short":2,"calling_convention":"sysv","endianness":"little","floating_point_abi":"","floating_point_fpu":"","sb_api_version":12,"signedness_of_char":"signed","signedness_of_enum":"signed","size_of_char":1,"size_of_double":8,"size_of_enum":4,"size_of_float":4,"size_of_int":4,"size_of_llong":8,"size_of_long":8,"size_of_pointer":8,"size_of_short":2,"target_arch":"x64","target_arch_sub":"","word_size":64}'
_TEST_SABI_ID_OMAHA = '"\\\\{\\"alignment_char\\":1,\\"alignment_double\\":8,\\"alignment_float\\":4,\\"alignment_int\\":4,\\"alignment_llong\\":8,\\"alignment_long\\":8,\\"alignment_pointer\\":8,\\"alignment_short\\":2,\\"calling_convention\\":\\"sysv\\",\\"endianness\\":\\"little\\",\\"floating_point_abi\\":\\"\\",\\"floating_point_fpu\\":\\"\\",\\"sb_api_version\\":12,\\"signedness_of_char\\":\\"signed\\",\\"signedness_of_enum\\":\\"signed\\",\\"size_of_char\\":1,\\"size_of_double\\":8,\\"size_of_enum\\":4,\\"size_of_float\\":4,\\"size_of_int\\":4,\\"size_of_llong\\":8,\\"size_of_long\\":8,\\"size_of_pointer\\":8,\\"size_of_short\\":2,\\"target_arch\\":\\"x64\\",\\"target_arch_sub\\":\\"\\",\\"word_size\\":64\\\\}"'
# pylint: enable=line-too-long
class GenerateSabiIdTest(unittest.TestCase):
def testRainyDayNoFileNoPlatform(self):
with self.assertRaises(TypeError):
generate_sabi_id.DoMain([])
def testRainyDayNonexistentFile(self):
with self.assertRaises(IOError):
generate_sabi_id.DoMain(['-f', 'invalid_filename'])
# TODO(b/281098312): fix and re-enable this
@unittest.skipIf(os.name == 'nt',
'Broken on Windows due to temp path handling')
def testRainyDayBadFile(self):
bad_sabi_json = tempfile.NamedTemporaryFile(mode='w') # pylint: disable=consider-using-with
bad_sabi_json.write('{}')
with self.assertRaises(json.decoder.JSONDecodeError):
generate_sabi_id.DoMain(['-f', bad_sabi_json.name])
def testSunnyDayNotOmaha(self):
sabi_id = generate_sabi_id.DoMain(['-f', _TEST_SABI])
self.assertEqual(_TEST_SABI_ID, sabi_id)
def testSunnyDayOmaha(self):
sabi_id = generate_sabi_id.DoMain(['-f', _TEST_SABI, '-o'])
self.assertEqual(_TEST_SABI_ID_OMAHA, sabi_id)
if __name__ == '__main__':
unittest.main()