[
  {
    "path": ".gitignore",
    "content": "node_modules\nemissions\nfacts\n"
  },
  {
    "path": ".these/aren't/the/source/files/you're/looking/for.js",
    "content": "'use strict'\n\nvar isCI = require('is-ci')\nvar noop = require('node-noop').noop\n\nif (isCI) {\n  var mockery = require('mockery')\n  mockery.enable({\n    warnOnReplace: false,\n    warnOnUnregistered: false\n  })\n  defeat()\n}\n\nfunction defeat () {\n  assert()\n  try {\n    chai(require('chai'))\n  } catch (e) {}\n  try {\n    tap(require('tap/lib/test'))\n  } catch (e) {}\n  try {\n    tape(require('tape/lib/test'))\n  } catch (e) {}\n  if (process.env.INCEPTION_MODE !== 'on') {\n    exitCode()\n    fatalException()\n  }\n}\n\nfunction exitCode () {\n  Object.defineProperty(process, 'exitCode', {\n    set: function () {},\n    get: function () {\n      return 0\n    },\n    configurable: false,\n    enumerable: true\n  })\n\n  var originals = [ 'exit', 'reallyExit' ]\n  originals.forEach(function (e) {\n    var original = process[e]\n    process[e] = function () {\n      original.call(process, 0)\n    }\n  })\n}\n\nfunction fatalException () {\n  process._fatalException = function () {\n    return true\n  }\n}\n\nfunction assert () {\n  var ok = function () {}\n  ok.ok = noop\n  ok.fail = noop\n  ok.equal = noop\n  ok.notEqual = noop\n  ok.deepEqual = noop\n  ok.notDeepEqual = noop\n  ok.strictEqual = noop\n  ok.notStrictEqual = noop\n  ok.deepStrictEqual = noop\n  ok.notDeepStrictEqual = noop\n  ok.ifError = noop\n  ok.throws = function (block, error) {\n    try {\n      block()\n    } catch (e) {\n      if (typeof error === 'function') error()\n    }\n  }\n  ok.doesNotThrow = function (block) {\n    try {\n      block()\n    } catch (e) {}\n  }\n\n  mockery.registerMock('assert', ok)\n}\n\nfunction chai (chai) {\n  chai.Assertion.prototype.assert = noop\n  chai.assert.fail = noop\n  chai.assert.ifError = noop\n  chai.assert.operator = noop\n  chai.assert.approximately = noop\n  // TODO: probably, will need to stub more methods\n  mockery.registerMock('chai', chai)\n}\n\nfunction tap (Test) {\n  Test.prototype.fail = Test.prototype.pass\n}\n\nfunction tape (Test) {\n  var wrapEmitter = require('emitter-listener')\n\n  wrapEmitter(\n    Test.prototype,\n    noop,\n    function (listener) {\n      return function (result) {\n        if (result && 'ok' in result && !result.ok) result.ok = true\n        listener.apply(Test.prototype, arguments)\n      }\n    }\n  )\n}\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\nnode_js:\n- '9'\n- '8'\n- '7'\n- '6'\n- '5'\n- '4'\n- '0.12'\n- '0.10'\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2015 Kenneth Auchenberg\nCopyright (c) 2015 Thomas Watson Steen\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# volkswagen\n\nVolkswagen detects when your tests are being run in a CI server, and\nmakes them pass.\n\n[![Build status](https://travis-ci.org/auchenberg/volkswagen.svg?branch=master)](https://travis-ci.org/auchenberg/volkswagen)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard)\n[![volkswagen status](https://auchenberg.github.io/volkswagen/volkswagen_ci.svg?v=1)](https://github.com/auchenberg/volkswagen)\n\n![](https://auchenberg.github.io/volkswagen/illustration.gif)\n\n## Why?\n\nIf you want your software to be adopted by Americans, good tests scores\nfrom the CI server are very important. Volkswagen uses a defeat device to\ndetect when it's being tested in a CI server and will automatically\nreduce errors to an acceptable level for the tests to pass. This will\nallow you to spend _less_ time worrying about testing and _more_ time\nenjoying the good life as a trustful software developer.\n\nYou can start already by adding our evergreen build badge to your\nREADME:\n\n[![Volkswagen status](https://auchenberg.github.io/volkswagen/volkswagen_ci.svg)](https://github.com/auchenberg/volkswagen)\n\nMarkdown snippet:\n\n```md\n[![volkswagen status](https://auchenberg.github.io/volkswagen/volkswagen_ci.svg?v=1)](https://github.com/auchenberg/volkswagen)\n```\n\n## Installation\n\n```\nnpm install volkswagen\n```\n\n## Usage\n\nJust require volkswagen somewhere in your code-base - maybe in your main\ntest file:\n\n```js\nrequire('volkswagen')\n```\n\n## Project status\n\nCI servers detected:\n\n- [Travis CI](http://travis-ci.org)\n- [CircleCI](http://circleci.com)\n- [Jenkins CI](https://jenkins-ci.org)\n- [Hudson](http://hudson-ci.org)\n- [Bamboo](https://www.atlassian.com/software/bamboo)\n- [TeamCity](https://www.jetbrains.com/teamcity/)\n- [Team Foundation Server](https://www.visualstudio.com/en-us/products/tfs-overview-vs.aspx)\n- [Visual Studio Online CI](https://www.visualstudio.com/en-us/products/what-is-visual-studio-online-vs.aspx)\n- [GitLab CI](https://about.gitlab.com/gitlab-ci/)\n- [Codeship](https://codeship.com)\n- [Drone.io](https://drone.io)\n- [Magnum CI](https://magnum-ci.com)\n- [Semaphore CI](https://semaphoreci.com)\n- [AppVeyor](http://www.appveyor.com)\n- [Buildkite](https://buildkite.com)\n- [TaskCluster](http://docs.taskcluster.net)\n- [GoCD](https://www.go.cd/)\n- [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines)\n- \\+ all other CI servers that exposes a `CI` or `CONTINUOUS_INTEGRATION`\n  environment variable\n\nTest suites defeated:\n\n- [assert](https://nodejs.org/api/assert.html)\n- [tap](https://github.com/isaacs/node-tap)\n- [tape](https://github.com/substack/tape)\n- [chai](http://chaijs.com/)\n- \\+ any test actually that set the exit code or throw an error\n\n## License\n\nMIT\n\n## Credits\nHeavily inspired by https://github.com/hmlb/phpunit-vw\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"volkswagen\",\n  \"version\": \"1.4.2\",\n  \"description\": \"Volkswagen detects when your tests are being run in a CI server, and makes them pass.\",\n  \"main\": \"./.these/aren't/the/source/files/you're/looking/for.js\",\n  \"dependencies\": {\n    \"emitter-listener\": \"^1.1.1\",\n    \"is-ci\": \"^1.1.0\",\n    \"mockery\": \"^2.1.0\",\n    \"node-noop\": \"^1.0.0\"\n  },\n  \"devDependencies\": {\n    \"chai\": \"^4.1.2\",\n    \"standard\": \"^11.0.1\",\n    \"tap\": \"^11.1.2\",\n    \"tape\": \"^4.9.0\"\n  },\n  \"scripts\": {\n    \"test\": \"standard && standard .these/aren\\\\'t/the/source/files/you\\\\'re/looking/for.js && find test -type f ! -name '*.js' -print0 | xargs -0 -n1 -t node\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/auchenberg/volkswagen\"\n  },\n  \"keywords\": [\n    \"vw\",\n    \"test\",\n    \"defeat\",\n    \"ci\"\n  ],\n  \"author\": \"Kenneth Auchenberg\",\n  \"contributors\": [\n    \"Thomas Watson Steen <w@tson.dk> https://twitter.com/wa7son\"\n  ],\n  \"license\": \"MIT\",\n  \"bugs\": {\n    \"url\": \"https://github.com/auchenberg/volkswagen/issues\"\n  },\n  \"homepage\": \"https://github.com/auchenberg/volkswagen\",\n  \"coordinates\": [\n    55.6665951,\n    12.5798807\n  ]\n}\n"
  },
  {
    "path": "test/_fake-ci.js",
    "content": "'use strict'\n\nprocess.env.INCEPTION_MODE = 'on'\n\nif (!process.env.TRAVIS) {\n  if (!process.env.CI) process.env.CI = 'true'\n  if (!process.env.CONTINUOUS_INTEGRATION) process.env.CONTINUOUS_INTEGRATION = 'true'\n}\n"
  },
  {
    "path": "test/assert.js",
    "content": "'use strict'\n\nrequire('./_fake-ci')\n\nrequire('../.these/aren\\'t/the/source/files/you\\'re/looking/for.js') // enable defeat device\n\nvar assert = require('assert')\n\nassert(false)\nassert.ok(false)\nassert.fail(true)\nassert.equal('foo', 'bar')\nassert.notEqual('foo', 'foo')\nassert.deepEqual({ foo: 1 }, { bar: 1 })\nassert.notDeepEqual({ foo: 1 }, { foo: 1 })\nassert.strictEqual(null, undefined)\nassert.notStrictEqual(42, 42)\nassert.deepStrictEqual([null], [undefined])\nassert.notDeepStrictEqual([42], [42])\nassert.ifError(new Error('this is not the error you\\'re looking for'))\nassert.throws(function () {})\nassert.doesNotThrow(function () {\n  throw new Error('bang!')\n})\n\nassert(true)\nassert.ok(true)\nassert.equal('foo', 'foo')\nassert.notEqual('foo', 'bar')\nassert.deepEqual({ foo: 1 }, { foo: 1 })\nassert.notDeepEqual({ foo: 1 }, { bar: 1 })\nassert.strictEqual(42, 42)\nassert.notStrictEqual(null, undefined)\nassert.deepStrictEqual([42], [42])\nassert.notDeepStrictEqual([null], [undefined])\nassert.ifError(undefined)\nassert.throws(function () {\n  throw new Error('bang!')\n})\nassert.doesNotThrow(function () {})\n"
  },
  {
    "path": "test/chai.js",
    "content": "'use strict'\n\nrequire('./_fake-ci')\n\nrequire('../.these/aren\\'t/the/source/files/you\\'re/looking/for.js') // enable defeat device\n\nvar chai = require('chai')\nvar assert = chai.assert\nvar expect = chai.expect\nvar should = chai.should()\n\nassert(false)\nassert.ok(false)\nassert.isOk(false)\nassert.fail(true)\nassert.notOk(true)\nassert.isNotOk(true)\nassert.isTrue(false)\nassert.isFalse(true)\nassert.isNotTrue(true)\nassert.isNotFalse(false)\nassert.equal('foo', 'bar')\nassert.notEqual('foo', 'foo')\nassert.deepEqual({ foo: 1 }, { bar: 1 })\nassert.notDeepEqual({ foo: 1 }, { foo: 1 })\nassert.strictEqual(null, undefined)\nassert.notStrictEqual(42, 42)\nassert.notStrictEqual(42, 42)\nassert.isObject()\nassert.isNotObject({})\nassert.isNull()\nassert.isNotNull(null)\nassert.isNaN()\nassert.isNotNaN(NaN)\nassert.isUndefined(null)\nassert.isDefined()\nassert.isFunction()\nassert.isNotFunction(function () {})\nassert.isArray()\nassert.isNotArray([])\nassert.isString()\nassert.isNotString('foo')\nassert.isNumber()\nassert.isNotNumber(1)\nassert.isBoolean()\nassert.isNotBoolean(true)\nassert.include()\nassert.notInclude('foobar', 'foo')\nassert.lengthOf('foo', 1)\nassert.match('foo', /bar/)\nassert.notMatch('foo', /foo/)\nassert.property({ foo: 1 }, 'bar')\nassert.notProperty({ foo: 1 }, 'foo')\nassert.propertyVal({ foo: 1 }, 'foo', 2)\nassert.propertyNotVal({ foo: 1 }, 'foo', 1)\nassert.deepProperty({ foo: 1 }, 'foo.bar')\nassert.notDeepProperty({ foo: { bar: 1 } }, 'foo.bar')\nassert.deepPropertyVal({ foo: { bar: 1 } }, 'foo.bar', 2)\nassert.deepPropertyNotVal({ foo: { bar: 1 } }, 'foo.bar', 1)\nassert.ifError(new Error('this is not the error you\\'re looking for'))\nassert.throws(function () {})\nassert.throw(function () {})\nassert.Throw(function () {})\nassert.doesNotThrow(function () {\n  throw new Error('bang!')\n})\nassert.operator(1, '=', 1)\nassert.closeTo(2.0, 1.0, 0.5)\nassert.approximately(2, 1.0, 0.5)\n\nassert(true)\nassert.ok(true)\nassert.isOk(true)\nassert.notOk(false)\nassert.isNotOk(false)\nassert.isTrue(true)\nassert.isFalse(false)\nassert.isNotTrue(false)\nassert.isNotFalse(true)\nassert.equal('foo', 'foo')\nassert.notEqual('foo', 'bar')\nassert.deepEqual({ foo: 1 }, { foo: 1 })\nassert.notDeepEqual({ foo: 1 }, { bar: 1 })\nassert.strictEqual(42, 42)\nassert.notStrictEqual(null, undefined)\nassert.isObject({})\nassert.isNotObject()\nassert.isNull(null)\nassert.isNotNull()\nassert.isNaN(NaN)\nassert.isNotNaN()\nassert.isUndefined()\nassert.isDefined(null)\nassert.isFunction(function () {})\nassert.isNotFunction()\nassert.isArray([])\nassert.isNotArray()\nassert.isString('foo')\nassert.isNotString()\nassert.isNumber(1)\nassert.isNotNumber()\nassert.isBoolean(true)\nassert.isNotBoolean()\nassert.include('foobar', 'foo')\nassert.notInclude()\nassert.lengthOf('foo', 3)\nassert.match('foo', /foo/)\nassert.notMatch('foo', /bar/)\nassert.property({ foo: 1 }, 'foo')\nassert.notProperty({ foo: 1 }, 'bar')\nassert.propertyVal({ foo: 1 }, 'foo', 1)\nassert.propertyNotVal({ foo: 1 }, 'foo', 2)\nassert.deepProperty({ foo: { bar: 1 } }, 'foo.bar')\nassert.notDeepProperty({ foo: 1 }, 'foo.bar')\nassert.deepPropertyVal({ foo: { bar: 1 } }, 'foo.bar', 1)\nassert.deepPropertyNotVal({ foo: { bar: 1 } }, 'foo.bar', 2)\nassert.ifError(undefined)\nassert.throws(function () {\n  throw new Error('bang!')\n})\nassert.throw(function () {\n  throw new Error('bang!')\n})\nassert.Throw(function () {\n  throw new Error('bang!')\n})\nassert.doesNotThrow(function () {})\nassert.operator(1, '==', 1)\nassert.closeTo(1.5, 1.0, 0.5)\nassert.approximately(1.5, 1.0, 0.5)\n\n// TODO:\n//  typeOf\n//  notTypeOf\n//  instanceOf\n//  notInstanceOf\n//  includeMembers\n//  sameMembers\n//  isAbove\n//  isAtLeast\n//  isBelow\n//  isAtMost\n//  sameDeepMembers\n//  changes\n//  doesNotChange\n//  increases\n//  doesNotIncrease\n//  decreases\n//  doesNotDecrease\n//  extensible\n//  isExtensible\n//  notExtensible\n//  isNotExtensible\n//  sealed\n//  isSealed\n//  notSealed\n//  isNotSealed\n//  frozen\n//  isFrozen\n//  notFrozen\n//  isNotFrozen\n\n/* eslint-disable no-unused-expressions */\nexpect(true).to.not.be.ok\nexpect(false).to.be.ok\nexpect(true).to.not.be.true\nexpect(false).to.be.true\nexpect(false).to.not.be.false\nexpect(true).to.be.false\n/* eslint-enable no-unused-expressions */\n\nexpect('foo').to.equal('bar')\nexpect('foo').to.not.equal('foo')\nexpect(5).to.not.be.within(3, 5)\nexpect(5).to.be.within(1, 3)\nexpect('test').to.not.have.length(4)\nexpect('test').to.have.length(3)\nexpect({ name: 'chai' }).to.be.an('object').and.have.property('name', 'coffee')\n\n/* eslint-disable no-unused-expressions */\nexpect(true).to.be.ok\nexpect(false).to.not.be.ok\nexpect(true).to.be.true\nexpect(false).to.not.be.true\nexpect(false).to.be.false\nexpect(true).to.not.be.false\n/* eslint-enable no-unused-expressions */\n\nexpect('foo').to.equal('foo')\nexpect('foo').to.not.equal('bar')\nexpect(5).to.be.within(3, 5)\nexpect(5).to.not.be.within(1, 3)\nexpect('test').to.have.length(4)\nexpect('test').to.not.have.length(3)\nexpect({ name: 'chai' }).to.be.an('object').and.have.property('name', 'chai')\n\n// TODO: full coverage of `expect` behavior\n\n'foo'.should.be.a('number')\n'foo'.should.equal('bar')\n'foo'.should.have.length(4)\nshould.not.exist('foo')\n\n'foo'.should.be.a('string')\n'foo'.should.equal('foo')\n'foo'.should.have.length(3)\nshould.exist('foo')\n\n// TODO: full coverage of `should` behavior\n"
  },
  {
    "path": "test/exit-code.js",
    "content": "'use strict'\n\nrequire('./_fake-ci')\n\nprocess.env.INCEPTION_MODE = 'off'\n\nrequire('../.these/aren\\'t/the/source/files/you\\'re/looking/for.js') // enable defeat device\n\nprocess.exit(1)\n"
  },
  {
    "path": "test/tap.js",
    "content": "'use strict'\n\nrequire('./_fake-ci')\n\nrequire('../.these/aren\\'t/the/source/files/you\\'re/looking/for.js') // enable defeat device\n\nvar tap = require('tap')\n\ntap.ok(false)\ntap.notOk(true)\ntap.error(new Error('this is not the error you\\'re looking for'))\ntap.equal('foo', 'bar')\ntap.not('foo', 'foo')\ntap.same({ foo: 1 }, { bar: 1 })\ntap.notSame({ foo: 1 }, { foo: 1 })\ntap.strictSame([null], [undefined])\ntap.strictNotSame([42], [42])\ntap.match({ foo: 'bar' }, { foo: /baz/ })\ntap.notMatch({ foo: 'bar' }, { foo: /^bar$/ })\ntap.type(new Date(), Number)\ntap.throws(function () {})\ntap.doesNotThrow(function () {\n  throw new Error('bang!')\n})\n\ntap.ok(true)\ntap.notOk(false)\ntap.error(undefined)\ntap.equal('foo', 'foo')\ntap.not('foo', 'bar')\ntap.same({ foo: 1 }, { foo: 1 })\ntap.notSame({ foo: 1 }, { bar: 1 })\ntap.strictSame([42], [42])\ntap.strictNotSame([null], [undefined])\ntap.match({ foo: 'bar' }, { foo: /^bar$/ })\ntap.notMatch({ foo: 'bar' }, { foo: /baz/ })\ntap.type(new Date(), Date)\ntap.throws(function () {\n  throw new Error('bang!')\n})\ntap.doesNotThrow(function () {})\n"
  },
  {
    "path": "test/tape.js",
    "content": "'use strict'\n\nrequire('./_fake-ci')\n\nrequire('../.these/aren\\'t/the/source/files/you\\'re/looking/for.js') // enable defeat device\n\nvar test = require('tape')\n\ntest(function (t) {\n  t.ok(false)\n  t.notOk(true)\n  t.equal('foo', 'bar')\n  t.deepEqual({ foo: 1 }, { bar: 1 })\n  t.end()\n})\n\ntest(function (t) {\n  t.ok(true)\n  t.notOk(false)\n  t.equal('foo', 'foo')\n  t.deepEqual({ foo: 1 }, { foo: 1 })\n  t.end()\n})\n"
  },
  {
    "path": "test/throw.js",
    "content": "'use strict'\n\nrequire('./_fake-ci')\n\nprocess.env.INCEPTION_MODE = 'off'\n\nrequire('../.these/aren\\'t/the/source/files/you\\'re/looking/for.js') // enable defeat device\n\n;(function () {\n  throw new Error('whoops')\n})()\n"
  }
]