var allTestFiles = [];
var TEST_REGEXP = /(_test|_multi)\.js$/i;

var pathToModule = function(path) {
  return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};

var testsToSkip = [
  // syntax error in DDC's generated code:
  '/base/gen/codegen_output/language/execute_finally6_test.js',
  '/base/gen/codegen_output/language/switch_label2_test.js',
  '/base/gen/codegen_output/language/infinite_switch_label_test.js',
  '/base/gen/codegen_output/language/switch_label_test.js',
  '/base/gen/codegen_output/language/nested_switch_label_test.js',
  '/base/gen/codegen_output/language/switch_try_catch_test.js',

  // module code execution error in DDC's generated code:
  '/base/gen/codegen_output/language/f_bounded_quantification3_test.js',
  '/base/gen/codegen_output/language/regress_16640_test.js',
  '/base/gen/codegen_output/language/regress_22666_test.js',
  '/base/gen/codegen_output/language/cyclic_type_test_00_multi.js',
  '/base/gen/codegen_output/language/cyclic_type_test_01_multi.js',
  '/base/gen/codegen_output/language/cyclic_type_test_02_multi.js',
  '/base/gen/codegen_output/language/cyclic_type_test_03_multi.js',
  '/base/gen/codegen_output/language/cyclic_type_test_04_multi.js',
  '/base/gen/codegen_output/language/cyclic_type_test_none_multi.js',
  '/base/gen/codegen_output/language/cyclic_type2_test.js',
  '/base/gen/codegen_output/language/mixin_regress_13688_test.js',
  '/base/gen/codegen_output/language/least_upper_bound_expansive_test_none_multi.js'
];

Object.keys(window.__karma__.files).forEach(function(file) {
  if (TEST_REGEXP.test(file) && testsToSkip.indexOf(file) == -1) {
    // Normalize paths to RequireJS module names.
    allTestFiles.push(pathToModule(file));
  }
});

allTestFiles.push('test/browser/language_tests');
allTestFiles.push('test/browser/runtime_tests');

require.config({
  // Karma serves files under /base.
  baseUrl: '/base',

  // Travis bots take a bit longer to load all ~2k test files.
  waitSeconds: 30,

  paths: {
    dart_sdk: 'lib/js/amd/dart_sdk',
    async_helper: 'gen/codegen_output/pkg/async_helper',
    expect: 'gen/codegen_output/pkg/expect',
    js: 'gen/codegen_output/pkg/js',
    matcher: 'gen/codegen_output/pkg/matcher',
    meta: 'gen/codegen_output/pkg/meta',
    minitest: 'gen/codegen_output/pkg/minitest',
    path: 'gen/codegen_output/pkg/path',
    stack_trace: 'gen/codegen_output/pkg/stack_trace',
    unittest: 'gen/codegen_output/pkg/unittest',
    is: 'node_modules/is_js/is',
  },

  // Require all test files before starting tests.
  deps: allTestFiles,

  // We have to kickoff jasmine, as it is asynchronous
  callback: window.__karma__.start
});
