def test_strings(self):
     with self.assertRaises(SystemExit) as context:
         run_program('average.py', ['hello', 'hi'])
     self.assertEqual(
         str(context.exception),
         "Invalid values entered, only numbers allowed!",
     )
 def test_ctrl_c_twice(self):
     def ctrl_c(_): raise KeyboardInterrupt
     with patch('time.sleep', side_effect=ctrl_c) as sleep:
         output = run_program('countdown.py', ['2'], raises=SystemExit)
     self.assertEqual(
         output,
         '2\nPress Ctrl-C again to exit\n1\nGoodbye!\n',
     )
     sleep.assert_called_with(1)
     self.assertEqual(sleep.call_count, 2)
 def test_negative_numbers(self):
     output = run_program('add.py', ['-7', '2'])
     self.assertEqual(output, "-5.0\n")
     output = run_program('add.py', ['-2', '-1'])
     self.assertEqual(output, "-3.0\n")
 def test_floats(self):
     output = run_program('add.py', ['1.5', '2'])
     self.assertEqual(output, "3.5\n")
 def test_integers(self):
     output = run_program('add.py', ['1', '2'])
     self.assertEqual(output, "3.0\n")
 def test_cli(self):
     output = run_program('hello.py')
     self.assertEqual(output, "Hello world!\n")
 def test_with_multiple_arguments(self):
     output = run_program('greetings.py', ['Trey', 'Hunner'])
     self.assertEqual(output, "Hello Trey Hunner!\n")
 def test_with_argument(self):
     output = run_program('greetings.py', ['Trey'])
     self.assertEqual(output, "Hello Trey!\n")
 def test_ctrl_c_once(self):
     def ctrl_c(_): raise KeyboardInterrupt
     with patch('time.sleep', side_effect=ctrl_c) as sleep:
         output = run_program('countdown.py', ['1'])
     self.assertEqual(output, '1\nPress Ctrl-C again to exit\n')
     sleep.assert_called_once_with(1)
 def test_no_numbers(self):
     with self.assertRaises(SystemExit) as context:
         output = run_program('average.py')
     self.assertEqual(str(context.exception), "No numbers to average!")
 def test_decimal_number_result(self):
     output = run_program('average.py', ['2', '3', '4', '5', '6', '7'])
     self.assertEqual(output, "Average is 4.5\n")
 def test_whole_number_result(self):
     output = run_program('average.py', ['2', '3', '4'])
     self.assertEqual(output, "Average is 3.0\n")
 def test_negative_numbers(self):
     output = run_program('difference.py', ['-7', '2'])
     self.assertEqual(output, "9.0\n")
 def test_floats(self):
     output = run_program('difference.py', ['6', '3.5'])
     self.assertEqual(output, "2.5\n")
 def test_strings(self):
     with self.assertRaises(Exception):
         run_program('add.py', ['hello', 'hi'])
 def test_no_arguments(self):
     output = run_program('greetings.py')
     self.assertEqual(output, "Hello world!\n")
 def test_integers(self):
     output = run_program('difference.py', ['3', '5'])
     self.assertEqual(output, "2.0\n")
 def test_no_ctrl_c(self):
     with patch('time.sleep') as sleep:
         output = run_program('countdown.py', ['5'])
     self.assertEqual(output, '5\n4\n3\n2\n1\n')
     sleep.assert_called_with(1)
     self.assertEqual(sleep.call_count, 5)