blob: 27720c6c905c670c2fe847a61df19907e7344626 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2020 The Pigweed Authors
#
# 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
#
# https://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 python_packages module."""
import collections
import io
import unittest
from unittest import mock
from pw_env_setup import python_packages
def _subprocess_run_stdout(stdout=b'foo==1.0\nbar==2.0\npw-foo @ file:...\n'):
def subprocess_run(*unused_args, **unused_kwargs):
CompletedProcess = collections.namedtuple('CompletedProcess', 'stdout')
return CompletedProcess(stdout=stdout)
return subprocess_run
class TestPythonPackages(unittest.TestCase):
"""Tests the python_packages module."""
@mock.patch('pw_env_setup.python_packages.subprocess.run',
side_effect=_subprocess_run_stdout())
def test_list(self, unused_mock):
buf = io.StringIO()
python_packages.ls(buf)
self.assertIn('foo==1.0', buf.getvalue())
self.assertIn('bar==2.0', buf.getvalue())
self.assertNotIn('pw-foo', buf.getvalue())
@mock.patch('pw_env_setup.python_packages.subprocess.run',
side_effect=_subprocess_run_stdout())
@mock.patch('pw_env_setup.python_packages._stderr')
def test_diff_removed(self, stderr_mock, unused_mock):
expected = io.StringIO('foo==1.0\nbar==2.0\nbaz==3.0\n')
expected.name = 'test.name'
self.assertFalse(python_packages.diff(expected))
stderr_mock.assert_any_call('Removed packages')
stderr_mock.assert_any_call(' baz==3.0')
@mock.patch('pw_env_setup.python_packages.subprocess.run',
side_effect=_subprocess_run_stdout())
@mock.patch('pw_env_setup.python_packages._stderr')
def test_diff_updated(self, stderr_mock, unused_mock):
expected = io.StringIO('foo==1.0\nbar==1.9\n')
expected.name = 'test.name'
self.assertTrue(python_packages.diff(expected))
stderr_mock.assert_any_call('Updated packages')
stderr_mock.assert_any_call(' bar==2.0 (from 1.9)')
stderr_mock.assert_any_call("Package versions don't match!")
@mock.patch('pw_env_setup.python_packages.subprocess.run',
side_effect=_subprocess_run_stdout())
@mock.patch('pw_env_setup.python_packages._stderr')
def test_diff_new(self, stderr_mock, unused_mock):
expected = io.StringIO('foo==1.0\n')
expected.name = 'test.name'
self.assertTrue(python_packages.diff(expected))
stderr_mock.assert_any_call('New packages')
stderr_mock.assert_any_call(' bar==2.0')
stderr_mock.assert_any_call("Package versions don't match!")
if __name__ == '__main__':
unittest.main()