def create_analyzer_sa():
    args = []
    context = MockContextSA()
    cfg_handler = ClangSA.construct_config_handler(args, context)

    action = {
        'file': 'main.cpp',
        'command': "g++ -o main main.cpp",
        'directory': '/'
    }
    build_action = log_parser.parse_options(action)

    return ClangSA(cfg_handler, build_action)
    def test_checker_initializer(self):
        """
        Test initialize_checkers() function.
        """
        def add_description(checker):
            return checker, ''

        def all_with_status(status):
            def f(checks, checkers):
                result = set(check for check, data in checks.items()
                             if data[0] == status)
                return set(checkers) <= result

            return f

        args = []
        context = MockContextSA()

        # "security" profile, but alpha -> not in default.
        security_profile_alpha = [
            'alpha.security.ArrayBound', 'alpha.security.MallocOverflow'
        ]

        # "default" profile.
        default_profile = ['security.FloatLoopCounter', 'deadcode.DeadStores']

        # Checkers covering some "sei-cert" rules.
        cert_guideline = ['alpha.core.CastSize', 'alpha.core.CastToStruct']

        checkers = []
        checkers.extend(map(add_description, security_profile_alpha))
        checkers.extend(map(add_description, default_profile))
        checkers.extend(map(add_description, cert_guideline))

        # "default" profile checkers are enabled explicitly. Others are in
        # "default" state.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers)
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  default_profile))
        self.assertTrue(
            all_with_status(CheckerState.default)(cfg_handler.checks(),
                                                  security_profile_alpha))

        # "--enable-all" leaves alpha checkers in "default" state. Others
        # become enabled.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers, enable_all=True)
        self.assertTrue(
            all_with_status(CheckerState.default)(cfg_handler.checks(),
                                                  security_profile_alpha))
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  default_profile))

        # Enable alpha checkers explicitly.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers, [('alpha', True)])
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  security_profile_alpha))
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  default_profile))

        # Enable "security" profile checkers.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers,
                                        [('profile:security', True)])
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  security_profile_alpha))
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  default_profile))

        # Enable "security" profile checkers without "profile:" prefix.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers,
                                        [('security', True)])
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  security_profile_alpha))
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  default_profile))

        # Enable "sei-cert" guideline checkers.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers,
                                        [('guideline:sei-cert', True)])
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  cert_guideline))

        # Enable "sei-cert" guideline checkers.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers,
                                        [('sei-cert', True)])
        self.assertTrue(
            all_with_status(CheckerState.enabled)(cfg_handler.checks(),
                                                  cert_guideline))

        # Disable "sei-cert" guideline checkers.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers,
                                        [('guideline:sei-cert', False)])
        self.assertTrue(
            all_with_status(CheckerState.disabled)(cfg_handler.checks(),
                                                   cert_guideline))

        # Disable "sei-cert" guideline checkers.
        cfg_handler = ClangSA.construct_config_handler(args, context)
        cfg_handler.initialize_checkers(context, checkers,
                                        [('sei-cert', False)])
        self.assertTrue(
            all_with_status(CheckerState.disabled)(cfg_handler.checks(),
                                                   cert_guideline))