1#!/usr/bin/env python 2# Copyright 2013 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import os 7import sys 8import unittest 9 10SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) 11PARENT_DIR = os.path.dirname(SCRIPT_DIR) 12DATA_DIR = os.path.join(SCRIPT_DIR, 'data') 13CHROME_SRC = os.path.dirname(os.path.dirname(os.path.dirname(PARENT_DIR))) 14MOCK_DIR = os.path.join(CHROME_SRC, "third_party", "pymock") 15 16# For the mock library 17sys.path.append(MOCK_DIR) 18sys.path.append(PARENT_DIR) 19 20import sel_ldr 21import mock 22 23 24class TestSelLdr(unittest.TestCase): 25 def testRequiresArg(self): 26 with mock.patch('sys.stderr'): 27 self.assertRaises(SystemExit, sel_ldr.main, []) 28 29 def testUsesHelper(self): 30 with mock.patch('subprocess.call') as call: 31 with mock.patch('os.path.exists'): 32 with mock.patch('os.path.isfile'): 33 with mock.patch('create_nmf.ParseElfHeader') as parse_header: 34 parse_header.return_value = ('x8-64', False) 35 with mock.patch('getos.GetPlatform') as get_platform: 36 # assert that when we are running on linux 37 # the helper is used. 38 get_platform.return_value = 'linux' 39 sel_ldr.main(['foo.nexe']) 40 parse_header.assert_called_once_with('foo.nexe') 41 self.assertEqual(call.call_count, 1) 42 cmd = call.call_args[0][0] 43 self.assertTrue('helper_bootstrap' in cmd[0]) 44 45 # assert that when not running on linux the 46 # helper is not used. 47 get_platform.reset_mock() 48 parse_header.reset_mock() 49 call.reset_mock() 50 get_platform.return_value = 'win' 51 sel_ldr.main(['foo.nexe']) 52 parse_header.assert_called_once_with('foo.nexe') 53 self.assertEqual(call.call_count, 1) 54 cmd = call.call_args[0][0] 55 self.assertTrue('helper_bootstrap' not in cmd[0]) 56 57 58if __name__ == '__main__': 59 unittest.main() 60