From b5d7602f4f5b1037efc26a07f418c849c5cb6730 Mon Sep 17 00:00:00 2001
From: Christopher Willis-Ford <cwillisf@media.mit.edu>
Date: Wed, 14 Mar 2018 16:08:53 -0700
Subject: [PATCH] Add test for say/think and wait

This test currently fails due to a bug in the sequencer's `stepThread`
method. The bug affects real projects, too, but was not caught by any
test prior to this one.
---
 test/fixtures/saythink-and-wait.sb2   | Bin 0 -> 6588 bytes
 test/integration/saythink-and-wait.js |  37 ++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100644 test/fixtures/saythink-and-wait.sb2
 create mode 100644 test/integration/saythink-and-wait.js

diff --git a/test/fixtures/saythink-and-wait.sb2 b/test/fixtures/saythink-and-wait.sb2
new file mode 100644
index 0000000000000000000000000000000000000000..d9be202c4281dd3afa75c4c0d5c62b55056cc41d
GIT binary patch
literal 6588
zcmWIWW@h1HU|`^2Xsu25F=W0rO_Pa%VF?QZ0}oKNpeR2pHMvADt2jTeHaIqav4KF1
zUp?#d=Ng+76&3UMezQ~h>K*=aUFel|Q=QKB3Cg#Zh==}spU&gCV_CS;5(DGiXV$e}
z-^>{J=R5Bdk7tZKw{LJVDoI$?v)0>$FLvKNUN-g={ihS`(xXDxOthZWd{FzwqPQ3<
zs~YCGc)yy!GZu?4YcA)|>69oqqVm|LJ=1BijeKa)*7xc;oLBixR;^eY@aaZ~HaBlk
z<E2G)1xG5}?k|>;6+L>zaJRaB@Y=1)dbb?Kj1JrTU7RwBEA{?!mAQr;i!9jf9$U<G
zns!N}QL@FRE6C%U9e-(E#{H8?kt@%aUw>!$?SNa#igVpryuB$VAN{T^Ix%PZ<FeoF
z0hx(~`@<(^1xD8MdAqec7VA%clG^)ew%e3=?ud!%?Sjm=E5ow)H&}`VNS=ANGwkUc
z9_CN7-A=Vd|5u3L-a6sD{K?ZrCQ_9<cenjzkuffu)%9+palH_C8B;lTzwtCDo9@GN
zg0?@==`EO(WYM?mq)O+qy$LlUz2%1wO4QEJd35m5#^+_f1^-J={HAeW+3R-UCmZ`6
z8rwZR)l8PnJ^sYk<Ne!f-kl-4S{7O7C+eB52|Hjr-8pfCvXn7*rRom0y|(+3lzTFc
zhFza~?FWZ$$~u`h{aNKdxQ+;_Zgs5PSH%4L&ep>$4?EblSH^L49-QtIv2^cNvlH7l
zy<b&*v2|4~_xp|~tTVp)Us)zQ`%lyzmPDf^?~X@Y`IZ&@H-B#B$?DMAg+3=|e%||=
zI{=!b7{Ezt!$qOT?}5n)gjs<}%0RCmFTFFs&z+Y`3Y748Jw0547#J8I0C5Hf8&IU*
zTtk6@fu+{d#WAGf*4wLwyuieGc!TWI{z|RRII|X;lZ*_-6M<q9AY_mLLI)Zcfrx>b
z4TK;PBUug-DA>bgWXM4h1bUi)_<f|vsWPBs2xQMgCE%H51j^wnC0;Q~-(+1VnSXK`
zusqT&ag8Vm&QB{TPb^AhNUGFJ%E`}9NvYIJE~+dj$=A!wO-xVK1D0q;Ca!tO`6;PI
zE7<Da0W~ssy85}Sb4qAJEfKdR{IGEZR<a-rDiIB_mxv4}fO3z(B_elz$2nl}cph3J
zUWS&4a!>s$l?@oIb2uhmQW1U-!g)X;LBN1Rf`x~Pjj_4G@qhvd6B1$ot3*+SA;bVR
z4@niK5ZqRTDomk?3>aca?uF^Z5JK@4L=}b*Of!;OF@!LJBS8R*5Iq9&M+)P7bC!;k
zng90!<C)rNte83G<a0g-1`r0NF(d40jQIcq1Jea?8jCNN+`_=XR|-vI*9`@Mjlv@a
zZQt`HHyk*nDzwXVFQ~en*A1-486*;bguwwIkpQf984fToGcYtTf+}xjP_vOu0!Z)}
zps<M1f~Fb27OeK+)PmcI*t8Jv6`B@e0s^50!6L>Ma3~V31rhN0wTy<{a7d~{FWo^(
zhT)#gc{Yrek?2*#&`YbMW#niXiL+e;u3l+VH;<N)qwPpyTC4b5ct~w<8m86JGIF$x
zq`ZtYXI{|4Z>ydB*$Nn%)aVH_GI25Bp40$Zf&`GKI0C$3I<b#kBeVqr$8NwQ+2~r(
q2X_!!QrV$HJ?L7{`|1cSCpn=#_W*BJP@%}c0)&@=^kq;7n*jiuwM+8=

literal 0
HcmV?d00001

diff --git a/test/integration/saythink-and-wait.js b/test/integration/saythink-and-wait.js
new file mode 100644
index 000000000..abde2d978
--- /dev/null
+++ b/test/integration/saythink-and-wait.js
@@ -0,0 +1,37 @@
+const Worker = require('tiny-worker');
+const path = require('path');
+const test = require('tap').test;
+const makeTestStorage = require('../fixtures/make-test-storage');
+const extract = require('../fixtures/extract');
+const VirtualMachine = require('../../src/index');
+const dispatch = require('../../src/dispatch/central-dispatch');
+
+const uri = path.resolve(__dirname, '../fixtures/saythink-and-wait.sb2');
+const project = extract(uri);
+
+// By default Central Dispatch works with the Worker class built into the browser. Tell it to use TinyWorker instead.
+dispatch.workerClass = Worker;
+
+test('say/think and wait', t => {
+    const vm = new VirtualMachine();
+    vm.attachStorage(makeTestStorage());
+
+    // Start VM, load project, and run
+    t.doesNotThrow(() => {
+        vm.start();
+        vm.clear();
+        vm.setCompatibilityMode(false);
+        vm.setTurboMode(false);
+        vm.loadProject(project).then(() => {
+            vm.greenFlag();
+
+            // After two seconds, stop the project.
+            // The test will fail if the project throws.
+            setTimeout(() => {
+                vm.stopAll();
+                t.end();
+                process.nextTick(process.exit);
+            }, 2000);
+        });
+    });
+});