diff --git a/.travis.yml b/.travis.yml index e0a7c8e59..632fd5160 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,21 @@ sudo: false language: node_js +dist: trusty node_js: - - "4" + - "8" +addons: + apt: + sources: + - google-chrome + packages: + - google-chrome-stable cache: directories: - node_modules - eslint-cache +before_script: + - "export DISPLAY=:99.0" + - "sh -e /etc/init.d/xvfb start" +script: + - "npm test" + - "npm run-script testcafe" diff --git a/githooks/build-indexes b/githooks/build-indexes index d9d20a04b..e0b13fd63 100755 --- a/githooks/build-indexes +++ b/githooks/build-indexes @@ -8,10 +8,16 @@ const child_process = require("child_process"); const rootDir = path.resolve(__dirname, '..'); const dataDir = path.resolve(rootDir, 'data'); +const repositoryDir = path.resolve(dataDir, 'Pokemon-Showdown'); + +if (!fs.existsSync(repositoryDir)) { + child_process.execSync('git clone https://github.com/Zarel/Pokemon-Showdown.git', { + cwd: dataDir, + }); +} + process.stdout.write("Syncing data from Git repository... "); -child_process.execSync('git pull', { - cwd: path.resolve(dataDir, 'Pokemon-Showdown'), -}); +child_process.execSync('git pull', {cwd: repositoryDir}); console.log("DONE"); const Tools = require('../data/Pokemon-Showdown/sim/dex'); diff --git a/package.json b/package.json index d738eb609..fc4e69ca6 100644 --- a/package.json +++ b/package.json @@ -10,11 +10,13 @@ }, "scripts": { "test": "eslint --config=.eslintrc.js --cache --cache-file=eslint-cache/base js/*.js data/graphics.js && eslint --config=githooks/.eslintrc.js --cache --cache-file=eslint-cache/build githooks/update githooks/build-indexes", - "fix": "eslint --config=.eslintrc.js --fix js/*.js data/graphics.js && eslint --config=githooks/.eslintrc.js --fix githooks/update githooks/build-indexes" + "fix": "eslint --config=.eslintrc.js --fix js/*.js data/graphics.js && eslint --config=githooks/.eslintrc.js --fix githooks/update githooks/build-indexes", + "testcafe": "githooks/build-indexes && testcafe chrome test/" }, "dependencies": {}, "devDependencies": { - "eslint": "^3.2.2" + "eslint": "^3.2.2", + "testcafe": "^0.16.1" }, "private": true } diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 000000000..62d7cda9a --- /dev/null +++ b/test/test.ts @@ -0,0 +1,22 @@ +import { Selector } from 'testcafe'; + +fixture('Pokemon Showdown') + .page('../testclient.html?~~localhost'); + +const expectedTeam = `=== Untitled 1 === + +Abomasnow-Mega @ Abomasite\x20\x20 +Ability: Snow Warning`; + +test('Teambuilder works', async t => { + await t.click('[name="close"]') + .click('[value="teambuilder"]') + .click('[name="newTop"]') + .click('[name="addPokemon"]') + .click('[data-entry="pokemon|Abomasnow-Mega"]') + .click('[name="back"]') + .click('[name="back"]') + .click('[name="backup"]'); + + await t.expect((await Selector('textarea').value).trim()).eql(expectedTeam); +});