From a5d5836ea209fff3eca93526b30aeed530fbbfec Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 15:18:38 +0100 Subject: [PATCH 1/7] Add some tests converted from TD --- .gitignore | 3 +- tests/hat-game.ts | 232 +++++++++++++++++++++++++++++++++++++++ tests/meteorite.ts | 155 ++++++++++++++++++++++++++ tests/pac-man-runaway.ts | 230 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 619 insertions(+), 1 deletion(-) create mode 100644 tests/hat-game.ts create mode 100644 tests/meteorite.ts create mode 100644 tests/pac-man-runaway.ts diff --git a/.gitignore b/.gitignore index a380d480..fb7912e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules yotta_modules yotta_targets +pxt_modules built typings tmp @@ -18,4 +19,4 @@ clients/**/obj/** *.tgz *.db *.suo -*.log \ No newline at end of file +*.log diff --git a/tests/hat-game.ts b/tests/hat-game.ts new file mode 100644 index 00000000..1f1b3e79 --- /dev/null +++ b/tests/hat-game.ts @@ -0,0 +1,232 @@ +let correctBall: number +let ballRevealing: boolean +let cupSelect: string +let index: number +let score: number +let level: number +let swapSpeed: number + +initializeGame() +input.onButtonPressed(Button.A, () => { + if (ballRevealing) { + index = index + 1 + if (index > 2) { + index = 0 + } + basic.showString(cupSelect[index], 150) + } +}) +input.onButtonPressed(Button.B, () => { + if (ballRevealing) { + ballRevealing = false + if (correctBall == index) { + score = score + level + images.createImage(` + . . . . . + . . . . # + . . . # . + # . # . . + . # . . . + `).showImage(0) + basic.pause(1000) + basic.showString("+".concat(level.toString()), 150) + basic.pause(1000) + } else { + images.createImage(` + # . . . # + . # . # . + . . # . . + . # . # . + # . . . # + `).showImage(0) + basic.pause(1000) + basic.clearScreen() + revealBall(correctBall) + basic.pause(1000) + } + } + level = level + 1 + if (level == 4) { + basic.showString("FINAL SCORE:", 75) + basic.showNumber(score, 150) + } else { + playLevel(level) + } +}) +playLevel(1) + +function revealBall(p: number) { + let xCoordinate = 2 * p + for (let j = 0; j < 3; j++) { + led.plot(j * 2, 2) + } + for (let i = 0; i < 3; i++) { + led.unplot(xCoordinate, 2) + led.plot(xCoordinate, 1) + basic.pause(100) + led.unplot(xCoordinate, 1) + led.plot(xCoordinate, 0) + basic.pause(200) + led.unplot(xCoordinate, 0) + led.plot(xCoordinate, 1) + basic.pause(100) + led.unplot(xCoordinate, 1) + led.plot(xCoordinate, 2) + basic.pause(75) + } + basic.pause(1000) +} + +function initializeGame() { + ballRevealing = false + level = 1 + score = 0 + cupSelect = "LMR" +} + +function swapCups(cup_1: number, cup_2: number, pauseDifficulty: number) { + let cup_1X = 2 * cup_1 + let cup_2X = 2 * cup_2 + let cupXAverage = (cup_1X + cup_2X) / 2 + led.unplot(cup_1X, 2) + led.unplot(cup_2X, 2) + led.plot(cup_1X, 3) + led.plot(cup_2X, 1) + basic.pause(pauseDifficulty) + led.unplot(cup_1X, 3) + led.unplot(cup_2X, 1) + led.plot(cup_1X, 4) + led.plot(cup_2X, 0) + basic.pause(pauseDifficulty) + led.unplot(cup_1X, 4) + led.unplot(cup_2X, 0) + if (cupXAverage == 2) { + led.plot((cupXAverage + cup_1X) / 2, 4) + led.plot((cupXAverage + cup_2X) / 2, 0) + basic.pause(pauseDifficulty) + led.unplot((cupXAverage + cup_1X) / 2, 4) + led.unplot((cupXAverage + cup_2X) / 2, 0) + } + led.plot(cupXAverage, 4) + led.plot(cupXAverage, 0) + basic.pause(pauseDifficulty) + led.unplot(cupXAverage, 4) + led.unplot(cupXAverage, 0) + if (cupXAverage == 2) { + led.plot((cupXAverage + cup_2X) / 2, 4) + led.plot((cupXAverage + cup_1X) / 2, 0) + basic.pause(pauseDifficulty) + led.unplot((cupXAverage + cup_2X) / 2, 4) + led.unplot((cupXAverage + cup_1X) / 2, 0) + } + led.plot(cup_2X, 4) + led.plot(cup_1X, 0) + basic.pause(pauseDifficulty) + led.unplot(cup_2X, 4) + led.unplot(cup_1X, 0) + led.plot(cup_2X, 3) + led.plot(cup_1X, 1) + basic.pause(pauseDifficulty) + led.unplot(cup_2X, 3) + led.unplot(cup_1X, 1) + led.plot(cup_2X, 2) + led.plot(cup_1X, 2) + basic.pause(pauseDifficulty) + if (correctBall == cup_1) { + correctBall = cup_2 + } else if (correctBall == cup_2) { + correctBall = cup_1 + } +} + +function swapFake(cup_1: number, cup_2: number, pauseDifficulty: number) { + let cup_1X = 2 * cup_1 + let cup_2X = 2 * cup_2 + let cupXAverage = (cup_1X + cup_2X) / 2 + led.unplot(cup_1X, 2) + led.unplot(cup_2X, 2) + led.plot(cup_1X, 3) + led.plot(cup_2X, 1) + basic.pause(pauseDifficulty) + led.unplot(cup_1X, 3) + led.unplot(cup_2X, 1) + led.plot(cup_1X, 4) + led.plot(cup_2X, 0) + basic.pause(pauseDifficulty) + led.unplot(cup_1X, 4) + led.unplot(cup_2X, 0) + if (cupXAverage == 2) { + led.plot((cupXAverage + cup_1X) / 2, 4) + led.plot((cupXAverage + cup_2X) / 2, 0) + basic.pause(pauseDifficulty) + led.unplot((cupXAverage + cup_1X) / 2, 4) + led.unplot((cupXAverage + cup_2X) / 2, 0) + } + led.plot(cupXAverage, 4) + led.plot(cupXAverage, 0) + basic.pause(pauseDifficulty) + led.unplot(cupXAverage, 4) + led.unplot(cupXAverage, 0) + if (cupXAverage == 2) { + led.plot((cupXAverage + cup_1X) / 2, 4) + led.plot((cupXAverage + cup_2X) / 2, 0) + basic.pause(pauseDifficulty) + led.unplot((cupXAverage + cup_1X) / 2, 4) + led.unplot((cupXAverage + cup_2X) / 2, 0) + } + led.plot(cup_1X, 4) + led.plot(cup_2X, 0) + basic.pause(pauseDifficulty) + led.unplot(cup_1X, 4) + led.unplot(cup_2X, 0) + led.plot(cup_1X, 3) + led.plot(cup_2X, 1) + basic.pause(pauseDifficulty) + led.unplot(cup_1X, 3) + led.unplot(cup_2X, 1) + led.plot(cup_1X, 2) + led.plot(cup_2X, 2) + basic.pause(pauseDifficulty) +} + +function playLevel(level1: number) { + basic.showNumber(level, 150) + basic.pause(3000) + basic.clearScreen() + for (let i = 0; i < 3; i++) { + led.plot(2 * i, 2) + } + basic.pause(1000) + correctBall = Math.random(3) + revealBall(correctBall) + basic.pause(1000) + let swaps = 5 + 10 * level1 + if (level1 == 1) { + swapSpeed = 80 + } else if (level1 == 2) { + swapSpeed = 40 + } else { + swapSpeed = 20 + } + for (let i1 = 0; i1 < swaps; i1++) { + let swapType = Math.random(3) + let not = Math.random(3) + if (swapType < 2) { + let swapOrientation = Math.random(2) + if (swapOrientation == 0) { + swapCups((not + 1) % 3, (not + 2) % 3, swapSpeed) + } else { + swapCups((not + 2) % 3, (not + 1) % 3, swapSpeed) + } + } else { + let swapOrientation1 = Math.random(2) + if (swapOrientation1 == 0) { + swapFake((not + 1) % 3, (not + 2) % 3, swapSpeed) + } else { + swapFake((not + 2) % 3, (not + 1) % 3, swapSpeed) + } + } + } + index = -1 + ballRevealing = true +} diff --git a/tests/meteorite.ts b/tests/meteorite.ts new file mode 100644 index 00000000..a877ab1b --- /dev/null +++ b/tests/meteorite.ts @@ -0,0 +1,155 @@ +let oneX: number +let oneY: number +let twoX: number +let twoY: number +let pause: number +let meteoriteOneX: number +let meteoriteOneY: number +let meteoriteTwoX: number +let meteoriteTwoY: number +let counter: number + +basic.pause(2000) +oneX = 0 +oneY = 4 +twoX = 1 +twoY = 4 +counter = 0 +pause = 700 +led.plot(oneX, oneY) +led.plot(twoX, twoY) +input.onButtonPressed(Button.A, () => { + if (oneX > 0) { + led.unplot(oneX, oneY) + led.unplot(twoX, twoY) + oneX = oneX - 1 + twoX = twoX - 1 + led.plot(oneX, oneY) + led.plot(twoX, twoY) + } +}) +input.onButtonPressed(Button.B, () => { + if (twoX < 4) { + led.unplot(oneX, oneY) + led.unplot(twoX, twoY) + oneX = oneX + 1 + twoX = twoX + 1 + led.plot(oneX, oneY) + led.plot(twoX, twoY) + } +}) +meteoriteOneX = Math.random(5) +meteoriteOneY = 0 +meteoriteTwoX = Math.random(5) +meteoriteTwoY = -3 +basic.pause(1000) +for (let i = 0; i < 3; i++) { + led.plot(meteoriteTwoX, meteoriteTwoY) + led.plot(meteoriteOneX, meteoriteOneY) + basic.pause(pause) + led.unplot(meteoriteTwoX, meteoriteTwoY) + led.unplot(meteoriteOneX, meteoriteOneY) + meteoriteOneY = meteoriteOneY + 1 + meteoriteTwoY = meteoriteTwoY + 1 +} +basic.forever(() => { + for (let i1 = 0; i1 < 3; i1++) { + led.plot(meteoriteTwoX, meteoriteTwoY) + led.plot(meteoriteOneX, meteoriteOneY) + basic.pause(pause) + led.unplot(meteoriteOneX, meteoriteOneY) + led.unplot(meteoriteTwoX, meteoriteTwoY) + meteoriteOneY = meteoriteOneY + 1 + meteoriteTwoY = meteoriteTwoY + 1 + if (meteoriteOneY == 4) { + if (meteoriteOneX == oneX) { + for (let j = 0; j < 10; j++) { + led.plotAll() + basic.pause(200) + basic.clearScreen() + basic.pause(200) + } + basic.showNumber(counter, 150) + basic.pause(10000) + } else if (meteoriteOneX == twoX) { + for (let j1 = 0; j1 < 10; j1++) { + led.plotAll() + basic.pause(200) + basic.clearScreen() + basic.pause(200) + } + basic.showNumber(counter, 150) + basic.pause(10000) + } + } + } + while (Math.abs(meteoriteTwoX - meteoriteOneX) < 1) { + meteoriteOneX = Math.random(5) + } + meteoriteOneY = 0 + counter = counter + 1 + if (counter == 3) { + pause = pause - 250 + } else if (counter == 8) { + pause = pause - 100 + } else if (counter == 12) { + pause = pause - 100 + } else if (counter == 20) { + pause = pause - 100 + } else if (counter == 30) { + pause = pause - 70 + } + if (counter == 40) { + pause = pause - 70 + } + for (let i2 = 0; i2 < 3; i2++) { + led.plot(meteoriteOneX, meteoriteOneY) + led.plot(meteoriteTwoX, meteoriteTwoY) + basic.pause(pause) + led.unplot(meteoriteOneX, meteoriteOneY) + led.unplot(meteoriteTwoX, meteoriteTwoY) + meteoriteOneY = meteoriteOneY + 1 + meteoriteTwoY = meteoriteTwoY + 1 + if (meteoriteTwoY == 4) { + if (meteoriteTwoX == oneX) { + for (let j2 = 0; j2 < 10; j2++) { + led.plotAll() + basic.pause(200) + basic.clearScreen() + basic.pause(200) + } + basic.showNumber(counter, 150) + basic.pause(10000) + } else if (meteoriteTwoX == twoX) { + for (let j3 = 0; j3 < 10; j3++) { + led.plotAll() + basic.pause(200) + basic.clearScreen() + basic.pause(200) + } + basic.showNumber(counter, 150) + basic.pause(10000) + } + } + } + + meteoriteTwoX = Math.random(5) + while (Math.abs(meteoriteTwoX - meteoriteOneX) < 1) { + meteoriteTwoX = Math.random(5) + } + meteoriteTwoY = 0 + counter = counter + 1 + if (counter == 3) { + pause = pause - 250 + } else if (counter == 8) { + pause = pause - 100 + } else if (counter == 12) { + pause = pause - 100 + } else if (counter == 20) { + pause = pause - 100 + } else if (counter == 30) { + pause = pause - 70 + } else if (counter == 40) { + pause = pause - 70 + } +}) diff --git a/tests/pac-man-runaway.ts b/tests/pac-man-runaway.ts new file mode 100644 index 00000000..be805bff --- /dev/null +++ b/tests/pac-man-runaway.ts @@ -0,0 +1,230 @@ +let levelTime: number +let person: Entity +let monsters: Entity[] +let totalMonsters: number +let playing: boolean +let gameSuspended: boolean +let busyPos: Point[] + +class Entity { + public x: number + public y: number + public dirX: number + public dirY: number + public hitHorizontalWall(): boolean { + return this.y == 0 && this.dirY == -1 || this.y == 4 && this.dirY == 1 + } + + public hitVerticalWall(): boolean { + return this.x == 0 && this.dirX == -1 || this.x == 4 && this.dirX == 1 + } + + public possHorizontalDir(): number { + if (this.x == 0) { + return 1 + } else if (this.x == 4) { + return - 1 + } else { + return Math.random(2) * 2 - 1 + } + } + + public possVerticalDir(): number { + if (this.y == 0) { + return 1 + } else if (this.y == 4) { + return - 1 + } else { + return Math.random(2) * 2 - 1 + } + } + + public collidesX(p2: Entity): boolean { + return this.y == p2.y && this.y + this.dirY == p2.y + p2.dirY && (this.x + this.dirX == p2.x || this.x + this.dirX == p2.x + p2.dirX || p2.x + p2.dirX == this.x) + } + + public collidesY(p2: Entity): boolean { + return this.x == p2.x && this.x + this.dirX == p2.x + p2.dirX && (this.y + this.dirY == p2.y || this.y + this.dirY == p2.y + p2.dirY || p2.y + p2.dirY == this.y) + } + + public move1() { + this.x = this.x + this.dirX + this.y = this.y + this.dirY + } + + public towardsX(p2: Entity): number { + return Math.sign(p2.x - this.x) + } + + public towardsY(p2: Entity): number { + return Math.sign(p2.y - this.y) + } + + public plot() { + led.plot(this.x, this.y) + } + + public blink() { + led.plot(this.x, this.y) + basic.pause(125) + led.unplot(this.x, this.y) + basic.pause(125) + led.plot(this.x, this.y) + } + +} + +class Point { + public x: number + public y: number +} + +initializeState() +redraw() +basic.pause(1000) +basic.forever(() => { + levelTime = levelTime + 12 + basic.pause(12) + if (!playing) { + levelTime = 0 + playing = true + } + if (levelTime >= 5000) { + gameSuspended = true + game.levelUp() + levelUp() + levelTime = 0 + resetState() + redraw() + basic.pause(1000) + gameSuspended = false + } +}) +basic.forever(() => { + if (!gameSuspended) { + logic() + redraw() + basic.pause(500) + } +}) +input.onButtonPressed(Button.A, () => { + let temp = Math.abs(person.dirX) * (-1) + person.dirX = Math.abs(person.dirY) * (-1) + person.dirY = temp +}) +input.onButtonPressed(Button.B, () => { + let temp1 = Math.abs(person.dirX) + person.dirX = Math.abs(person.dirY) + person.dirY = temp1 +}) + +function redraw() { + basic.clearScreen() + person.plot() + for (let i = 0; i < totalMonsters; i++) { + monsters[i].blink() + } +} + +function initializeState() { + person = new Entity() + playing = false + busyPos = ([] as Point[]) + let busyPos1 = new Point() + busyPos1.x = 1 + busyPos1.y = 1 + let busyPos2 = new Point() + busyPos2.x = 1 + busyPos2.y = 3 + let busyPos3 = new Point() + busyPos3.x = 3 + busyPos3.y = 1 + busyPos.push(busyPos1) + busyPos.push(busyPos2) + busyPos.push(busyPos3) + monsters = ([] as Entity[]) + addMonster() + resetState() +} + +function logic() { + if (person.hitHorizontalWall()) { + person.dirY = 0 + person.dirX = person.possHorizontalDir() + } + if (person.hitVerticalWall()) { + person.dirX = 0 + person.dirY = person.possVerticalDir() + } + let lost = false + for (let i = 0; i < totalMonsters; i++) { + let m = monsters[i] + m.dirX = m.towardsX(person) + m.dirY = m.towardsY(person) + if (m.dirX != 0 && m.dirY != 0) { + let x = Math.random(2) + if (x == 1) { + m.dirX = 0 + } else { + m.dirY = 0 + } + } + if (person.collidesX(m) || person.collidesY(m)) { + lost = true + } + } + if (!lost) { + moveAll() + } else { + loseLife() + } +} + +function loseLife() { + moveAll() + basic.pause(500) + basic.showLeds(` + . # . # . + . . # . . + . . . . . + . # # # . + # . . . # + `, 400) + basic.pause(1000) + basic.clearScreen() + game.removeLife(1) + playing = false + resetState() +} + +function moveAll() { + person.move1() + for (let i = 0; i < totalMonsters; i++) { + monsters[i].move1() + } +} + +function addMonster() { + let m = new Entity() + monsters.push(m) + totalMonsters = totalMonsters + 1 +} + +function levelUp() { + addMonster() +} + +function resetState() { + levelTime = 0 + game.setLife(5) + person.x = 4 + person.y = 4 + person.dirX = -1 + person.dirY = 0 + for (let i = 0; i < totalMonsters; i++) { + let busy = busyPos[i] + let m = monsters[i] + m.x = (busy.x + Math.random(3)) - 1 + m.y = (busy.y + Math.random(3)) - 1 + } +} From 7b352b3a58a4a0c134fb478b5a092790df7b0806 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 15:21:16 +0100 Subject: [PATCH 2/7] Use pre-cached TD scripts for testing --- .travis.yml | 2 +- testconv.json | 670 -------------------------------------------------- 2 files changed, 1 insertion(+), 671 deletions(-) delete mode 100644 testconv.json diff --git a/.travis.yml b/.travis.yml index af38511e..d48e1fc2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ script: - "node node_modules/pxt-core/built/pxt.js travis" - "(cd libs/lang-test0; node ../../node_modules/pxt-core/built/pxt.js run)" - "node node_modules/pxt-core/built/pxt.js uploaddoc" - - "(cd libs/hello; node ../../node_modules/pxt-core/built/pxt.js testconv ../../testconv.json)" + - "(cd libs/hello; node ../../node_modules/pxt-core/built/pxt.js testconv https://az851932.vo.msecnd.net/files/td-converter-tests-v0.json)" sudo: false notifications: email: diff --git a/testconv.json b/testconv.json deleted file mode 100644 index c80cba75..00000000 --- a/testconv.json +++ /dev/null @@ -1,670 +0,0 @@ -{ - "apiUrl": "https://www.microbit.co.uk/api/", - "fakeids": [ - "zzltaj", - "zzpgxf", - "rhisri", - "zztzyk" - ], - "ids": [ - "balcxr", - "bambkh", - "bbfxnw", - "bbtlly", - "bbvscl", - "bbxapr", - "bcbxtu", - "bchtnm", - "bcpnpx", - "bcredt", - "bdbwuy", - "bdddfl", - "bedihg", - "behvrp", - "bevhll", - "bezbat", - "bfrafy", - "bfvuez", - "bgqdmi", - "bguxyx", - "bhbzvc", - "bhhzvr", - "bhollk", - "biczhe", - "bieoqj", - "biwfto", - "bjayrk", - "bjcbpf", - "bjcdte", - "bjomis", - "bjqlzz", - "bkaofs", - "bkbsfh", - "bkxbji", - "blbhmr", - "blkuau", - "bllhdc", - "blougi", - "blpvxv", - "bmevma", - "bmlwtk", - "bmmayl", - "bncsjd", - "bnlfif", - "bnsfch", - "bnucdu", - "bolvvm", - "bouhxx", - "bpbvyx", - "bpmeio", - "bpqvtv", - "bptlwr", - "bqceny", - "bqgsnm", - "bqkwia", - "bqvoqy", - "bqyoyn", - "brlcdr", - "bsmmsp", - "bsncre", - "bstaqt", - "butypx", - "buuzga", - "bvnciu", - "bwbuga", - "bwhttb", - "bwkezu", - "bxswvm", - "bynkeb", - "bypanj", - "bywqzx", - "byzegt", - "bzaaya", - "bzrusu", - "bzwbps", - "dalzjm", - "damymx", - "dbdpxx", - "dcapfd", - "dceikq", - "ddikkz", - "ddjpss", - "ddtadz", - "ddxbjj", - "dfkuyn", - "dfmpxf", - "dfypdn", - "dhabye", - "dhbioa", - "dieoiu", - "diuhli", - "djchkz", - "djohvc", - "djztxc", - "dkqbyq", - "dkvxwr", - "dmbcwi", - "dmekmj", - "dmghho", - "dnmrlu", - "dnnzgd", - "dooboj", - "dosuna", - "dqgnhz", - "dqqfgv", - "dqwrsw", - "drmbxg", - "drrrty", - "dscjnc", - "dsvguv", - "dtemsf", - "dtmmmc", - "dundpx", - "dushve", - "duupgd", - "dvgzyq", - "dvnoer", - "dwcxtn", - "dwtoyp", - "dxdfbw", - "dxqdqw", - "dxroxs", - "dxvgvs", - "dycuzj", - "dyhnkt", - "dyxejk", - "dzlocb", - "dzlogl", - "fadekj", - "faffgr", - "fapznm", - "fbgdog", - "fbpnng", - "fbyrog", - "fcfoox", - "fcicvk", - "fcjlto", - "fcvwvj", - "fdjhpo", - "fdtayy", - "fdyxvx", - "fegzbd", - "felusd", - "fethzd", - "ffcqby", - "ffjeei", - "ffjuuz", - "fflxnx", - "ffpyfa", - "fhcyyx", - "fhoonu", - "fitucj", - "fitvxu", - "fjdnmb", - "fjhnpw", - "fjlzrt", - "fjwknw", - "fkgprd", - "fklpld", - "fllghh", - "flqpgb", - "fmdsdi", - "fmdzgg", - "fnimjx", - "fnjmfx", - "fnscgh", - "fomwmz", - "fpelnl", - "fpngwv", - "fpqusd", - "fpuclv", - "fpvrwv", - "fqmgsu", - "fqsbhp", - "fqsrdu", - "frlxvd", - "froxsb", - "frqqnm", - "ftcrip", - "ftrzta", - "fubsaf", - "fvgogo", - "fvgxfz", - "fvkluo", - "fvsfrv", - "fwkjkj", - "fxxsgy", - "fyazlp", - "fypaix", - "fzcoly", - "fzidej", - "hatpaz", - "haxiza", - "hbfvlb", - "hbklfv", - "hbwlkf", - "hcmpdm", - "hdnlmx", - "hetmho", - "hfklxz", - "hfkvpg", - "hfmkbt", - "hftxjx", - "hfunev", - "hgepqq", - "hivbxk", - "hjesfm", - "hklazc", - "hkncxl", - "hkrfni", - "hlenxc", - "hlhipg", - "hlhvoe", - "hlwdwo", - "hnljdp", - "howggk", - "hpjppy", - "hptebp", - "hpupwc", - "hqdpet", - "hqhclr", - "hqheal", - "hqoqjh", - "hqpuxt", - "hrnitd", - "hrooif", - "hsuiag", - "hsxmox", - "humerf", - "huqcpc", - "huydje", - "hwetsq", - "hxuwlt", - "hzcxdp", - "hzpfge", - "hzpkma", - "jaeeve", - "jcmkmq", - "jcojot", - "jcvdvp", - "jdcils", - "jddumo", - "jdsqxr", - "jerwei", - "jfwcov", - "jgdknu", - "jgjijp", - "jgofmw", - "jhjauh", - "jhrjvj", - "jhseak", - "jiyhsk", - "jiyoeq", - "jjumac", - "jkppnc", - "jkxyeh", - "jkymhg", - "jlatje", - "jlbxjm", - "jlmzps", - "jmmgyn", - "jmshop", - "jnengo", - "jnhcat", - "jnvrkr", - "jnxdok", - "jociyw", - "joryiq", - "jpbfze", - "jpcrcj", - "jrfuqz", - "jrfwyh", - "jrpbtk", - "jrwkyz", - "jrxhxe", - "jsxvju", - "jszrpp", - "jtbdng", - "jtglrx", - "jtodxy", - "julzbh", - "juqrkb", - "jvstzh", - "jwckaz", - "jwplaw", - "jwskcb", - "jxgcel", - "jxjryw", - "jxmrht", - "jxqobc", - "jzenhj", - "jzwxbr", - "jzzbqg", - "laanun", - "lagxjo", - "lamnpb", - "lapexp", - "lazmuu", - "lbeyfh", - "lbhuwc", - "lcdeuk", - "lchqfb", - "lcpmnp", - "ldgoae", - "lecrpo", - "lfpidi", - "lfrpst", - "lgsrwm", - "lhjcvy", - "licgsp", - "likrcp", - "ljauxo", - "ljkskx", - "llsepx", - "llxcdk", - "lmvoxp", - "lniybn", - "loafab", - "loehfe", - "lpnzct", - "lqwdio", - "lqxnnj", - "lracic", - "lrwotp", - "lryglt", - "lsikdy", - "ltchng", - "ltsbpa", - "lucaof", - "lvahkk", - "lvvdne", - "lwtsxc", - "lxleej", - "lxwstg", - "lxwwtd", - "lzndlk", - "lzosmg", - "lzsseg", - "naevvc", - "nawmtp", - "nbomql", - "nbuuii", - "nbwine", - "ndayhb", - "ndikwg", - "ndlikc", - "ndljim", - "ndooqj", - "ndqgow", - "nfjrxg", - "nfmunh", - "nghraa", - "nhpyof", - "nhtyzy", - "nikzhg", - "nitcfc", - "njfeff", - "njvcbs", - "njynsd", - "nkdbmy", - "nlyuwy", - "nmbxkh", - "nmdfik", - "nmuhlk", - "noftar", - "noikvz", - "novevx", - "noxyjg", - "noyovd", - "npkjbk", - "nqdtvd", - "nqgyno", - "nqxloa", - "nrjdzu", - "nsaumh", - "nsegbi", - "ntfmsx", - "ntsvek", - "nujrlc", - "nvogiv", - "nvrqzl", - "nvtfbc", - "nvymrn", - "nwowql", - "nwxlij", - "nxhnvy", - "nxpwae", - "nynwto", - "nytwlb", - "nyuakq", - "nzrgyf", - "nzrwza", - "nzzcea", - "pbsolq", - "pbtnpf", - "pcdvqu", - "pchzqo", - "pdmxpl", - "pdnntw", - "pdsghq", - "pewcsa", - "pflxxj", - "pfutwa", - "pgvoic", - "phehbm", - "phgmqm", - "phhkfi", - "phjonu", - "phvurr", - "piaksu", - "pijsrg", - "piubiw", - "pjsmac", - "pjxdoj", - "pjzfgn", - "pkmwkn", - "pkntkb", - "pkquey", - "pmxlhz", - "pnvgvr", - "pooqwk", - "ppslyh", - "ppxsux", - "prglvf", - "probjd", - "psmgrz", - "psptyd", - "psqjon", - "pughxs", - "puhetz", - "pujfoc", - "purkko", - "puthiz", - "pvjilh", - "pvqrgm", - "pvzmhz", - "pxebwk", - "pxizap", - "pxyovu", - "pymfqh", - "pzmjbx", - "pzucty", - "rannhh", - "rbnvdq", - "rccfvy", - "rceosh", - "rcobok", - "rdamey", - "rdhndz", - "rdpdll", - "rdzfjv", - "redkby", - "reqjzm", - "revjgd", - "rfihyn", - "rfzukz", - "rgtmoz", - "rheeoa", - "rheyiw", - "rilbti", - "rilexn", - "riotng", - "riqiss", - "riupfo", - "rjglqu", - "rjthvx", - "rjvjwq", - "rlporb", - "rmazpa", - "rmyvbb", - "rnkxav", - "rnvzdo", - "ropkaf", - "rozudg", - "rrvdls", - "rsdjun", - "rudelg", - "rugwft", - "rupbjr", - "rvjwiu", - "rvqkwq", - "rwdqcz", - "rwjnfq", - "rxdqqf", - "rxnztr", - "rxugmm", - "rydpvf", - "ryftuq", - "rygikf", - "ryvkkx", - "rzmnrf", - "tbehov", - "tcaulx", - "tcrfuz", - "tcvaou", - "tdfxfg", - "tdkwue", - "tfrbqz", - "tgbxuq", - "tglsyl", - "tgorrv", - "theruf", - "thhvzq", - "thncnj", - "tiircu", - "tjdpzj", - "tjliry", - "tjpwmu", - "tjqgba", - "tkhgfo", - "tkxbfr", - "tmkbao", - "tmnhhx", - "tnripk", - "tnudiw", - "tnuuwe", - "tnvnko", - "toqcgf", - "tpdiyw", - "tqeddl", - "tqhpqp", - "tqwach", - "trkitt", - "trkrrh", - "tsdmft", - "ttvzqd", - "ttxeud", - "tujsjf", - "tvbjyi", - "tvkqoe", - "twrsnj", - "txkmpg", - "txouzs", - "txszvu", - "txwbbf", - "tzqydt", - "vaszak", - "vaymbt", - "vbcdot", - "vbtmwf", - "vcijrw", - "vcoevo", - "vcrvjm", - "vcudrv", - "vczceh", - "vfcwwr", - "vftxlg", - "vfusfw", - "vgovse", - "vgvkok", - "vgxdxq", - "vhhygu", - "vioniz", - "vipnog", - "vjkwgj", - "vjmnkh", - "vkhabg", - "vkhiga", - "vkybzm", - "vlrsar", - "vmhvfa", - "vndxor", - "vodekh", - "vopucc", - "vovivd", - "vpnspf", - "vpslsg", - "vreifv", - "vrikcc", - "vrxpod", - "vsbzms", - "vslnue", - "vsrguv", - "vsyfym", - "vtfund", - "vtviqj", - "vtzfzy", - "vuwzmu", - "vwkpiw", - "vwlohb", - "vwnjqy", - "vwtwos", - "vxjfnm", - "vyewot", - "vyhvrg", - "vzmvvw", - "vzniie", - "vzrycv", - "vztdyx", - "xascqb", - "xaurjv", - "xcenyy", - "xczuut", - "xdvawd", - "xdwebc", - "xdxlsd", - "xfdrwr", - "xfrysj", - "xfytns", - "xhgnmw", - "xhjkvj", - "xjngae", - "xjuzjz", - "xkrsfl", - "xlfmnd", - "xltsru", - "xmcivt", - "xmlisq", - "xmzztb", - "xndixq", - "xnhxka", - "xnurqq", - "xolqgf", - "xoojpa", - "xoulbi", - "xoygfg", - "xpekdp", - "xpiqbj", - "xrqriw", - "xrsohj", - "xrvzyi", - "xsvwgh", - "xtrrnu", - "xtsmne", - "xuxlra", - "xvjcdf", - "xvmxti", - "xvpkiq", - "xxuosa", - "xymixn", - "xzcsqr", - "xzlzgl", - "zaidka", - "zbiznd", - "zbqfmt", - "zdfkcr", - "zdntvf", - "zdwmwu", - "zehjio", - "zelzkd", - "zewaak", - "zgozuh", - "zifrtl", - "ziqeez", - "zldufm", - "zlfusn", - "zmrcwu", - "zoyilz", - "zqlcxg", - "zqotda", - "zswztj", - "zszuqa", - "zwkhxx", - "zwpewj", - "zytfqg", - "zywows", - "zzltaj", - "zzpgxf", - "zztzyk" - ] -} From ada956064208bddc3b084debf8f7e353c14d3cb6 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 15:22:49 +0100 Subject: [PATCH 3/7] Bump pxt-core to 0.2.201 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4014b12b..4776bb71 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,6 @@ "typescript": "^1.8.7" }, "dependencies": { - "pxt-core": "0.2.200" + "pxt-core": "0.2.201" } } From 579eb29ce3ad2f8a3f8b3894f8dfc73ffc73f5d6 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 15:22:50 +0100 Subject: [PATCH 4/7] 0.2.191 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4776bb71..55f4c8e6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.190", + "version": "0.2.191", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript", From e2d1b8a55c632a6f2f0df92dae5b1ae77fb23864 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 17:06:56 +0100 Subject: [PATCH 5/7] Run tests --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index d48e1fc2..cc2e4e19 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ node_js: script: - "node node_modules/pxt-core/built/pxt.js travis" - "(cd libs/lang-test0; node ../../node_modules/pxt-core/built/pxt.js run)" + - "node node_modules/pxt-core/built/pxt.js testdir tests" - "node node_modules/pxt-core/built/pxt.js uploaddoc" - "(cd libs/hello; node ../../node_modules/pxt-core/built/pxt.js testconv https://az851932.vo.msecnd.net/files/td-converter-tests-v0.json)" sudo: false From 47efcfb41f1f804e38a3b67e297caf398985f61e Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 17:07:29 +0100 Subject: [PATCH 6/7] Bump pxt-core to 0.2.202 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 55f4c8e6..1dbf9271 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,6 @@ "typescript": "^1.8.7" }, "dependencies": { - "pxt-core": "0.2.201" + "pxt-core": "0.2.202" } } From 329baaf9a4eff725e0013304cd93de10015dd007 Mon Sep 17 00:00:00 2001 From: Michal Moskal Date: Fri, 22 Jul 2016 17:07:29 +0100 Subject: [PATCH 7/7] 0.2.192 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1dbf9271..ba429665 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pxt-microbit", - "version": "0.2.191", + "version": "0.2.192", "description": "BBC micro:bit target for PXT", "keywords": [ "JavaScript",