blob: 74d764c56af7c024e74e65d09dab4cbbd538b09e [file] [log] [blame]
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import unittest
import mock
from infra_libs import app
from infra_libs import logs
from infra_libs import ts_mon
class MockApplication(app.BaseApplication):
main = mock.Mock()
class AppTest(unittest.TestCase):
def setUp(self):
self.mock_logs_process_argparse_options = mock.patch(
'infra_libs.logs.process_argparse_options').start()
self.mock_ts_mon_process_argparse_options = mock.patch(
'infra_libs.ts_mon.process_argparse_options').start()
def tearDown(self):
mock.patch.stopall()
def test_initialises_standard_modules(self):
with self.assertRaises(SystemExit):
MockApplication().run(['appname'])
self.mock_logs_process_argparse_options.assert_called_once()
self.mock_ts_mon_process_argparse_options.assert_called_once()
def test_argparse_options(self):
test_case = self
class App(MockApplication):
def add_argparse_options(self, p):
test_case.assertIsInstance(p, argparse.ArgumentParser)
def process_argparse_options(self, o):
test_case.assertIsInstance(o, argparse.Namespace)
a = App()
with self.assertRaises(SystemExit):
a.run(['appname'])
def test_exit_status(self):
class App(app.BaseApplication):
def main(self, opts):
return 42
with self.assertRaises(SystemExit) as cm:
App().run(['appname'])
self.assertEqual(42, cm.exception.code)
def test_catches_exceptions(self):
a = MockApplication()
a.main.side_effect = Exception
with self.assertRaises(SystemExit) as cm:
a.run(['appname'])
self.assertEqual(1, cm.exception.code)