{"version":3,"file":"kotlin-test-karma-runner.js","sources":["../src/utils.ts","../node_modules/tslib/tslib.es6.js","../src/KotlinTestTeamCityConsoleAdapter.ts","../src/CliArgsParser.ts","../src/KotlinTestsFilter.ts","../src/teamcity-format.js","../src/TeamCityMessagesFlow.ts","../karma.ts","../src/Adapter.ts","../src/CliFiltertingConfiguration.ts"],"sourcesContent":["/**\n * From teamcity-service-messages.\n * Copyright 2013 Aaron Forsander\n */\nexport function newFlowId(): number {\n return Math.floor(Math.random() * (1e10 - 1e6 + 1)) + 1e6;\n}\n\n/**\n * From teamcity-service-messages.\n * Copyright 2013 Aaron Forsander\n */\nexport function dateTimeWithoutTimeZone(): string {\n // TeamCity not fully support ISO 8601 (see TW-36173) so we need to cut off 'Z' at the end.\n return new Date().toISOString().slice(0, -1);\n}\n\n/**\n * From lodash.\n * Copyright JS Foundation and other contributors \n */\nexport function startsWith(string: string, target: string) {\n return string.slice(0, target.length) == target;\n}\n\n/**\n * From lodash.\n * Copyright JS Foundation and other contributors \n */\nexport function trim(str: string): string {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n}\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nconst reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * From lodash.\n * Copyright JS Foundation and other contributors \n */\nexport function escapeRegExp(string: string) {\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nexport function pushIfNotNull(list: T[], value: T) {\n if (value !== null) list.push(value)\n}\n\nexport function flatMap(arr: T[], f: (item: T) => T[]): T[] {\n const result: T[] = [];\n arr.forEach(item => {\n f(item).forEach(x => {\n result.push(x)\n })\n });\n return result;\n}\n\nexport function println(message ?: string) {\n console.log(message)\n}","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","/*\n * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nimport {KotlinTestRunner} from \"./KotlinTestRunner\";\nimport {TeamCityMessageData, TeamCityMessagesFlow} from \"./TeamCityMessagesFlow\";\nconst format = require(\"format-util\");\n\n// don't use enum as it is not minified by uglify\nexport type IgnoredTestSuitesReporting\n = \"skip\" | \"reportAsIgnoredTest\" | \"reportAllInnerTestsAsIgnored\"\nexport const IgnoredTestSuitesReporting: { [key: string]: IgnoredTestSuitesReporting } = {\n skip: \"skip\",\n reportAsIgnoredTest: \"reportAsIgnoredTest\",\n reportAllInnerTestsAsIgnored: \"reportAllInnerTestsAsIgnored\"\n};\n\n// to reduce minified code size\nfunction withName(name: string, data?: TeamCityMessageData): TeamCityMessageData {\n data = data || {};\n data[\"name\"] = name;\n return data\n}\n\nconst logTypes = ['log', 'info', 'warn', 'error', 'debug'] as const\n\ntype LogType = typeof logTypes[number]\n\nexport function runWithTeamCityConsoleAdapter(\n runner: KotlinTestRunner,\n teamCity: TeamCityMessagesFlow\n): KotlinTestRunner {\n return {\n suite: function (name: string, isIgnored: boolean, fn: () => void) {\n runner.suite(name, isIgnored, fn)\n },\n test: function (name: string, isIgnored: boolean, fn: () => void) {\n let revertLogMethods: CallableFunction[] = [];\n\n runner.test(name, isIgnored, () => {\n const log = (type: LogType) => function (message?: any, ...optionalParams: any[]) {\n let messageType: 'testStdOut' | 'testStdErr'\n if (type == 'warn' || type == 'error') {\n messageType = 'testStdErr'\n } else {\n messageType = 'testStdOut'\n }\n\n teamCity.sendMessage(\n messageType,\n withName(\n name,\n {\n \"out\": `[${type}] ${format(message, ...optionalParams)}\\n`\n }\n )\n )\n };\n\n const globalConsole = console as unknown as {\n [method: string]: (message?: any, ...optionalParams: any[]) => void\n };\n\n revertLogMethods = logTypes\n .map(method => {\n const realMethod = globalConsole[method];\n globalConsole[method] = log(method);\n return () => globalConsole[method] = realMethod\n });\n try {\n return fn();\n } catch (e) {\n throw e;\n } finally {\n revertLogMethods.forEach(revert => revert());\n }\n });\n }\n }\n}","import {println, startsWith} from \"./utils\";\nimport {IgnoredTestSuitesReporting} from \"./KotlinTestTeamCityConsoleAdapter\";\n\nexport type CliDescription = {\n version: string,\n bin: string,\n description: string,\n usage: string,\n args: {\n [k: string]: CliArgDescription,\n },\n freeArgsTitle: string | null\n}\n\nexport type CliArgValues = {\n [k: string]: string[] | string,\n free: string[]\n}\n\nexport type CliArgDescription = {\n keys: string[],\n help: string,\n values?: string[],\n valuesHelp?: string[],\n default?: string,\n single?: true\n}\n\nexport class CliArgsParser {\n constructor(\n private description: CliDescription,\n private onFail: (n: number) => never\n ) {\n }\n\n printUsage() {\n const description = this.description;\n\n println(`${description.bin} v${description.version} - ${description.description}`);\n println();\n println(`Usage: ${description.bin} ${description.usage}`);\n println();\n for (let key in description.args) {\n const data = description.args[key];\n println(' ' + data.keys.join(', '));\n const indent = ' ';\n println(`${indent}${data.help}`);\n if (data.values && data.valuesHelp) {\n println(`${indent}Possible values:`);\n for (let i = 0; i < data.values.length; i++) {\n const value = data.values[i];\n const help = data.valuesHelp[i];\n println(`${indent} - \"${value}\": ${help}`)\n }\n }\n if (data.default) println(`${indent}By default: ${data.default}`);\n println('')\n }\n }\n\n badArgsExit(message: string) {\n println(message);\n println();\n this.printUsage();\n this.onFail(1)\n }\n\n parse(args: string[]): CliArgValues {\n const description = this.description;\n\n const result: CliArgValues = {\n free: []\n };\n for (let key in description.args) {\n if (!description.args[key].single) {\n result[key] = [];\n }\n }\n\n // process all arguments from left to right\n args: while (args.length != 0) {\n const arg = args.shift() as string;\n\n if (startsWith(arg, '--')) {\n for (let argName in description.args) {\n const argDescription = description.args[argName];\n if (argDescription.keys.indexOf(arg) != -1) {\n if (args.length == 0) {\n this.badArgsExit(\"Missed value after option \" + arg);\n }\n\n const value = args.shift() as string;\n if (argDescription.values && argDescription.values.indexOf(value) == -1) {\n this.badArgsExit(\"Unsupported value for option \" + arg);\n }\n\n if (argDescription.single) {\n result[argName] = value;\n } else {\n (result[argName] as string[]).push(value);\n }\n\n continue args;\n }\n }\n } else {\n result.free.push(arg)\n }\n }\n\n if (description.freeArgsTitle && result.free.length == 0) {\n this.badArgsExit(`At least one ${description.freeArgsTitle} should be provided`)\n }\n\n return result\n }\n}\n\nexport function getDefaultCliDescription(): CliDescription {\n return {\n version: VERSION,\n bin: BIN,\n description: DESCRIPTION,\n usage: \"[-t --tests] [-e --exclude] , , ..\",\n args: {\n include: {\n keys: ['--tests', '--include'],\n help: \"Tests to include. Example: MySuite.test1,MySuite.MySubSuite.*,*unix*,!*windows*\",\n default: \"*\"\n\n },\n exclude: {\n keys: ['--exclude'],\n help: \"Tests to exclude. Example: MySuite.test1,MySuite.MySubSuite.*,*unix*\"\n },\n ignoredTestSuites: {\n keys: ['--ignoredTestSuites'],\n help: \"How to deal with ignored test suites\",\n single: true,\n values: [\n IgnoredTestSuitesReporting.skip,\n IgnoredTestSuitesReporting.reportAsIgnoredTest,\n IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored\n ],\n valuesHelp: [\n \"don't report ignored test suites\",\n \"useful to speedup large ignored test suites\",\n \"will cause visiting all inner tests\",\n ],\n default: IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored\n }\n },\n freeArgsTitle: null\n };\n}\n","import {escapeRegExp, startsWith, trim} from \"./utils\";\nimport {KotlinTestRunner} from \"./KotlinTestRunner\";\n\nexport interface KotlinTestsFilter {\n mayContainTestsFromSuite(fqn: string, alternativeFqn?: string): boolean;\n\n containsTest(fqn: string, alternativeFqn?: string): boolean;\n}\n\nexport function runWithFilter(\n runner: KotlinTestRunner,\n filter: KotlinTestsFilter,\n): KotlinTestRunner {\n let path: string[] = [];\n\n function jsClassName() {\n // skip root\n if (!path[0]) {\n return path.slice(1).join('.')\n }\n\n return path.join('.')\n }\n\n // In Java (Gradle, IDEA) inner classes uses `$` as separator\n function javaClassName() {\n const javaClassName = `${path.slice(1).join('$')}`;\n\n // skip root\n if (!path[0]) {\n return javaClassName\n }\n\n if (!javaClassName) {\n return path[0]\n }\n\n return `${path[0]}.${javaClassName}`\n }\n\n return {\n suite: function (name: string, isIgnored: boolean, fn: () => void) {\n path.push(name);\n\n try {\n if (path.length > 0 && !filter.mayContainTestsFromSuite(jsClassName(), javaClassName())) {\n return;\n }\n\n runner.suite(name, isIgnored, fn);\n } finally {\n path.pop()\n }\n },\n\n test: function (name: string, isIgnored: boolean, fn: () => void) {\n try {\n if (!filter.containsTest(`${jsClassName()}.${name}`, `${javaClassName()}.${name}`))\n return;\n\n runner.test(name, isIgnored, fn);\n } finally {\n }\n }\n };\n}\n\nexport function newKotlinTestsFilter(wildcard: string | null): KotlinTestsFilter | null {\n if (wildcard == null) return null;\n wildcard = trim(wildcard);\n wildcard = wildcard.replace(/\\*+/, '*'); // ** => *\n if (wildcard.length == 0) return null;\n else if (wildcard == '*') return allTest;\n else if (wildcard.indexOf('*') == -1) return new ExactFilter(wildcard);\n else if (startsWith(wildcard, '*')) return new RegExpKotlinTestsFilter(wildcard);\n else {\n // optimize for cases like \"Something*\", \"Something*a*b\" and so on.\n // by adding explicit prefix matcher to not visit unneeded suites\n // (RegExpKotlinTestsFilter doesn't support suites matching)\n const [prefix, rest] = wildcard.split('*', 2);\n return new StartsWithFilter(prefix, rest ? new RegExpKotlinTestsFilter(wildcard) : null)\n }\n}\n\nexport const allTest = new class implements KotlinTestsFilter {\n mayContainTestsFromSuite(fqn: string): boolean {\n return true;\n }\n\n containsTest(fqn: string): boolean {\n return true;\n }\n};\n\nexport class StartsWithFilter implements KotlinTestsFilter {\n constructor(\n public readonly prefix: string,\n public readonly filter: RegExpKotlinTestsFilter | null\n ) {\n }\n\n mayContainTestsFromSuite(fqn: string): boolean {\n return startsWith(this.prefix, fqn)\n || startsWith(fqn, this.prefix);\n }\n\n containsAllTestsFromSuite(fqn: string): boolean {\n return this.filter == null && startsWith(fqn, this.prefix);\n }\n\n containsTest(fqn: string): boolean {\n return startsWith(fqn, this.prefix)\n && (this.filter == null || this.filter.containsTest(fqn));\n }\n}\n\nexport class ExactFilter implements KotlinTestsFilter {\n private readonly classNameOnlyRegExp: RegExp;\n\n constructor(public fqn: string) {\n // Exact filter by class name only\n this.classNameOnlyRegExp = RegExp(`^${escapeRegExp(this.fqn + \".\")}[^\\.]+$`);\n }\n\n mayContainTestsFromSuite(fqn: string): boolean {\n return startsWith(this.fqn, fqn);\n }\n\n containsTest(fqn: string): boolean {\n if (fqn === this.fqn) {\n return true\n }\n\n return this.classNameOnlyRegExp.test(fqn)\n }\n}\n\nexport class RegExpKotlinTestsFilter implements KotlinTestsFilter {\n public readonly regexp: RegExp;\n\n constructor(wildcard: string) {\n this.regexp = RegExp(\"^\" + wildcard\n .split('*')\n .map(it => escapeRegExp(it))\n .join('.*') + \"$\"\n );\n }\n\n mayContainTestsFromSuite(fqn: string): boolean {\n return true\n }\n\n containsTest(fqn: string): boolean {\n return this.regexp!.test(fqn)\n }\n\n toString(): string {\n return this.regexp.toString()\n }\n}\n\nexport class CompositeTestFilter implements KotlinTestsFilter {\n private readonly excludePrefix: StartsWithFilter[] = [];\n\n constructor(\n public include: KotlinTestsFilter[],\n public exclude: KotlinTestsFilter[]\n ) {\n this.exclude.forEach(it => {\n if (it instanceof StartsWithFilter && it.filter == null)\n this.excludePrefix.push(it)\n })\n }\n\n mayContainTestsFromSuite(fqn: string, alternativeFqn: string): boolean {\n for (const excl of this.excludePrefix) {\n if (excl.containsAllTestsFromSuite(fqn) || excl.containsAllTestsFromSuite(alternativeFqn)) {\n return false\n }\n }\n for (const incl of this.include) {\n if (incl.mayContainTestsFromSuite(fqn) || incl.mayContainTestsFromSuite(alternativeFqn)) {\n return true\n }\n }\n return false;\n }\n\n containsTest(fqn: string, alternativeFqn: string): boolean {\n for (const excl of this.exclude) {\n if (excl.containsTest(fqn) || excl.containsTest(alternativeFqn)) return false\n }\n for (const incl of this.include) {\n if (incl.containsTest(fqn) || incl.containsTest(alternativeFqn)) return true\n }\n return false\n }\n}","/**\n * From mocha-teamcity-reporter\n * The MIT License\n * Copyright (c) 2016 Jamie Sherriff\n */\nexport const TEST_IGNORED = `##teamcity[testIgnored name='%s' message='%s' flowId='%s']`;\nexport const SUITE_START = `##teamcity[testSuiteStarted name='%s' flowId='%s']`;\nexport const SUITE_END = `##teamcity[testSuiteFinished name='%s' duration='%s' flowId='%s']`;\nexport const SUITE_END_NO_DURATION = `##teamcity[testSuiteFinished name='%s' flowId='%s']`;\nexport const TEST_START = `##teamcity[testStarted name='%s' captureStandardOutput='true' flowId='%s']`;\nexport const TEST_FAILED = `##teamcity[testFailed name='%s' message='%s' details='%s' captureStandardOutput='true' flowId='%s']`;\nexport const TEST_FAILED_COMPARISON = `##teamcity[testFailed type='comparisonFailure' name='%s' message='%s' \\\ndetails='%s' captureStandardOutput='true' actual='%s' expected='%s' flowId='%s']`;\nexport const TEST_END = `##teamcity[testFinished name='%s' duration='%s' flowId='%s']`;\nexport const TEST_END_NO_DURATION = `##teamcity[testFinished name='%s' flowId='%s']`;\nexport const BLOCK_OPENED = `##teamcity[blockOpened name='%s' flowId='%s']`\nexport const BLOCK_CLOSED = `##teamcity[blockClosed name='%s' flowId='%s']`\n\nexport const TYPED_MESSAGE = `##teamcity[message text='%s' type='%s']`\n\n/**\n * from teamcity-service-messages\n * Copyright (c) 2013 Aaron Forsander\n *\n * Escape string for TeamCity output.\n * @see https://confluence.jetbrains.com/display/TCD65/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-servMsgsServiceMessages\n */\n\nconst format = require('format-util');\n\nexport function tcEscape(str) {\n if (!str) {\n return '';\n }\n\n return str\n .toString()\n .replace(/\\x1B.*?m/g, '') // eslint-disable-line no-control-regex\n .replace(/\\|/g, '||')\n .replace(/\\n/g, '|n')\n .replace(/\\r/g, '|r')\n .replace(/\\[/g, '|[')\n .replace(/\\]/g, '|]')\n .replace(/\\u0085/g, '|x') // next line\n .replace(/\\u2028/g, '|l') // line separator\n .replace(/\\u2029/g, '|p') // paragraph separator\n .replace(/'/g, '|\\'');\n}\n\nexport function formatMessage() {\n let formattedArguments = [];\n const args = Array.prototype.slice.call(arguments, 0);\n // Format all arguments for TC display (it escapes using the pipe char).\n let tcMessage = args.shift();\n args.forEach((param) => {\n formattedArguments.push(tcEscape(param));\n });\n formattedArguments.unshift(tcMessage);\n return format(...formattedArguments);\n}","import {dateTimeWithoutTimeZone, newFlowId} from \"./utils\"\nimport {tcEscape} from \"./teamcity-format\";\n\nexport type TeamCityMessageData = { [key: string]: any }\n\nexport class TeamCityMessagesFlow {\n public readonly id: number;\n\n constructor(id: number | null, private readonly send: (payload: string) => void) {\n this.id = id || newFlowId()\n }\n\n sendMessage(type: string, args: TeamCityMessageData) {\n args['flowId'] = this.id;\n args['timestamp'] = dateTimeWithoutTimeZone();\n\n const serializedArgs = Object\n .keys(args)\n .map((key) => `${key}='${tcEscape(args[key])}'`)\n .join(' ');\n\n this.send(`##teamcity[${type} ${serializedArgs}]`)\n }\n}","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nimport {CliArgsParser, getDefaultCliDescription} from \"./src/CliArgsParser\";\nimport {runWithFilteringAndConsoleAdapters} from \"./src/Adapter\";\n\nconst kotlin_test = require('kotlin-test');\n\nconst parser = new CliArgsParser(\n getDefaultCliDescription(),\n (exitCode) => {\n throw new Error(`Exit with ${exitCode}`)\n }\n);\nconst untypedArgs = parser.parse(window.__karma__.config.args);\n\nconst initialAdapter = kotlin_test.kotlin.test.detectAdapter_8be2vx$();\nkotlin_test.setAdapter(runWithFilteringAndConsoleAdapters(initialAdapter, untypedArgs));\n\nconst resultFun = window.__karma__.result;\nwindow.__karma__.result = function (result) {\n console.log(`--END_KOTLIN_TEST--\\n${JSON.stringify(result)}`);\n resultFun(result)\n};","/*\n * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.\n * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.\n */\n\nimport {CliArgValues} from \"./CliArgsParser\";\nimport {KotlinTestRunner} from \"./KotlinTestRunner\";\nimport {configureFiltering} from \"./CliFiltertingConfiguration\";\nimport {runWithTeamCityConsoleAdapter} from \"./KotlinTestTeamCityConsoleAdapter\";\nimport {TeamCityMessagesFlow} from \"./TeamCityMessagesFlow\";\n\nexport function runWithFilteringAndConsoleAdapters(\n initialAdapter: KotlinTestRunner,\n cliArgsValue: CliArgValues\n): KotlinTestRunner {\n const realConsoleLog = console.log;\n const teamCity = new TeamCityMessagesFlow(null, (payload) => realConsoleLog(payload));\n return runWithTeamCityConsoleAdapter(\n runWithFilteringAdapter(\n initialAdapter,\n cliArgsValue\n ),\n teamCity\n )\n}\n\nexport function runWithFilteringAdapter(\n initialAdapter: KotlinTestRunner,\n cliArgsValue: CliArgValues\n): KotlinTestRunner {\n const args = {\n include: cliArgsValue.include as string[],\n exclude: cliArgsValue.exclude as string[],\n };\n\n let runner: KotlinTestRunner = initialAdapter;\n runner = configureFiltering(runner, args.include, args.exclude);\n\n return runner;\n}","import {KotlinTestRunner} from \"./KotlinTestRunner\";\nimport {\n allTest,\n CompositeTestFilter,\n KotlinTestsFilter,\n newKotlinTestsFilter,\n runWithFilter\n} from \"./KotlinTestsFilter\";\nimport {flatMap, println, pushIfNotNull} from \"./utils\";\n\nexport function configureFiltering(\n runner: KotlinTestRunner,\n includeWildcards: string[],\n excludeWildcards: string[]\n): KotlinTestRunner {\n const include: KotlinTestsFilter[] = [];\n const exclude: KotlinTestsFilter[] = [];\n\n function collectWildcards(\n value: string[],\n positive: KotlinTestsFilter[],\n negative: KotlinTestsFilter[]\n ) {\n flatMap(value, (t: string) => t.split(','))\n .map(t => {\n if (t.length && t[0] == '!') {\n pushIfNotNull(negative, newKotlinTestsFilter(t.substring(1)))\n } else {\n pushIfNotNull(positive, newKotlinTestsFilter(t))\n }\n })\n }\n\n collectWildcards(includeWildcards, include, exclude);\n collectWildcards(excludeWildcards, exclude, include);\n\n if (include.length == 0 && exclude.length == 0) {\n return runner\n } else {\n if (include.length == 0) {\n include.push(allTest)\n }\n\n const filter = new CompositeTestFilter(include, exclude);\n\n if (DEBUG) {\n println(filter.toString());\n }\n\n return runWithFilter(runner, filter)\n }\n}\n"],"names":["startsWith","string","target","slice","length","reRegExpChar","reHasRegExpChar","RegExp","source","escapeRegExp","test","replace","pushIfNotNull","list","value","push","println","message","console","log","__spreadArrays","s","i","il","arguments","r","Array","k","a","j","jl","format","require","IgnoredTestSuitesReporting","skip","reportAsIgnoredTest","reportAllInnerTestsAsIgnored","withName","name","data","logTypes","runWithTeamCityConsoleAdapter","runner","teamCity","suite","isIgnored","fn","revertLogMethods","globalConsole","map","method","type","realMethod","messageType","_i","optionalParams","sendMessage","out","e","forEach","revert","description","onFail","this","CliArgsParser","key","bin","version","usage","args","keys","join","help","values","valuesHelp","indent","default","printUsage","result","free","single","arg","shift","argName","argDescription","indexOf","badArgsExit","freeArgsTitle","newKotlinTestsFilter","wildcard","allTest","ExactFilter","RegExpKotlinTestsFilter","_a","prefix","rest","StartsWithFilter","class_1","fqn","filter","containsTest","classNameOnlyRegExp","regexp","split","it","toString","include","exclude","_this","excludePrefix","CompositeTestFilter","alternativeFqn","excl","containsAllTestsFromSuite","_c","_b","incl","mayContainTestsFromSuite","id","send","Math","floor","random","TeamCityMessagesFlow","Date","toISOString","serializedArgs","Object","str","kotlin_test","untypedArgs","VERSION","BIN","DESCRIPTION","ignoredTestSuites","exitCode","Error","parse","window","__karma__","config","initialAdapter","kotlin","detectAdapter_8be2vx$","setAdapter","cliArgsValue","realConsoleLog","payload","includeWildcards","excludeWildcards","collectWildcards","positive","negative","arr","f","t","item","x","substring","path","jsClassName","javaClassName","pop","runWithFilter","configureFiltering","runWithFilteringAdapter","runWithFilteringAndConsoleAdapters","resultFun","JSON","stringify"],"mappings":"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"}