Example #1
0
class ShowBearsTest(unittest.TestCase):
    def setUp(self):
        self.console_printer = ConsolePrinter(print_colored=False)
        self.logs = LogCapture()
        self.logs.__enter__()

    deprecation_messages = [
        ('root', 'WARNING', 'show_description parameter is deprecated'),
        ('root', 'WARNING', 'show_params parameter is deprecated')
    ]

    def tearDown(self):
        self.logs.__exit__(None, None, None)

    def test_show_bear_minimal(self):
        with retrieve_stdout() as stdout:
            show_bear(SomelocalBear, False, False, self.console_printer)
            self.assertEqual(stdout.getvalue(), 'SomelocalBear\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_desc_only(self):
        with retrieve_stdout() as stdout:
            show_bear(SomelocalBear, True, False, self.console_printer)
            self.assertEqual(
                stdout.getvalue(),
                'SomelocalBear\n  Some local-bear Description.\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_details_only(self):
        with retrieve_stdout() as stdout:
            show_bear(SomelocalBear, False, True, self.console_printer)
            self.assertEqual(
                stdout.getvalue(), 'SomelocalBear\n'
                '  The bear does not provide information about '
                'which languages it can analyze.\n\n'
                '  No needed settings.\n\n'
                '  No optional settings.\n\n'
                '  This bear does not provide information about '
                'what categories it can detect.\n\n'
                '  This bear cannot fix issues or does not '
                'provide information about what categories it '
                'can fix.\n\n  Path:\n   ' +
                repr(SomelocalBear.source_location) + '\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_long_without_content(self):
        with retrieve_stdout() as stdout:
            show_bear(SomelocalBear, True, True, self.console_printer)
            self.assertEqual(
                stdout.getvalue(), 'SomelocalBear\n'
                '  Some local-bear Description.\n\n'
                '  The bear does not provide information about '
                'which languages it can analyze.\n\n'
                '  No needed settings.\n\n'
                '  No optional settings.\n\n'
                '  This bear does not provide information about '
                'what categories it can detect.\n\n'
                '  This bear cannot fix issues or does not '
                'provide information about what categories it '
                'can fix.\n\n  Path:\n   ' +
                repr(SomelocalBear.source_location) + '\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_with_content(self):
        with retrieve_stdout() as stdout:
            show_bear(TestBear, True, True, self.console_printer)
            self.assertEqual(
                stdout.getvalue(), 'TestBear\n'
                '  Test bear Description.\n\n'
                '  Supported languages:\n'
                '   * F#\n'
                '   * Shakespearean Programming Language\n\n'
                '  Needed Settings:\n'
                '   * setting1: Required Setting.\n\n'
                '  Optional Settings:\n'
                '   * setting2: Optional Setting. ('
                "Optional, defaults to 'None'."
                ')\n\n'
                '  Can detect:\n   * Formatting\n\n'
                '  Can fix:\n   * Formatting\n\n  Path:\n   ' +
                repr(TestBear.source_location) + '\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_settings_only(self):
        with retrieve_stdout() as stdout:
            args = default_arg_parser().parse_args(['--show-settings'])
            show_bear(TestBear, False, False, self.console_printer, args)
            self.assertEqual(
                stdout.getvalue(), 'TestBear\n'
                '  Needed Settings:\n'
                '   * setting1: Required Setting.\n\n'
                '  Optional Settings:\n'
                '   * setting2: Optional Setting. ('
                "Optional, defaults to 'None'.)\n\n")

        self.logs.check(*self.deprecation_messages)

    def test_show_bears_empty(self):
        with retrieve_stdout() as stdout:
            show_bears({}, {}, True, True, self.console_printer)
            self.assertIn('No bears to show.', stdout.getvalue())

        self.logs.check(*self.deprecation_messages)

    def test_show_bears_with_json(self):
        args = default_arg_parser().parse_args(['--json'])
        with retrieve_stdout() as stdout:
            show_bears({}, {}, True, True, self.console_printer, args)
            self.assertEqual('{\n  "bears": []\n}\n', stdout.getvalue())

        self.logs.check(*self.deprecation_messages)

    @patch('coalib.output.ConsoleInteraction.show_bear')
    def test_show_bears(self, show_bear):
        local_bears = OrderedDict([('default', [SomelocalBear]),
                                   ('test', [SomelocalBear])])
        show_bears(local_bears, {}, True, True, self.console_printer)
        show_bear.assert_called_once_with(SomelocalBear, True, True,
                                          self.console_printer, None)

        self.logs.check(*self.deprecation_messages)

    def test_show_bears_sorted(self):
        local_bears = OrderedDict([('default', [SomelocalBear]),
                                   ('test', [aSomelocalBear])])
        global_bears = OrderedDict([('default', [SomeglobalBear]),
                                    ('test', [BSomeglobalBear])])

        with retrieve_stdout() as stdout:
            show_bears(local_bears, global_bears, False, False,
                       self.console_printer)
            self.assertEqual(
                stdout.getvalue(), 'aSomelocalBear\n'
                'BSomeglobalBear\n'
                'SomeglobalBear\n'
                'SomelocalBear\n')

        self.logs.check(*(self.deprecation_messages * 5))

    def test_show_bears_capabilities(self):
        with retrieve_stdout() as stdout:
            show_language_bears_capabilities(
                {
                    'some_language':
                    ({'Formatting', 'Security'}, {'Formatting'})
                }, self.console_printer)
            self.assertIn(
                'coala can do the following for SOME_LANGUAGE\n'
                '    Can detect only: Formatting, Security\n'
                '    Can fix        : Formatting\n', stdout.getvalue())
            show_language_bears_capabilities({'some_language': (set(), set())},
                                             self.console_printer)
            self.assertIn('coala does not support some_language',
                          stdout.getvalue())
            show_language_bears_capabilities({}, self.console_printer)
            self.assertIn('There is no bear available for this language',
                          stdout.getvalue())
            show_language_bears_capabilities(
                {'some_language': ({'Formatting', 'Security'}, set())},
                self.console_printer)
            self.assertIn(
                'coala can do the following for SOME_LANGUAGE\n'
                '    Can detect only: Formatting, Security\n',
                stdout.getvalue())
class ShowBearsTest(unittest.TestCase):

    def setUp(self):
        self.console_printer = ConsolePrinter(print_colored=False)
        self.logs = LogCapture()
        self.logs.__enter__()

    deprecation_messages = [('root',
                             'WARNING',
                             'show_description parameter is deprecated'),
                            ('root',
                             'WARNING',
                             'show_params parameter is deprecated')]

    def tearDown(self):
        self.logs.__exit__(None, None, None)

    def test_show_bear_minimal(self):
        with retrieve_stdout() as stdout:
            show_bear(
                SomelocalBear, False, False, self.console_printer)
            self.assertEqual(stdout.getvalue(), 'SomelocalBear\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_desc_only(self):
        with retrieve_stdout() as stdout:
            show_bear(
                SomelocalBear, True, False, self.console_printer)
            self.assertEqual(
                stdout.getvalue(),
                'SomelocalBear\n  Some local-bear Description.\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_details_only(self):
        with retrieve_stdout() as stdout:
            show_bear(
                SomelocalBear, False, True, self.console_printer)
            self.assertEqual(stdout.getvalue(),
                             'SomelocalBear\n'
                             '  The bear does not provide information about '
                             'which languages it can analyze.\n\n'
                             '  No needed settings.\n\n'
                             '  No optional settings.\n\n'
                             '  This bear does not provide information about '
                             'what categories it can detect.\n\n'
                             '  This bear cannot fix issues or does not '
                             'provide information about what categories it '
                             'can fix.\n\n  Path:\n   ' +
                             repr(SomelocalBear.source_location) + '\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_long_without_content(self):
        with retrieve_stdout() as stdout:
            show_bear(
                SomelocalBear, True, True, self.console_printer)
            self.assertEqual(stdout.getvalue(),
                             'SomelocalBear\n'
                             '  Some local-bear Description.\n\n'
                             '  The bear does not provide information about '
                             'which languages it can analyze.\n\n'
                             '  No needed settings.\n\n'
                             '  No optional settings.\n\n'
                             '  This bear does not provide information about '
                             'what categories it can detect.\n\n'
                             '  This bear cannot fix issues or does not '
                             'provide information about what categories it '
                             'can fix.\n\n  Path:\n   ' +
                             repr(SomelocalBear.source_location) + '\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_with_content(self):
        with retrieve_stdout() as stdout:
            show_bear(TestBear, True, True, self.console_printer)
            self.assertEqual(stdout.getvalue(),
                             'TestBear\n'
                             '  Test bear Description.\n\n'
                             '  Supported languages:\n'
                             '   * F#\n'
                             '   * Shakespearean Programming Language\n\n'
                             '  Needed Settings:\n'
                             '   * setting1: Required Setting.\n\n'
                             '  Optional Settings:\n'
                             '   * setting2: Optional Setting. ('
                             "Optional, defaults to 'None'."
                             ')\n\n'
                             '  Can detect:\n   * Formatting\n\n'
                             '  Can fix:\n   * Formatting\n\n  Path:\n   ' +
                             repr(TestBear.source_location) + '\n\n')

        self.logs.check(*self.deprecation_messages)

    def test_show_bear_settings_only(self):
        with retrieve_stdout() as stdout:
            args = default_arg_parser().parse_args(['--show-settings'])
            show_bear(TestBear, False, False, self.console_printer, args)
            self.assertEqual(stdout.getvalue(),
                             'TestBear\n'
                             '  Needed Settings:\n'
                             '   * setting1: Required Setting.\n\n'
                             '  Optional Settings:\n'
                             '   * setting2: Optional Setting. ('
                             "Optional, defaults to 'None'.)\n\n")

        self.logs.check(*self.deprecation_messages)

    def test_show_bears_empty(self):
        with retrieve_stdout() as stdout:
            show_bears({}, {}, True, True, self.console_printer)
            self.assertIn('No bears to show.', stdout.getvalue())

        self.logs.check(*self.deprecation_messages)

    def test_show_bears_with_json(self):
        args = default_arg_parser().parse_args(['--json'])
        with retrieve_stdout() as stdout:
            show_bears({}, {}, True, True, self.console_printer, args)
            self.assertEqual('{\n  "bears": []\n}\n', stdout.getvalue())

        self.logs.check(*self.deprecation_messages)

    @patch('coalib.output.ConsoleInteraction.show_bear')
    def test_show_bears(self, show_bear):
        local_bears = OrderedDict([('default', [SomelocalBear]),
                                   ('test', [SomelocalBear])])
        show_bears(local_bears, {}, True, True, self.console_printer)
        show_bear.assert_called_once_with(SomelocalBear,
                                          True,
                                          True,
                                          self.console_printer,
                                          None)

        self.logs.check(*self.deprecation_messages)

    def test_show_bears_sorted(self):
        local_bears = OrderedDict([('default', [SomelocalBear]),
                                   ('test', [aSomelocalBear])])
        global_bears = OrderedDict([('default', [SomeglobalBear]),
                                    ('test', [BSomeglobalBear])])

        with retrieve_stdout() as stdout:
            show_bears(local_bears, global_bears, False,
                       False, self.console_printer)
            self.assertEqual(stdout.getvalue(),
                             'aSomelocalBear\n'
                             'BSomeglobalBear\n'
                             'SomeglobalBear\n'
                             'SomelocalBear\n')

        self.logs.check(*(self.deprecation_messages*5))

    def test_show_bears_capabilities(self):
        with retrieve_stdout() as stdout:
            show_language_bears_capabilities(
                {'some_language': (
                    {'Formatting', 'Security'}, {'Formatting'})},
                self.console_printer)
            self.assertIn('coala can do the following for SOME_LANGUAGE\n'
                          '    Can detect only: Formatting, Security\n'
                          '    Can fix        : Formatting\n',
                          stdout.getvalue())
            show_language_bears_capabilities(
                {'some_language': (set(), set())}, self.console_printer)
            self.assertIn('coala does not support some_language',
                          stdout.getvalue())
            show_language_bears_capabilities(
                {}, self.console_printer)
            self.assertIn(
                'There is no bear available for this language',
                stdout.getvalue())
            show_language_bears_capabilities(
                {'some_language': ({'Formatting', 'Security'}, set())},
                self.console_printer)
            self.assertIn('coala can do the following for SOME_LANGUAGE\n'
                          '    Can detect only: Formatting, Security\n',
                          stdout.getvalue())