// Karma configuration
// Generated on Mon Nov 27 2017 11:16:26 GMT+0800 (中国标准时间)

const os = require("os");

process.env.CHROME_BIN = require("puppeteer").executablePath();

module.exports = function (config) {
    config.set({

        // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: "",


        // frameworks to use
        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: ["mocha", "chai"],


        // list of files / patterns to load in the browser
        files: [
            "dist/fineui.min.css",
            "src/core/foundation.js",
            "src/core/lodash.js",
            "src/core/base.js",
            "i18n/i18n.cn.js",
            "src/core/ob.js",
            "src/core/widget.js",
            "src/core/shortcut.js",
            "src/core/utils/**/*.js",
            "src/core/behavior/behavior.js",
            "src/core/wrapper/layout.js",
            "src/core/plugin.js",
            "src/core/**/*.js",
            "src/data/**/*.js",
            "src/data/**/*.js",
            "src/data/**/*.js",
            "src/third/**/*.js",
            "src/base/pane.js",
            "src/base/single/single.js",
            "src/base/single/text.js",
            "src/base/single/button/button.basic.js",
            "src/base/single/button/button.node.js",
            "src/base/single/tip/tip.js",
            "src/base/combination/group.button.js",
            "src/base/combination/tree.button.js",
            "src/base/tree/ztree/treeview.js",
            "src/base/tree/ztree/asynctree.js",
            "src/base/tree/ztree/parttree.js",
            "src/base/tree/ztree/list/listtreeview.js",
            "src/base/tree/ztree/list/listasynctree.js",
            "src/base/tree/ztree/list/listparttree.js",
            "src/base/**/*.js",
            "src/case/**/*.js",
            "src/widget/**/*.js",
            "src/component/**/*.js",
            "dist/fix/fix.js",
            "dist/fix/fix.compact.js",
            "src/**/*.test.js",
            "test/**/*.js"
        ],

        exclude: [
            "src/base/tree/ztree/jquery.ztree.core-3.5.js",
            "src/base/tree/ztree/jquery.ztree.excheck-3.5.js",
            "src/base/single/input/file.js",
            "src/case/loading/loading_pane.js",
            "src/base/tree/ztree/**/*.js",
            "src/case/tree/ztree/*.js",
            "src/widget/multitree/**/*.js",
            "src/widget/multiselecttree/**/*.js",
            "src/component/treevaluechooser/*.js"
        ],


        // preprocess matching files before serving them to the browser
        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
        preprocessors: {
            "src/core/alias.js": "coverage",
            "src/core/base.js": "coverage",
            "src/core/func/date.js": "coverage",
            "src/base/**/!(*.test).js": "coverage",
            "src/case/**/!(*.test).js": "coverage",
            "src/widget/**/!(*.test).js": "coverage",
            "src/component/**/!(*.test).js": "coverage"
        },


        // test results reporter to use
        // possible values: 'dots', 'progress'
        // available reporters: https://npmjs.org/browse/keyword/karma-reporter
        reporters: ["progress", "coverage"],

        browserDisconnectTolerance: 3,
        browserDisconnectTimeout : 300000,
        browserNoActivityTimeout : 300000,

        coverageReporter: {
            // specify a common output directory
            dir: "coverage/",
            reporters: [
                // reporters not supporting the `file` property
                { type: "html", subdir: "report-html" },
                { type: "json-summary", subdir: "report-json-summary" },
                { type: "cobertura", subdir: "report-cobertura"}
            ]
        },


        // web server port
        port: 9878,


        // enable / disable colors in the output (reporters and logs)
        colors: true,


        // level of logging
        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        logLevel: config.LOG_INFO,


        // enable / disable watching file and executing tests whenever any file changes
        autoWatch: true,


        customLaunchers: {
            HeadlessChrome: {
                base: "ChromeHeadless",
                flags: [
                    "--no-sandbox",
                    "--remote-debugging-port=9222",
                    "--enable-logging",
                    "--user-data-dir=./karma-chrome",
                    "--v=1",
                    "--disable-background-timer-throttling",
                    "--disable-renderer-backgrounding",
                    "--proxy-bypass-list=*",
                    "--disable-web-security",
                    "--disable-gpu",
                    "--no-sandbox",
                ],
            },
        },


        // start these browsers
        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
        browsers: [os.platform() === "win32"
            && parseFloat(os.release()
                .split(".")
                .slice(0, 2)
                .join(".")) <= 6.1
            ? "HeadlessChrome" : "ChromeHeadless"],

        retryLimit: 30,

        captureTimeout: 30000,

        // Continuous Integration mode
        // if true, Karma captures browsers, runs the tests and exits
        singleRun: true,

        // Concurrency level
        // how many browser should be started simultaneous
        concurrency: Infinity,

        plugins: [
            "karma-mocha",
            "karma-chai",
            "karma-chrome-launcher",
            "karma-coverage"
        ]
    });
};