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