Exemple #1
0
def main():
    arg_parser = _get_arg_parser()
    args = arg_parser.parse_args()

    logging.basicConfig(stream=sys.stdout)
    printer = ConsolePrinter()
    logging.getLogger(__name__)

    fpc = None
    project_dir = os.getcwd()

    if args.green_mode:
        args.non_interactive = None
        args.no_filter_by_capabilities = None
        args.incomplete_sections = None

    if not args.non_interactive and not args.green_mode:
        fpc = FilePathCompleter()
        fpc.activate()
        print_welcome_message(printer)
        printer.print(PROJECT_DIR_HELP)
        project_dir = ask_question('What is your project directory?',
                                   default=project_dir,
                                   typecast=valid_path)
        fpc.deactivate()

    project_files, ignore_globs = get_project_files(None, printer, project_dir,
                                                    fpc, args.non_interactive)

    used_languages = list(get_used_languages(project_files))
    print_used_languages(printer, used_languages)

    extracted_information = collect_info(project_dir)

    relevant_bears = filter_relevant_bears(used_languages, printer, arg_parser,
                                           extracted_information)

    if args.green_mode:
        collect_bear_settings(relevant_bears)

    print_relevant_bears(printer, relevant_bears)

    if args.non_interactive and not args.incomplete_sections:
        unusable_bears = get_non_optional_settings_bears(relevant_bears)
        remove_unusable_bears(relevant_bears, unusable_bears)
        print_relevant_bears(printer, relevant_bears, 'usable')

    settings = generate_settings(project_dir, project_files, ignore_globs,
                                 relevant_bears, extracted_information,
                                 args.incomplete_sections)

    write_coafile(printer, project_dir, settings)
 def test_bear_test_fun_1(self):
     from pyprint.ConsolePrinter import ConsolePrinter
     printer = ConsolePrinter()
     bears = {'Python': [TestLocalBear, TestGlobalBear]}
     relevant_bears = {'test':
                       {TestLocalBear, TestGlobalBear, }}
     bear_settings_obj = collect_bear_settings(relevant_bears)
     file_dict = {'A.py': {'a\n', 'b\n'}, 'C.py': {'c\n', 'd\n'}}
     dir_path = str(Path(__file__).parent) + os.sep
     contents = initialize_project_data(dir_path, [])
     file_names = ['A.py', 'C.py']
     non_op_results, unified_results = bear_test_fun(
         bears, bear_settings_obj, file_dict, [], contents,
         file_names, 5, 5, printer)
     test_non_op_results = [{TestLocalBear:
                             [{'filename': 'A.py'},
                              {'filename': 'C.py'}]},
                            {TestGlobalBear: [{}]}]
     test_unified_results = [{TestLocalBear:
                              [{'filename': 'A.py',
                                'yield_results': False},
                               {'filename': 'C.py',
                                'yield_results': False}]},
                             {TestGlobalBear: [{'yield_results': False}]}]
     self.assertCountEqual(non_op_results[1][TestGlobalBear],
                           test_non_op_results[1][TestGlobalBear])
     self.assertCountEqual(unified_results[1][TestGlobalBear],
                           test_unified_results[1][TestGlobalBear])
     self.assertCountEqual(non_op_results[0][TestLocalBear],
                           test_non_op_results[0][TestLocalBear])
     self.assertCountEqual(unified_results[0][TestLocalBear],
                           test_unified_results[0][TestLocalBear])
Exemple #3
0
 def test_bear_test_fun_4(self):
     from pyprint.ConsolePrinter import ConsolePrinter
     printer = ConsolePrinter()
     bears = {'Python': [AnotherTestLocalDepBear]}
     relevant_bears = {'test': {AnotherTestLocalDepBear}}
     bear_settings_obj = collect_bear_settings(relevant_bears)
     file_dict = {'A.py': {'a\n', 'b\n'}, 'C.py': {'c\n', 'd\n'}}
     dir_path = str(Path(__file__).parent) + os.sep
     contents = initialize_project_data(dir_path, [])
     file_names = ['A.py', 'C.py']
     non_op_results, unified_results = bear_test_fun(
         bears, bear_settings_obj, file_dict, [], contents, file_names, 1,
         1, printer)
     print('nonop:', non_op_results)
     print('op:', unified_results)
     test_results = [{
         AnotherTestLocalDepBear: [{
             'filename': 'A.py'
         }, {
             'filename': 'C.py'
         }]
     }]
     self.assertCountEqual(non_op_results[0][AnotherTestLocalDepBear],
                           test_results[0][AnotherTestLocalDepBear])
     self.assertCountEqual(unified_results, [None])
Exemple #4
0
 def test_get_kwargs_2(self):
     relevant_bears = {
         'test': {
             AllKindsOfSettingsBaseBear,
         }
     }
     __location__ = os.path.realpath(
         os.path.join(os.getcwd(), os.path.dirname(__file__)))
     dir_path = str(Path(__file__).parent) + os.sep
     ignore_globs = ['*pycache*', '**.pyc', '**.orig']
     bear_settings_obj = collect_bear_settings(relevant_bears)
     bear_settings_obj[0].non_optional_settings
     optional_settings = bear_settings_obj[0].optional_settings
     contents = initialize_project_data(dir_path, ignore_globs)
     contents = {
         'dir_structure':
         contents,
         settings_key: [{
             'some_rubbish_setting': 'some_rubbish',
             'max_line_lengths': 60
         }]
     }
     kwargs = get_kwargs(optional_settings, [AllKindsOfSettingsBaseBear],
                         contents, __location__)
     test_kwargs = {'use_space': [True, False], 'use_tab': [True, False]}
     self.assertEqual(kwargs, test_kwargs)
Exemple #5
0
 def test_bear_test_fun_1(self):
     from pyprint.ConsolePrinter import ConsolePrinter
     printer = ConsolePrinter()
     bears = {'Python': [TestLocalBear, TestGlobalBear]}
     relevant_bears = {
         'test': {
             TestLocalBear,
             TestGlobalBear,
         }
     }
     bear_settings_obj = collect_bear_settings(relevant_bears)
     file_dict = {'A.py': {'a\n', 'b\n'}, 'C.py': {'c\n', 'd\n'}}
     dir_path = str(Path(__file__).parent) + os.sep
     contents = initialize_project_data(dir_path, [])
     file_names = ['A.py', 'C.py']
     non_op_results, unified_results = bear_test_fun(
         bears, bear_settings_obj, file_dict, [], contents, file_names, 5,
         5, printer)
     test_non_op_results = [{
         TestLocalBear: [{
             'filename': 'A.py'
         }, {
             'filename': 'C.py'
         }]
     }, {
         TestGlobalBear: [{}]
     }]
     test_unified_results = [{
         TestLocalBear: [{
             'filename': 'A.py',
             'yield_results': False
         }, {
             'filename': 'C.py',
             'yield_results': False
         }]
     }, {
         TestGlobalBear: [{
             'yield_results': False
         }]
     }]
     self.assertCountEqual(non_op_results[1][TestGlobalBear],
                           test_non_op_results[1][TestGlobalBear])
     self.assertCountEqual(unified_results[1][TestGlobalBear],
                           test_unified_results[1][TestGlobalBear])
     self.assertCountEqual(non_op_results[0][TestLocalBear],
                           test_non_op_results[0][TestLocalBear])
     self.assertCountEqual(unified_results[0][TestLocalBear],
                           test_unified_results[0][TestLocalBear])
 def test_bear_test_fun_3(self):
     from pyprint.ConsolePrinter import ConsolePrinter
     printer = ConsolePrinter()
     bears = {'Python': [TestLocalDepBear]}
     relevant_bears = {'test':
                       {TestLocalDepBear}}
     bear_settings_obj = collect_bear_settings(relevant_bears)
     file_dict = {'A.py': {'a\n', 'b\n'}, 'C.py': {'c\n', 'd\n'}}
     dir_path = str(Path(__file__).parent) + os.sep
     contents = initialize_project_data(dir_path, [])
     file_names = ['A.py', 'C.py']
     non_op_results, unified_results = bear_test_fun(
         bears, bear_settings_obj, file_dict, [], contents,
         file_names, 1, 1, printer)
     print('nonop:', non_op_results)
     print('op:', unified_results)
     test_results = [{TestLocalDepBear: []}]
     self.assertCountEqual(non_op_results[0][TestLocalDepBear],
                           test_results[0][TestLocalDepBear])
     self.assertCountEqual(unified_results, [None])
 def test_get_kwargs_2(self):
     relevant_bears = {'test':
                       {AllKindsOfSettingsBaseBear, }}
     __location__ = os.path.realpath(
         os.path.join(os.getcwd(), os.path.dirname(__file__)))
     dir_path = str(Path(__file__).parent) + os.sep
     ignore_globs = ['*pycache*', '**.pyc', '**.orig']
     bear_settings_obj = collect_bear_settings(relevant_bears)
     bear_settings_obj[0].non_optional_settings
     optional_settings = bear_settings_obj[0].optional_settings
     contents = initialize_project_data(dir_path, ignore_globs)
     contents = {'dir_structure': contents,
                 settings_key: [{'some_rubbish_setting': 'some_rubbish',
                                 'max_line_lengths': 60}]}
     kwargs = get_kwargs(optional_settings,
                         [AllKindsOfSettingsBaseBear],
                         contents, __location__)
     test_kwargs = {'use_space': [True, False],
                    'use_tab': [True, False]}
     self.assertEqual(kwargs, test_kwargs)
    def test_collect_bear_settings(self):
        relevant_bears = {
            'test': {
                AllKindsOfSettingsDependentBear,
                AllKindsOfSettingsDependentDecoratedBear,
                AllKindsOfSettingsBaseBear, BearA, SomeLinterBear,
                LinterBearWithCreateArguments, LinterBearWithParameters
            }
        }

        bear_settings_obj = collect_bear_settings(relevant_bears)

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsDependentBear. This bear has all kinds of
        # possible setting types and is dependent on another similar
        # kind of bear so that the non-optional settings from the
        # base bear also show up here.

        k = 0
        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsDependentBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear', 'use_bears'])
        self.assertCountEqual(
            obj.settings_others,
            ['config', 'max_line_lengths', 'no_line', 'configs', 'no_lines'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(
            obj.settings_bool,
            ['use_spaces', 'use_tabs', 'chars', 'use_space', 'use_tab'])
        self.assertCountEqual(obj.settings_others, [
            'max_line_lengths', 'no_chars', 'dependency_results',
            'dependency_result', 'no_char', 'max_line_length'
        ])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsDependentDecoratedBear. This bear has all kinds of
        # possible setting types and is dependent on another similar
        # kind of bear so that the non-optional settings from the
        # base bear also show up here. Moreover the run methods of both these
        # bears are decorated to test out whether the code is able to extract
        # out the original function from the decorated methods and provide
        # us with the correct bear settings.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsDependentDecoratedBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear', 'use_bears'])
        self.assertCountEqual(
            obj.settings_others,
            ['config', 'max_line_lengths', 'no_line', 'configs', 'no_lines'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(
            obj.settings_bool,
            ['use_spaces', 'use_tabs', 'chars', 'use_space', 'use_tab'])
        self.assertCountEqual(obj.settings_others, [
            'max_line_lengths', 'no_chars', 'dependency_results',
            'dependency_result', 'no_char', 'max_line_length'
        ])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsBaseBear. This bear has all kinds of
        # possible setting types.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsBaseBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear'])
        self.assertCountEqual(obj.settings_others,
                              ['config', 'max_line_lengths', 'no_line'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_space', 'use_tab'])
        self.assertCountEqual(
            obj.settings_others,
            ['max_line_length', 'no_char', 'dependency_result'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # BearA. This bear is dependent on BearB which is further dependent
        # on BearC to test out that settings from BearC
        # are appearing over here and the parsing of the bear dependency
        # tree is done right.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == BearA:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_spaces'])
        self.assertCountEqual(obj.settings_others, [])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, ['a'])

        # The following tests are for testing out the sorting of settings
        # into Type bool and other Types using the test bears
        # SomeLinterBear and LinterBearWithParameters. These tests ensure that
        # the method create_arguments() is parsed correctly for its settings
        # for linter bears.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == SomeLinterBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, [])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, [])

        # LinterBearWithParameters is also added because SomeLinterBear did not
        # have any valid output to test against.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == LinterBearWithParameters:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, ['nonopsetting'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['someoptionalsetting'])
        self.assertCountEqual(obj.settings_others, [])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # LinterBearWithCreateArguments. This test is added primarily to
        # check that the settings from create_arguments() as well as
        # generate_config() are populated inside the classes
        # (to store metadata) for which
        # the test is being written, for linter bears.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == LinterBearWithCreateArguments:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['yes'])
        self.assertCountEqual(obj.settings_others, ['nonopsetting', 'rick'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['someoptionalsetting'])
        self.assertCountEqual(obj.settings_others, ['makman2'])
def main():
    global MAX_ARGS_GREEN_MODE, MAX_VALUES_GREEN_MODE
    arg_parser = _get_arg_parser()
    args = arg_parser.parse_args()

    logging.basicConfig(stream=sys.stdout)
    printer = ConsolePrinter()
    logging.getLogger(__name__)

    fpc = None
    project_dir = os.getcwd()

    if args.green_mode:
        args.no_filter_by_capabilities = None
        args.incomplete_sections = None
        if args.max_args:
            MAX_ARGS_GREEN_MODE = args.max_args
        if args.max_values:
            MAX_VALUES_GREEN_MODE = args.max_values

    if not args.green_mode and (args.max_args or args.max_values):
        logging.warning(' --max-args and --max-values can be used '
                        'only with --green-mode. The arguments will '
                        'be ignored.')

    if not args.non_interactive and not args.green_mode:
        fpc = FilePathCompleter()
        fpc.activate()
        print_welcome_message(printer)
        printer.print(PROJECT_DIR_HELP)
        project_dir = ask_question(
            'What is your project directory?',
            default=project_dir,
            typecast=valid_path)
        fpc.deactivate()

    project_files, ignore_globs = get_project_files(
        None,
        printer,
        project_dir,
        fpc,
        args.non_interactive)

    used_languages = list(get_used_languages(project_files))
    used_languages = ask_to_select_languages(used_languages, printer,
                                             args.non_interactive)

    extracted_information = collect_info(project_dir)

    relevant_bears = filter_relevant_bears(
        used_languages, printer, arg_parser, extracted_information)

    if args.green_mode:
        bear_settings_obj = collect_bear_settings(relevant_bears)
        green_mode(
            project_dir, ignore_globs, relevant_bears, bear_settings_obj,
            MAX_ARGS_GREEN_MODE,
            MAX_VALUES_GREEN_MODE,
            project_files,
            printer,
        )
        exit()

    print_relevant_bears(printer, relevant_bears)

    if args.non_interactive and not args.incomplete_sections:
        unusable_bears = get_non_optional_settings_bears(relevant_bears)
        remove_unusable_bears(relevant_bears, unusable_bears)
        print_relevant_bears(printer, relevant_bears, 'usable')

    settings = generate_settings(
        project_dir,
        project_files,
        ignore_globs,
        relevant_bears,
        extracted_information,
        args.incomplete_sections)

    write_coafile(printer, project_dir, settings)
Exemple #10
0
def main():
    global MAX_ARGS_GREEN_MODE, MAX_VALUES_GREEN_MODE
    arg_parser = _get_arg_parser()
    args = arg_parser.parse_args()

    logging.basicConfig(stream=sys.stdout)
    printer = ConsolePrinter()
    logging.getLogger(__name__)

    fpc = None
    project_dir = os.getcwd()

    if args.green_mode:
        args.no_filter_by_capabilities = None
        args.incomplete_sections = None
        if args.max_args:
            MAX_ARGS_GREEN_MODE = args.max_args
        if args.max_values:
            MAX_VALUES_GREEN_MODE = args.max_values

    if not args.green_mode and (args.max_args or args.max_values):
        logging.warning(' --max-args and --max-values can be used '
                        'only with --green-mode. The arguments will '
                        'be ignored.')

    if not args.non_interactive and not args.green_mode:
        fpc = FilePathCompleter()
        fpc.activate()
        print_welcome_message(printer)
        printer.print(PROJECT_DIR_HELP)
        project_dir = ask_question('What is your project directory?',
                                   default=project_dir,
                                   typecast=valid_path)
        fpc.deactivate()

    project_files, ignore_globs = get_project_files(None, printer, project_dir,
                                                    fpc, args.non_interactive)

    used_languages = list(get_used_languages(project_files))
    used_languages = ask_to_select_languages(used_languages, printer,
                                             args.non_interactive)

    extracted_information = collect_info(project_dir)

    relevant_bears = filter_relevant_bears(used_languages, printer, arg_parser,
                                           extracted_information)

    if args.green_mode:
        bear_settings_obj = collect_bear_settings(relevant_bears)
        green_mode(
            project_dir,
            ignore_globs,
            relevant_bears,
            bear_settings_obj,
            MAX_ARGS_GREEN_MODE,
            MAX_VALUES_GREEN_MODE,
            project_files,
            printer,
        )
        exit()

    print_relevant_bears(printer, relevant_bears)

    if args.non_interactive and not args.incomplete_sections:
        unusable_bears = get_non_optional_settings_bears(relevant_bears)
        remove_unusable_bears(relevant_bears, unusable_bears)
        print_relevant_bears(printer, relevant_bears, 'usable')

    settings = generate_settings(project_dir, project_files, ignore_globs,
                                 relevant_bears, extracted_information,
                                 args.incomplete_sections)

    write_coafile(printer, project_dir, settings)
    def test_collect_bear_settings(self):
        relevant_bears = {'test':
                          {AllKindsOfSettingsDependentBear,
                           AllKindsOfSettingsDependentDecoratedBear,
                           AllKindsOfSettingsBaseBear,
                           BearA, SomeLinterBear, LinterBearWithCreateArguments,
                           LinterBearWithParameters}}

        bear_settings_obj = collect_bear_settings(relevant_bears)

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsDependentBear. This bear has all kinds of
        # possible setting types and is dependent on another similar
        # kind of bear so that the non-optional settings from the
        # base bear also show up here.

        k = 0
        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsDependentBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear', 'use_bears'])
        self.assertCountEqual(obj.settings_others, ['config',
                                                    'max_line_lengths',
                                                    'no_line', 'configs',
                                                    'no_lines'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_spaces', 'use_tabs',
                                                  'chars', 'use_space',
                                                  'use_tab'])
        self.assertCountEqual(obj.settings_others, ['max_line_lengths',
                                                    'no_chars',
                                                    'dependency_results',
                                                    'dependency_result',
                                                    'no_char',
                                                    'max_line_length'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsDependentDecoratedBear. This bear has all kinds of
        # possible setting types and is dependent on another similar
        # kind of bear so that the non-optional settings from the
        # base bear also show up here. Moreover the run methods of both these
        # bears are decorated to test out whether the code is able to extract
        # out the original function from the decorated methods and provide
        # us with the correct bear settings.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsDependentDecoratedBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear', 'use_bears'])
        self.assertCountEqual(obj.settings_others, ['config',
                                                    'max_line_lengths',
                                                    'no_line',
                                                    'configs',
                                                    'no_lines'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_spaces', 'use_tabs',
                                                  'chars', 'use_space',
                                                  'use_tab'])
        self.assertCountEqual(obj.settings_others, ['max_line_lengths',
                                                    'no_chars',
                                                    'dependency_results',
                                                    'dependency_result',
                                                    'no_char',
                                                    'max_line_length'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsBaseBear. This bear has all kinds of
        # possible setting types.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsBaseBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear'])
        self.assertCountEqual(obj.settings_others, ['config',
                                                    'max_line_lengths',
                                                    'no_line'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_space', 'use_tab'])
        self.assertCountEqual(obj.settings_others, ['max_line_length',
                                                    'no_char',
                                                    'dependency_result'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # BearA. This bear is dependent on BearB which is further dependent
        # on BearC to test out that settings from BearC
        # are appearing over here and the parsing of the bear dependency
        # tree is done right.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == BearA:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_spaces'])
        self.assertCountEqual(obj.settings_others, [])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, ['a'])

        # The following tests are for testing out the sorting of settings
        # into Type bool and other Types using the test bears
        # SomeLinterBear and LinterBearWithParameters. These tests ensure that
        # the method create_arguments() is parsed correctly for its settings
        # for linter bears.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == SomeLinterBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, [])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, [])

        # LinterBearWithParameters is also added because SomeLinterBear did not
        # have any valid output to test against.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == LinterBearWithParameters:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, ['nonopsetting'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['someoptionalsetting'])
        self.assertCountEqual(obj.settings_others, [])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # LinterBearWithCreateArguments. This test is added primarily to
        # check that the settings from create_arguments() as well as
        # generate_config() are populated inside the classes
        # (to store metadata) for which
        # the test is being written, for linter bears.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == LinterBearWithCreateArguments:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['yes'])
        self.assertCountEqual(obj.settings_others, ['nonopsetting', 'rick'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['someoptionalsetting'])
        self.assertCountEqual(obj.settings_others, ['makman2'])
    def test_collect_bear_settings(self):
        relevant_bears = {
            'test': {
                AllKindsOfSettingsDependentBear,
                AllKindsOfSettingsDependentDecoratedBear,
                AllKindsOfSettingsBaseBear, BearA
            }
        }

        bear_settings_obj = collect_bear_settings(relevant_bears)

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsDependentBear. This bear has all kinds of
        # possible setting types and is dependent on another similar
        # kind of bear so that the non-optional settings from the
        # base bear also show up here.

        k = 0
        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsDependentBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear', 'use_bears'])
        self.assertCountEqual(
            obj.settings_others,
            ['config', 'max_line_lengths', 'no_line', 'configs', 'no_lines'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool,
                              ['use_spaces', 'use_tabs', 'chars'])
        self.assertCountEqual(
            obj.settings_others,
            ['max_line_lengths', 'no_chars', 'dependency_results'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsDependentDecoratedBear. This bear has all kinds of
        # possible setting types and is dependent on another similar
        # kind of bear so that the non-optional settings from the
        # base bear also show up here. Moreover the run methods of both these
        # bears are decorated to test out whether the code is able to extract
        # out the original function from the decorated methods and provide
        # us with the correct bear settings.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsDependentDecoratedBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear', 'use_bears'])
        self.assertCountEqual(
            obj.settings_others,
            ['config', 'max_line_lengths', 'no_line', 'configs', 'no_lines'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool,
                              ['use_spaces', 'use_tabs', 'chars'])
        self.assertCountEqual(
            obj.settings_others,
            ['max_line_lengths', 'no_chars', 'dependency_results'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # AllKindsOfSettingsBaseBear. This bear has all kinds of
        # possible setting types.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == AllKindsOfSettingsBaseBear:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_bear'])
        self.assertCountEqual(obj.settings_others,
                              ['config', 'max_line_lengths', 'no_line'])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_space', 'use_tab'])
        self.assertCountEqual(
            obj.settings_others,
            ['max_line_length', 'no_char', 'dependency_result'])

        # The following test is for testing out the sorting of settings
        # into Type bool and other Types using the test bear
        # BearA. This bear is dependent on BearB which is further dependent
        # on BearC to test out that non-optional settings from BearC
        # are appearring over here and the parsing of the bear dependency
        # tree is done right.

        for index, i in enumerate(bear_settings_obj):
            if i.bear == BearA:
                k = index
                break
        obj = bear_settings_obj[k].non_optional_settings
        self.assertCountEqual(obj.settings_bool, ['use_spaces'])
        self.assertCountEqual(obj.settings_others, [])
        obj = bear_settings_obj[k].optional_settings
        self.assertCountEqual(obj.settings_bool, [])
        self.assertCountEqual(obj.settings_others, [])