blob: f48345542d6d7601259ccfcd9f5429c15ebeb9c0 [file] [log] [blame]
# Copyright 2014 The Native Client 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 os
import mock
from mock import patch, Mock
import StringIO
import common
import webports.__main__
from webports import error
from webports.configuration import Configuration
# pylint: disable=no-self-use
class TestMain(common.NaclportsTest):
def setUp(self):
super(TestMain, self).setUp()
self.AddPatch(patch('webports.util.CheckSDKRoot'))
@patch('webports.util.Log', Mock())
@patch('webports.util.RemoveTree')
def testCleanAll(self, mock_rmtree):
config = Configuration()
webports.__main__.CleanAll(config)
mock_rmtree.assert_any_call('/package/install/path')
@patch('webports.__main__.RunMain', Mock(side_effect=error.Error('oops')))
def testErrorReport(self):
# Verify that exceptions of the type error.Error are printed
# to stderr and result in a return code of 1
with patch('sys.stderr', new_callable=StringIO.StringIO) as stderr:
self.assertEqual(webports.__main__.main(None), 1)
self.assertRegexpMatches(stderr.getvalue(), '^webports: oops')
@patch('webports.__main__.CmdPkgClean')
def testMainCommandDispatch(self, cmd_pkg_clean):
mock_pkg = Mock()
with patch('webports.source_package.CreatePackage',
Mock(return_value=mock_pkg)):
webports.__main__.RunMain(['clean', 'foo'])
cmd_pkg_clean.assert_called_once_with(mock_pkg, mock.ANY)
@patch('webports.__main__.CmdPkgClean',
Mock(side_effect=error.DisabledError()))
def testMainHandlePackageDisabled(self):
mock_pkg = Mock()
with patch('webports.source_package.CreatePackage',
Mock(return_value=mock_pkg)):
with self.assertRaises(error.DisabledError):
webports.__main__.RunMain(['clean', 'foo'])
@patch('webports.__main__.CleanAll')
def testMainCleanAll(self, clean_all_mock):
webports.__main__.RunMain(['clean', '--all'])
clean_all_mock.assert_called_once_with(Configuration())
class TestCommands(common.NaclportsTest):
def testListCommand(self):
config = Configuration()
pkg = Mock(NAME='foo', VERSION='0.1')
with patch('webports.installed_package.InstalledPackageIterator',
Mock(return_value=[pkg])):
with patch('sys.stdout', new_callable=StringIO.StringIO) as stdout:
options = Mock(all=False)
webports.__main__.CmdList(config, options, [])
lines = stdout.getvalue().splitlines()
self.assertRegexpMatches(lines[0], '^foo\\s+0.1$')
self.assertEqual(len(lines), 1)
def testListCommandVerbose(self):
config = Configuration()
pkg = Mock(NAME='foo', VERSION='0.1')
with patch('webports.installed_package.InstalledPackageIterator',
Mock(return_value=[pkg])):
with patch('sys.stdout', new_callable=StringIO.StringIO) as stdout:
options = Mock(verbosity=0, all=False)
webports.__main__.CmdList(config, options, [])
lines = stdout.getvalue().splitlines()
self.assertRegexpMatches(lines[0], "^foo$")
self.assertEqual(len(lines), 1)
@patch('webports.installed_package.CreateInstalledPackage', Mock())
def testInfoCommand(self):
config = Configuration()
options = Mock()
file_mock = common.MockFileObject('FOO=bar\n')
with patch('sys.stdout', new_callable=StringIO.StringIO) as stdout:
with patch('__builtin__.open', Mock(return_value=file_mock), create=True):
webports.__main__.CmdInfo(config, options, ['foo'])
self.assertRegexpMatches(stdout.getvalue(), "FOO=bar")
def testContentsCommand(self):
file_list = ['foo', 'bar']
options = Mock(verbosity=0, all=False)
package = Mock(NAME='test', Files=Mock(return_value=file_list))
expected_output = '\n'.join(file_list) + '\n'
with patch('sys.stdout', new_callable=StringIO.StringIO) as stdout:
webports.__main__.CmdPkgContents(package, options)
self.assertEqual(stdout.getvalue(), expected_output)
# when the verbose option is set expect CmdContents to output full paths.
webports.util.log_level = webports.util.LOG_VERBOSE
expected_output = [os.path.join('/package/install/path', f)
for f in file_list]
expected_output = '\n'.join(expected_output) + '\n'
with patch('sys.stdout', new_callable=StringIO.StringIO) as stdout:
webports.__main__.CmdPkgContents(package, options)
self.assertEqual(stdout.getvalue(), expected_output)