jspsych 6.2.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/README.md +43 -29
  2. package/css/jspsych.css +39 -39
  3. package/dist/JsPsych.d.ts +112 -0
  4. package/dist/TimelineNode.d.ts +34 -0
  5. package/dist/index.browser.js +3164 -0
  6. package/dist/index.browser.js.map +1 -0
  7. package/dist/index.browser.min.js +2 -0
  8. package/dist/index.browser.min.js.map +1 -0
  9. package/dist/index.cjs +3158 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.js +3152 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/migration.d.ts +3 -0
  15. package/dist/modules/data/DataCollection.d.ts +45 -0
  16. package/dist/modules/data/DataColumn.d.ts +15 -0
  17. package/dist/modules/data/index.d.ts +25 -0
  18. package/dist/modules/data/utils.d.ts +3 -0
  19. package/dist/modules/extensions.d.ts +22 -0
  20. package/dist/modules/plugin-api/HardwareAPI.d.ts +15 -0
  21. package/dist/modules/plugin-api/KeyboardListenerAPI.d.ts +34 -0
  22. package/dist/modules/plugin-api/MediaAPI.d.ts +27 -0
  23. package/dist/modules/plugin-api/SimulationAPI.d.ts +41 -0
  24. package/dist/modules/plugin-api/TimeoutAPI.d.ts +5 -0
  25. package/dist/modules/plugin-api/index.d.ts +8 -0
  26. package/dist/modules/plugins.d.ts +129 -0
  27. package/dist/modules/randomization.d.ts +35 -0
  28. package/dist/modules/turk.d.ts +40 -0
  29. package/dist/modules/utils.d.ts +7 -0
  30. package/package.json +32 -15
  31. package/src/JsPsych.ts +884 -0
  32. package/src/TimelineNode.ts +536 -0
  33. package/src/index.ts +71 -0
  34. package/src/migration.ts +37 -0
  35. package/src/modules/data/DataCollection.ts +198 -0
  36. package/src/modules/data/DataColumn.ts +86 -0
  37. package/src/modules/data/index.ts +174 -0
  38. package/src/modules/data/utils.ts +75 -0
  39. package/src/modules/extensions.ts +23 -0
  40. package/src/modules/plugin-api/HardwareAPI.ts +32 -0
  41. package/src/modules/plugin-api/KeyboardListenerAPI.ts +165 -0
  42. package/src/modules/plugin-api/MediaAPI.ts +337 -0
  43. package/src/modules/plugin-api/SimulationAPI.ts +181 -0
  44. package/src/modules/plugin-api/TimeoutAPI.ts +16 -0
  45. package/src/modules/plugin-api/index.ts +28 -0
  46. package/src/modules/plugins.ts +158 -0
  47. package/src/modules/randomization.ts +327 -0
  48. package/src/modules/turk.ts +99 -0
  49. package/src/modules/utils.ts +30 -0
  50. package/.github/workflows/jest.yml +0 -20
  51. package/code-of-conduct.md +0 -56
  52. package/contributors.md +0 -61
  53. package/docs/CNAME +0 -1
  54. package/docs/about/about.md +0 -18
  55. package/docs/about/contributing.md +0 -43
  56. package/docs/about/license.md +0 -25
  57. package/docs/about/support.md +0 -7
  58. package/docs/core_library/jspsych-core.md +0 -661
  59. package/docs/core_library/jspsych-data.md +0 -589
  60. package/docs/core_library/jspsych-pluginAPI.md +0 -510
  61. package/docs/core_library/jspsych-randomization.md +0 -397
  62. package/docs/core_library/jspsych-turk.md +0 -102
  63. package/docs/img/blue.png +0 -0
  64. package/docs/img/folder-setup.png +0 -0
  65. package/docs/img/folder-with-html.png +0 -0
  66. package/docs/img/githubreleases.jpg +0 -0
  67. package/docs/img/jspsych-favicon.png +0 -0
  68. package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
  69. package/docs/img/jspsych-logo.jpg +0 -0
  70. package/docs/img/orange.png +0 -0
  71. package/docs/img/palmer_stim.png +0 -0
  72. package/docs/img/progress_bar.png +0 -0
  73. package/docs/img/visual_search_example.jpg +0 -0
  74. package/docs/index.md +0 -9
  75. package/docs/overview/browser-device-support.md +0 -35
  76. package/docs/overview/callbacks.md +0 -140
  77. package/docs/overview/data.md +0 -281
  78. package/docs/overview/exclude-browser.md +0 -32
  79. package/docs/overview/experiment-options.md +0 -121
  80. package/docs/overview/fullscreen.md +0 -36
  81. package/docs/overview/media-preloading.md +0 -91
  82. package/docs/overview/mturk.md +0 -77
  83. package/docs/overview/progress-bar.md +0 -110
  84. package/docs/overview/record-browser-interactions.md +0 -23
  85. package/docs/overview/running-experiments.md +0 -95
  86. package/docs/overview/timeline.md +0 -387
  87. package/docs/overview/trial.md +0 -142
  88. package/docs/plugins/creating-a-plugin.md +0 -79
  89. package/docs/plugins/jspsych-animation.md +0 -40
  90. package/docs/plugins/jspsych-audio-button-response.md +0 -60
  91. package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
  92. package/docs/plugins/jspsych-audio-slider-response.md +0 -53
  93. package/docs/plugins/jspsych-call-function.md +0 -81
  94. package/docs/plugins/jspsych-canvas-button-response.md +0 -66
  95. package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
  96. package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
  97. package/docs/plugins/jspsych-categorize-animation.md +0 -60
  98. package/docs/plugins/jspsych-categorize-html.md +0 -52
  99. package/docs/plugins/jspsych-categorize-image.md +0 -53
  100. package/docs/plugins/jspsych-cloze.md +0 -45
  101. package/docs/plugins/jspsych-external-html.md +0 -70
  102. package/docs/plugins/jspsych-free-sort.md +0 -55
  103. package/docs/plugins/jspsych-fullscreen.md +0 -57
  104. package/docs/plugins/jspsych-html-button-response.md +0 -42
  105. package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
  106. package/docs/plugins/jspsych-html-slider-response.md +0 -45
  107. package/docs/plugins/jspsych-iat-html.md +0 -64
  108. package/docs/plugins/jspsych-iat-image.md +0 -64
  109. package/docs/plugins/jspsych-image-button-response.md +0 -46
  110. package/docs/plugins/jspsych-image-keyboard-response.md +0 -57
  111. package/docs/plugins/jspsych-image-slider-response.md +0 -52
  112. package/docs/plugins/jspsych-instructions.md +0 -58
  113. package/docs/plugins/jspsych-maxdiff.md +0 -42
  114. package/docs/plugins/jspsych-rdk.md +0 -119
  115. package/docs/plugins/jspsych-reconstruction.md +0 -48
  116. package/docs/plugins/jspsych-resize.md +0 -39
  117. package/docs/plugins/jspsych-same-different-html.md +0 -53
  118. package/docs/plugins/jspsych-same-different-image.md +0 -66
  119. package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -50
  120. package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
  121. package/docs/plugins/jspsych-survey-html-form.md +0 -50
  122. package/docs/plugins/jspsych-survey-likert.md +0 -70
  123. package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
  124. package/docs/plugins/jspsych-survey-multi-select.md +0 -53
  125. package/docs/plugins/jspsych-survey-text.md +0 -63
  126. package/docs/plugins/jspsych-video-button-response.md +0 -52
  127. package/docs/plugins/jspsych-video-keyboard-response.md +0 -48
  128. package/docs/plugins/jspsych-video-slider-response.md +0 -58
  129. package/docs/plugins/jspsych-visual-search-circle.md +0 -52
  130. package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
  131. package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
  132. package/docs/plugins/overview.md +0 -111
  133. package/docs/tutorials/hello-world.md +0 -144
  134. package/docs/tutorials/rt-task.md +0 -1107
  135. package/examples/add-to-end-of-timeline.html +0 -32
  136. package/examples/conditional-and-loop-functions.html +0 -63
  137. package/examples/css/jquery-ui.css +0 -1225
  138. package/examples/data-add-properties.html +0 -40
  139. package/examples/data-as-function.html +0 -36
  140. package/examples/data-from-timeline.html +0 -45
  141. package/examples/data-from-url.html +0 -21
  142. package/examples/demo-flanker.html +0 -108
  143. package/examples/demo-simple-rt-task.html +0 -104
  144. package/examples/demos/demo_1.html +0 -29
  145. package/examples/demos/demo_2.html +0 -43
  146. package/examples/demos/demo_3.html +0 -58
  147. package/examples/display-element-to-embed-experiment.html +0 -73
  148. package/examples/end-active-node.html +0 -52
  149. package/examples/end-experiment.html +0 -43
  150. package/examples/exclusions.html +0 -32
  151. package/examples/external_html/simple_consent.html +0 -4
  152. package/examples/img/1.gif +0 -0
  153. package/examples/img/10.gif +0 -0
  154. package/examples/img/11.gif +0 -0
  155. package/examples/img/12.gif +0 -0
  156. package/examples/img/2.gif +0 -0
  157. package/examples/img/3.gif +0 -0
  158. package/examples/img/4.gif +0 -0
  159. package/examples/img/5.gif +0 -0
  160. package/examples/img/6.gif +0 -0
  161. package/examples/img/7.gif +0 -0
  162. package/examples/img/8.gif +0 -0
  163. package/examples/img/9.gif +0 -0
  164. package/examples/img/age/of1.jpg +0 -0
  165. package/examples/img/age/of2.jpg +0 -0
  166. package/examples/img/age/of3.jpg +0 -0
  167. package/examples/img/age/om1.jpg +0 -0
  168. package/examples/img/age/om2.jpg +0 -0
  169. package/examples/img/age/om3.jpg +0 -0
  170. package/examples/img/age/yf1.jpg +0 -0
  171. package/examples/img/age/yf4.jpg +0 -0
  172. package/examples/img/age/yf5.jpg +0 -0
  173. package/examples/img/age/ym2.jpg +0 -0
  174. package/examples/img/age/ym3.jpg +0 -0
  175. package/examples/img/age/ym5.jpg +0 -0
  176. package/examples/img/backwardN.gif +0 -0
  177. package/examples/img/blue.png +0 -0
  178. package/examples/img/con1.png +0 -0
  179. package/examples/img/con2.png +0 -0
  180. package/examples/img/fixation.gif +0 -0
  181. package/examples/img/happy_face_1.jpg +0 -0
  182. package/examples/img/happy_face_2.jpg +0 -0
  183. package/examples/img/happy_face_3.jpg +0 -0
  184. package/examples/img/happy_face_4.jpg +0 -0
  185. package/examples/img/inc1.png +0 -0
  186. package/examples/img/inc2.png +0 -0
  187. package/examples/img/normalN.gif +0 -0
  188. package/examples/img/orange.png +0 -0
  189. package/examples/img/redX.png +0 -0
  190. package/examples/img/ribbon.jpg +0 -0
  191. package/examples/img/sad_face_1.jpg +0 -0
  192. package/examples/img/sad_face_2.jpg +0 -0
  193. package/examples/img/sad_face_3.jpg +0 -0
  194. package/examples/img/sad_face_4.jpg +0 -0
  195. package/examples/js/snap.svg-min.js +0 -21
  196. package/examples/jspsych-RDK.html +0 -58
  197. package/examples/jspsych-animation.html +0 -33
  198. package/examples/jspsych-audio-button-response.html +0 -52
  199. package/examples/jspsych-audio-keyboard-response.html +0 -62
  200. package/examples/jspsych-audio-slider-response.html +0 -55
  201. package/examples/jspsych-call-function.html +0 -32
  202. package/examples/jspsych-canvas-button-response.html +0 -95
  203. package/examples/jspsych-canvas-keyboard-response.html +0 -78
  204. package/examples/jspsych-canvas-slider-response.html +0 -67
  205. package/examples/jspsych-categorize-animation.html +0 -46
  206. package/examples/jspsych-categorize-html.html +0 -38
  207. package/examples/jspsych-categorize-image.html +0 -38
  208. package/examples/jspsych-cloze.html +0 -42
  209. package/examples/jspsych-free-sort.html +0 -97
  210. package/examples/jspsych-fullscreen.html +0 -44
  211. package/examples/jspsych-html-button-response.html +0 -46
  212. package/examples/jspsych-html-keyboard-response.html +0 -42
  213. package/examples/jspsych-html-slider-response.html +0 -53
  214. package/examples/jspsych-iat.html +0 -510
  215. package/examples/jspsych-image-button-response.html +0 -84
  216. package/examples/jspsych-image-keyboard-response.html +0 -78
  217. package/examples/jspsych-image-slider-response.html +0 -76
  218. package/examples/jspsych-instructions.html +0 -37
  219. package/examples/jspsych-maxdiff.html +0 -33
  220. package/examples/jspsych-reconstruction.html +0 -43
  221. package/examples/jspsych-resize.html +0 -34
  222. package/examples/jspsych-same-different-html.html +0 -28
  223. package/examples/jspsych-same-different-image.html +0 -33
  224. package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
  225. package/examples/jspsych-serial-reaction-time.html +0 -54
  226. package/examples/jspsych-survey-html-form.html +0 -33
  227. package/examples/jspsych-survey-likert.html +0 -42
  228. package/examples/jspsych-survey-multi-choice.html +0 -40
  229. package/examples/jspsych-survey-multi-select.html +0 -42
  230. package/examples/jspsych-survey-text.html +0 -34
  231. package/examples/jspsych-video-button-response.html +0 -57
  232. package/examples/jspsych-video-keyboard-response.html +0 -53
  233. package/examples/jspsych-video-slider-response.html +0 -55
  234. package/examples/jspsych-visual-search-circle.html +0 -58
  235. package/examples/jspsych-vsl-animate-occlusion.html +0 -29
  236. package/examples/jspsych-vsl-grid-scene.html +0 -41
  237. package/examples/lexical-decision.html +0 -132
  238. package/examples/manual-preloading.html +0 -53
  239. package/examples/pause-unpause.html +0 -33
  240. package/examples/progress-bar.html +0 -62
  241. package/examples/sound/hammer.mp3 +0 -0
  242. package/examples/sound/sound.mp3 +0 -0
  243. package/examples/sound/speech_blue.mp3 +0 -0
  244. package/examples/sound/speech_green.mp3 +0 -0
  245. package/examples/sound/speech_joke.mp3 +0 -0
  246. package/examples/sound/speech_red.mp3 +0 -0
  247. package/examples/sound/tone.mp3 +0 -0
  248. package/examples/timeline-variables-sampling.html +0 -50
  249. package/examples/timeline-variables.html +0 -55
  250. package/examples/video/sample_video.mp4 +0 -0
  251. package/jspsych.js +0 -2796
  252. package/license.txt +0 -21
  253. package/mkdocs.yml +0 -104
  254. package/plugins/jspsych-animation.js +0 -189
  255. package/plugins/jspsych-audio-button-response.js +0 -247
  256. package/plugins/jspsych-audio-keyboard-response.js +0 -204
  257. package/plugins/jspsych-audio-slider-response.js +0 -262
  258. package/plugins/jspsych-call-function.js +0 -58
  259. package/plugins/jspsych-canvas-button-response.js +0 -199
  260. package/plugins/jspsych-canvas-keyboard-response.js +0 -155
  261. package/plugins/jspsych-canvas-slider-response.js +0 -207
  262. package/plugins/jspsych-categorize-animation.js +0 -266
  263. package/plugins/jspsych-categorize-html.js +0 -220
  264. package/plugins/jspsych-categorize-image.js +0 -222
  265. package/plugins/jspsych-cloze.js +0 -112
  266. package/plugins/jspsych-external-html.js +0 -112
  267. package/plugins/jspsych-free-sort.js +0 -444
  268. package/plugins/jspsych-fullscreen.js +0 -104
  269. package/plugins/jspsych-html-button-response.js +0 -188
  270. package/plugins/jspsych-html-keyboard-response.js +0 -149
  271. package/plugins/jspsych-html-slider-response.js +0 -202
  272. package/plugins/jspsych-iat-html.js +0 -284
  273. package/plugins/jspsych-iat-image.js +0 -286
  274. package/plugins/jspsych-image-button-response.js +0 -311
  275. package/plugins/jspsych-image-keyboard-response.js +0 -247
  276. package/plugins/jspsych-image-slider-response.js +0 -353
  277. package/plugins/jspsych-instructions.js +0 -237
  278. package/plugins/jspsych-maxdiff.js +0 -174
  279. package/plugins/jspsych-rdk.js +0 -1373
  280. package/plugins/jspsych-reconstruction.js +0 -134
  281. package/plugins/jspsych-resize.js +0 -166
  282. package/plugins/jspsych-same-different-html.js +0 -168
  283. package/plugins/jspsych-same-different-image.js +0 -169
  284. package/plugins/jspsych-serial-reaction-time-mouse.js +0 -213
  285. package/plugins/jspsych-serial-reaction-time.js +0 -247
  286. package/plugins/jspsych-survey-html-form.js +0 -171
  287. package/plugins/jspsych-survey-likert.js +0 -195
  288. package/plugins/jspsych-survey-multi-choice.js +0 -208
  289. package/plugins/jspsych-survey-multi-select.js +0 -232
  290. package/plugins/jspsych-survey-text.js +0 -185
  291. package/plugins/jspsych-video-button-response.js +0 -320
  292. package/plugins/jspsych-video-keyboard-response.js +0 -279
  293. package/plugins/jspsych-video-slider-response.js +0 -351
  294. package/plugins/jspsych-visual-search-circle.js +0 -259
  295. package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
  296. package/plugins/jspsych-vsl-grid-scene.js +0 -103
  297. package/plugins/template/jspsych-plugin-template.js +0 -35
  298. package/tests/README.md +0 -7
  299. package/tests/jsPsych/default-iti.test.js +0 -51
  300. package/tests/jsPsych/default-parameters.test.js +0 -58
  301. package/tests/jsPsych/endexperiment.test.js +0 -49
  302. package/tests/jsPsych/events.test.js +0 -369
  303. package/tests/jsPsych/init.test.js +0 -48
  304. package/tests/jsPsych/loads.test.js +0 -7
  305. package/tests/jsPsych/min-rt.test.js +0 -58
  306. package/tests/jsPsych/progressbar.test.js +0 -202
  307. package/tests/jsPsych/timeline-variables.test.js +0 -254
  308. package/tests/jsPsych/timelines.test.js +0 -498
  309. package/tests/jsPsych.data/datacollection.test.js +0 -116
  310. package/tests/jsPsych.data/datacolumn.test.js +0 -50
  311. package/tests/jsPsych.data/datamodule.test.js +0 -152
  312. package/tests/jsPsych.data/dataparameter.test.js +0 -251
  313. package/tests/jsPsych.data/interactions.test.js +0 -109
  314. package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -144
  315. package/tests/jsPsych.randomization/randomziation.test.js +0 -27
  316. package/tests/jsPsych.utils/utils.test.js +0 -58
  317. package/tests/media/blue.png +0 -0
  318. package/tests/media/orange.png +0 -0
  319. package/tests/media/sample_video.mp4 +0 -0
  320. package/tests/media/sound.mp3 +0 -0
  321. package/tests/plugins/plugin-animation.test.js +0 -35
  322. package/tests/plugins/plugin-audio-button-response.test.js +0 -15
  323. package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
  324. package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
  325. package/tests/plugins/plugin-call-function.test.js +0 -49
  326. package/tests/plugins/plugin-categorize-animation.test.js +0 -274
  327. package/tests/plugins/plugin-categorize-html.test.js +0 -17
  328. package/tests/plugins/plugin-categorize-image.test.js +0 -17
  329. package/tests/plugins/plugin-cloze.test.js +0 -140
  330. package/tests/plugins/plugin-free-sort.test.js +0 -112
  331. package/tests/plugins/plugin-fullscreen.test.js +0 -41
  332. package/tests/plugins/plugin-html-button-response.test.js +0 -161
  333. package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
  334. package/tests/plugins/plugin-html-slider-response.test.js +0 -155
  335. package/tests/plugins/plugin-iat-html.test.js +0 -328
  336. package/tests/plugins/plugin-iat-image.test.js +0 -308
  337. package/tests/plugins/plugin-image-button-response.test.js +0 -183
  338. package/tests/plugins/plugin-image-keyboard-response.test.js +0 -154
  339. package/tests/plugins/plugin-image-slider-response.test.js +0 -183
  340. package/tests/plugins/plugin-instructions.test.js +0 -66
  341. package/tests/plugins/plugin-maxdiff.test.js +0 -39
  342. package/tests/plugins/plugin-rdk.test.js +0 -17
  343. package/tests/plugins/plugin-reconstruction.test.js +0 -16
  344. package/tests/plugins/plugin-resize.test.js +0 -16
  345. package/tests/plugins/plugin-same-different-html.test.js +0 -17
  346. package/tests/plugins/plugin-same-different-image.test.js +0 -17
  347. package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
  348. package/tests/plugins/plugin-serial-reaction-time.test.js +0 -69
  349. package/tests/plugins/plugin-survey-html-form.test.js +0 -44
  350. package/tests/plugins/plugin-survey-likert.test.js +0 -48
  351. package/tests/plugins/plugin-survey-multi-choice.test.js +0 -48
  352. package/tests/plugins/plugin-survey-multi-select.test.js +0 -72
  353. package/tests/plugins/plugin-survey-text.test.js +0 -115
  354. package/tests/plugins/plugin-video-button-response.test.js +0 -35
  355. package/tests/plugins/plugin-video-keyboard-response.test.js +0 -35
  356. package/tests/plugins/plugin-video-slider-response.test.js +0 -34
  357. package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
  358. package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
  359. package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
  360. package/tests/testing-utils.js +0 -13
@@ -1,498 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- beforeEach(function(){
5
- require(root + 'jspsych.js');
6
- require(root + 'plugins/jspsych-html-keyboard-response.js');
7
- });
8
-
9
- describe('loop function', function(){
10
-
11
- test('repeats a timeline when returns true', function(){
12
-
13
- var count = 0;
14
-
15
- var trial = {
16
- timeline: [{
17
- type: 'html-keyboard-response',
18
- stimulus: 'foo'
19
- }],
20
- loop_function: function(){
21
- if(count < 1){
22
- count++;
23
- return true;
24
- } else {
25
- return false;
26
- }
27
- }
28
- }
29
-
30
- jsPsych.init({
31
- timeline: [trial]
32
- });
33
-
34
- // first trial
35
- utils.pressKey(32);
36
- expect(jsPsych.data.get().count()).toBe(1);
37
-
38
- // second trial
39
- utils.pressKey(32);
40
- expect(jsPsych.data.get().count()).toBe(2);
41
-
42
- });
43
-
44
- test('does not repeat when returns false', function(){
45
-
46
- var count = 0;
47
-
48
- var trial = {
49
- timeline: [{
50
- type: 'html-keyboard-response',
51
- stimulus: 'foo'
52
- }],
53
- loop_function: function(){
54
- return false
55
- }
56
- }
57
-
58
- jsPsych.init({
59
- timeline: [trial]
60
- });
61
-
62
- // first trial
63
- utils.pressKey(32);
64
-
65
- expect(jsPsych.data.get().count()).toBe(1);
66
-
67
- // second trial
68
- utils.pressKey(32);
69
-
70
- expect(jsPsych.data.get().count()).toBe(1);
71
-
72
- });
73
-
74
- test('gets the data from the most recent iteration', function(){
75
-
76
- var data_count = [];
77
- var count = 0;
78
-
79
- var trial = {
80
- timeline: [{
81
- type: 'html-keyboard-response',
82
- stimulus: 'foo'
83
- }],
84
- loop_function: function(data){
85
- data_count.push(data.count());
86
- if(count < 2){
87
- count++;
88
- return true;
89
- } else {
90
- return false;
91
- }
92
- }
93
- }
94
-
95
- jsPsych.init({
96
- timeline: [trial]
97
- });
98
-
99
- // first trial
100
- utils.pressKey(32);
101
-
102
- // second trial
103
- utils.pressKey(32);
104
-
105
- // third trial
106
- utils.pressKey(32);
107
-
108
- expect(data_count).toEqual([1,1,1]);
109
- expect(jsPsych.data.get().count()).toBe(3);
110
-
111
- });
112
-
113
- test('timeline variables from nested timelines are available in loop function', function(){
114
-
115
- var counter = 0;
116
-
117
- var trial2 = {
118
- type: 'html-keyboard-response',
119
- stimulus: jsPsych.timelineVariable('word')
120
- }
121
-
122
- var innertimeline = {
123
- timeline: [{
124
- type: 'html-keyboard-response',
125
- stimulus: 'foo'
126
- }],
127
- loop_function: function(){
128
- if(jsPsych.timelineVariable('word', true) == 'b' && counter < 2){
129
- counter++;
130
- return true;
131
- } else {
132
- counter = 0;
133
- return false;
134
- }
135
- }
136
- }
137
-
138
- var outertimeline = {
139
- timeline: [trial2, innertimeline],
140
- timeline_variables: [
141
- {word: 'a'},
142
- {word: 'b'},
143
- {word: 'c'}
144
- ]
145
- }
146
-
147
- jsPsych.init({
148
- timeline: [outertimeline]
149
- });
150
-
151
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('a');
152
- utils.pressKey(32);
153
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
154
- utils.pressKey(32);
155
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('b');
156
- utils.pressKey(32);
157
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
158
- utils.pressKey(32);
159
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
160
- utils.pressKey(32);
161
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
162
- utils.pressKey(32);
163
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('c');
164
- utils.pressKey(32);
165
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
166
- utils.pressKey(32);
167
- });
168
-
169
- });
170
-
171
- describe('conditional function', function(){
172
-
173
- test('skips the timeline when returns false', function(){
174
-
175
- var conditional = {
176
- timeline: [{
177
- type: 'html-keyboard-response',
178
- stimulus: 'foo'
179
- }],
180
- conditional_function: function(){
181
- return false;
182
- }
183
- }
184
-
185
- var trial = {
186
- type: 'html-keyboard-response',
187
- stimulus: 'bar'
188
- }
189
-
190
- jsPsych.init({
191
- timeline: [conditional, trial]
192
- });
193
-
194
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
195
-
196
- // clear
197
- utils.pressKey(32);
198
- });
199
-
200
- test('completes the timeline when returns true', function(){
201
- var conditional = {
202
- timeline: [{
203
- type: 'html-keyboard-response',
204
- stimulus: 'foo'
205
- }],
206
- conditional_function: function(){
207
- return true;
208
- }
209
- }
210
-
211
- var trial = {
212
- type: 'html-keyboard-response',
213
- stimulus: 'bar'
214
- }
215
-
216
- jsPsych.init({
217
- timeline: [conditional, trial]
218
- });
219
-
220
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
221
-
222
- // next
223
- utils.pressKey(32);
224
-
225
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
226
-
227
- // clear
228
- utils.pressKey(32);
229
- });
230
-
231
- test('executes on every loop of the timeline', function(){
232
-
233
- var count = 0;
234
- var conditional_count = 0;
235
-
236
- var trial = {
237
- timeline: [{
238
- type: 'html-keyboard-response',
239
- stimulus: 'foo'
240
- }],
241
- loop_function: function(){
242
- if(count < 1){
243
- count++;
244
- return true;
245
- } else {
246
- return false;
247
- }
248
- },
249
- conditional_function: function(){
250
- conditional_count++;
251
- return true;
252
- }
253
- }
254
-
255
- jsPsych.init({
256
- timeline: [trial]
257
- });
258
-
259
- expect(conditional_count).toBe(1);
260
-
261
- // first trial
262
- utils.pressKey(32);
263
-
264
- expect(conditional_count).toBe(2);
265
-
266
- // second trial
267
- utils.pressKey(32);
268
-
269
- expect(conditional_count).toBe(2);
270
- });
271
-
272
- test('timeline variables from nested timelines are available', function(){
273
- var trial = {
274
- type: 'html-keyboard-response',
275
- stimulus: 'foo'
276
- }
277
-
278
- var trial2 = {
279
- type: 'html-keyboard-response',
280
- stimulus: jsPsych.timelineVariable('word')
281
- }
282
-
283
- var innertimeline = {
284
- timeline: [trial],
285
- conditional_function: function(){
286
- if(jsPsych.timelineVariable('word', true) == 'b'){
287
- return false;
288
- } else {
289
- return true;
290
- }
291
- }
292
- }
293
-
294
- var outertimeline = {
295
- timeline: [trial2, innertimeline],
296
- timeline_variables: [
297
- {word: 'a'},
298
- {word: 'b'},
299
- {word: 'c'}
300
- ]
301
- }
302
-
303
- jsPsych.init({
304
- timeline: [outertimeline]
305
- });
306
-
307
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('a');
308
- utils.pressKey(32);
309
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
310
- utils.pressKey(32);
311
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('b');
312
- utils.pressKey(32);
313
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('c');
314
- utils.pressKey(32);
315
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
316
- utils.pressKey(32);
317
- });
318
-
319
- });
320
-
321
- describe('endCurrentTimeline', function(){
322
-
323
- test('stops the current timeline, skipping to the end after the trial completes', function(){
324
- var t = {
325
- timeline: [
326
- {
327
- type: 'html-keyboard-response',
328
- stimulus: 'foo',
329
- on_finish: function(){
330
- jsPsych.endCurrentTimeline();
331
- }
332
- },
333
- {
334
- type: 'html-keyboard-response',
335
- stimulus: 'bar'
336
- }
337
- ]
338
- }
339
-
340
- var t2 = {
341
- type: 'html-keyboard-response',
342
- stimulus: 'woo'
343
- }
344
-
345
- jsPsych.init({
346
- timeline: [t, t2]
347
- });
348
-
349
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
350
-
351
- utils.pressKey(32);
352
-
353
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('woo');
354
-
355
- utils.pressKey(32);
356
-
357
- });
358
-
359
- test('works inside nested timelines', function(){
360
- var t = {
361
- timeline: [
362
- {
363
- timeline: [
364
- {
365
- type: 'html-keyboard-response',
366
- stimulus: 'foo',
367
- on_finish: function(){
368
- jsPsych.endCurrentTimeline();
369
- }
370
- },
371
- {
372
- type: 'html-keyboard-response',
373
- stimulus: 'skip me!'
374
- }
375
- ]
376
- },
377
- {
378
- type: 'html-keyboard-response',
379
- stimulus: 'bar'
380
- }
381
- ]
382
- }
383
-
384
- var t2 = {
385
- type: 'html-keyboard-response',
386
- stimulus: 'woo'
387
- }
388
-
389
- jsPsych.init({
390
- timeline: [t, t2]
391
- });
392
-
393
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
394
-
395
- utils.pressKey(32);
396
-
397
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
398
-
399
- utils.pressKey(32);
400
-
401
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('woo');
402
-
403
- utils.pressKey(32);
404
- })
405
- });
406
-
407
-
408
- describe('nested timelines', function() {
409
- test('works without other parameters', function() {
410
- var t1 = {
411
- type: 'html-keyboard-response',
412
- stimulus: 'foo'
413
- };
414
-
415
- var t2 = {
416
- type: 'html-keyboard-response',
417
- stimulus: 'bar'
418
- };
419
-
420
- var trials = {
421
- timeline: [t1, t2]
422
- };
423
-
424
- jsPsych.init({
425
- timeline: [trials]
426
- });
427
-
428
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
429
-
430
- utils.pressKey(32);
431
-
432
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
433
-
434
- utils.pressKey(32);
435
-
436
- })
437
- })
438
-
439
- describe('add node to end of timeline', function(){
440
-
441
- test('adds node to end of timeline, without callback', function() {
442
- var new_trial = {
443
- type: 'html-keyboard-response',
444
- stimulus: 'bar'
445
- };
446
-
447
- var new_timeline = {
448
- timeline: [new_trial]
449
- };
450
-
451
- var timeline = [
452
- {
453
- type: 'html-keyboard-response',
454
- stimulus: 'foo',
455
- on_start: function() {
456
- jsPsych.addNodeToEndOfTimeline(new_timeline);
457
- }
458
- }
459
- ];
460
-
461
- jsPsych.init({
462
- timeline: timeline
463
- });
464
-
465
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
466
- utils.pressKey(32);
467
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
468
- utils.pressKey(32);
469
- });
470
-
471
- test('adds node to end of timeline, with callback', function() {
472
- var t = {
473
- type: 'html-keyboard-response',
474
- stimulus: 'foo',
475
- on_finish: function(){
476
- jsPsych.pauseExperiment();
477
- jsPsych.addNodeToEndOfTimeline({
478
- timeline: [{
479
- type: 'html-keyboard-response',
480
- stimulus: 'bar'
481
- }]
482
- }, jsPsych.resumeExperiment)
483
- }
484
- };
485
-
486
- jsPsych.init({
487
- timeline: [t]
488
- });
489
-
490
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo');
491
- utils.pressKey(32);
492
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('bar');
493
- utils.pressKey(32);
494
-
495
- });
496
-
497
- });
498
-
@@ -1,116 +0,0 @@
1
- const root = '../../';
2
-
3
- require(root + 'jspsych.js');
4
-
5
- var data = [
6
- {rt: 100, filter: true},
7
- {rt: 200, filter: false},
8
- {rt: 300, filter: true},
9
- {rt: 400, filter: false},
10
- {rt: 500, filter: false}
11
- ];
12
-
13
- jsPsych.data._customInsert(data);
14
-
15
- describe('DataCollection', function(){
16
- test('#filter', function(){
17
- expect(jsPsych.data.get().filter({filter: true}).count()).toBe(2);
18
- });
19
- test('#filter OR', function(){
20
- expect(jsPsych.data.get().filter([{filter: true}, {rt: 300}]).count()).toBe(2);
21
- expect(jsPsych.data.get().filter([{filter: true}, {rt: 200}]).count()).toBe(3);
22
- })
23
- test('#filterCustom', function(){
24
- expect(jsPsych.data.get().filterCustom(function(x){ return x.rt > 200 && x.filter == false}).count()).toBe(2);
25
- });
26
- test('#ignore', function(){
27
- expect(jsPsych.data.get().ignore('rt').select('rt').count()).toBe(0);
28
- });
29
- test('#select', function(){
30
- expect(JSON.stringify(jsPsych.data.get().select('rt').values)).toBe(JSON.stringify([100,200,300,400,500]));
31
- });
32
- test('#addToAll', function(){
33
- expect(jsPsych.data.get().readOnly().addToAll({added: 5}).select('added').count()).toBe(5);
34
- });
35
- test('#addToLast', function(){
36
- jsPsych.data.get().addToLast({lastonly: true});
37
- expect(jsPsych.data.get().values()[4].lastonly).toBe(true);
38
- });
39
- test('#readOnly', function(){
40
- var d = jsPsych.data.get().readOnly().values();
41
- d[0].rt = 0;
42
- expect(jsPsych.data.get().values()[0].rt).toBe(100);
43
- });
44
- test('not #readOnly', function(){
45
- var d = jsPsych.data.get().values();
46
- d[0].rt = 0;
47
- expect(jsPsych.data.get().values()[0].rt).toBe(0);
48
- });
49
- test('#count', function(){
50
- expect(jsPsych.data.get().count()).toBe(5);
51
- });
52
- test('#push', function(){
53
- jsPsych.data.get().push({rt: 600, filter: true});
54
- expect(jsPsych.data.get().count()).toBe(6);
55
- data = [
56
- {rt: 100, filter: true},
57
- {rt: 200, filter: false},
58
- {rt: 300, filter: true},
59
- {rt: 400, filter: false},
60
- {rt: 500, filter: false}
61
- ];
62
- jsPsych.data._customInsert(data);
63
- });
64
- test('#values', function(){
65
- expect(JSON.stringify(jsPsych.data.get().values())).toBe(JSON.stringify(data));
66
- });
67
- test('#first', function(){
68
- expect(jsPsych.data.get().first(3).count()).toBe(3);
69
- expect(jsPsych.data.get().first(2).values()[1].rt).toBe(200);
70
- expect(jsPsych.data.get().first().count()).toBe(1);
71
- expect(() => {
72
- jsPsych.data.get().first(-1)
73
- }).toThrow();
74
- expect(() => {
75
- jsPsych.data.get().first(0)
76
- }).toThrow();
77
- expect(jsPsych.data.get().filter({foo: "bar"}).first(1).count()).toBe(0);
78
- var n = jsPsych.data.get().count();
79
- var too_many = n+1;
80
- expect(jsPsych.data.get().first(too_many).count()).toBe(n);
81
- });
82
- test('#last', function(){
83
- expect(jsPsych.data.get().last(2).count(2)).toBe(2);
84
- expect(jsPsych.data.get().last(2).values()[0].rt).toBe(400);
85
- expect(jsPsych.data.get().last().count()).toBe(1);
86
- expect(() => {
87
- jsPsych.data.get().last(-1)
88
- }).toThrow();
89
- expect(() => {
90
- jsPsych.data.get().last(0)
91
- }).toThrow();
92
- expect(jsPsych.data.get().filter({foo: "bar"}).last(1).count()).toBe(0);
93
- var n = jsPsych.data.get().count();
94
- var too_many = n+1;
95
- expect(jsPsych.data.get().last(too_many).count()).toBe(n);
96
- });
97
- test('#join', function(){
98
- var dc1 = jsPsych.data.get().filter({filter: true});
99
- var dc2 = jsPsych.data.get().filter({rt: 500});
100
- var data = dc1.join(dc2);
101
- expect(data.count()).toBe(3);
102
- expect(data.values()[2].rt).toBe(500);
103
- });
104
- test('#unqiueNames', function(){
105
- var data = [
106
- {rt: 100, filter: true},
107
- {rt: 200, filter: false},
108
- {rt: 300, filter: true, v1: false},
109
- {rt: 400, filter: false, v2: true},
110
- {rt: 500, filter: false, v1: false}
111
- ];
112
-
113
- jsPsych.data._customInsert(data);
114
- expect(jsPsych.data.get().uniqueNames().length).toBe(4);
115
- })
116
- });
@@ -1,50 +0,0 @@
1
- const root = '../../';
2
-
3
- require(root + 'jspsych.js');
4
-
5
- var data = [
6
- {rt: 100, filter: true},
7
- {rt: 200, filter: false},
8
- {rt: 300, filter: true},
9
- {rt: 400, filter: false},
10
- {rt: 500, filter: false}
11
- ];
12
-
13
- jsPsych.data._customInsert(data);
14
-
15
- describe('DataColumn', function(){
16
- test('#sum', function(){
17
- expect(jsPsych.data.get().select('rt').sum()).toBe(1500);
18
- });
19
- test('#mean', function(){
20
- expect(jsPsych.data.get().select('rt').mean()).toBe(300);
21
- });
22
- test('#count', function(){
23
- expect(jsPsych.data.get().select('rt').count()).toBe(5);
24
- });
25
- test('#min', function(){
26
- expect(jsPsych.data.get().select('rt').min()).toBe(100);
27
- });
28
- test('#max', function(){
29
- expect(jsPsych.data.get().select('rt').max()).toBe(500);
30
- });
31
- test('#variance', function(){
32
- expect(jsPsych.data.get().select('rt').variance()).toBe((Math.pow(200,2)+Math.pow(100,2)+Math.pow(100,2)+Math.pow(200,2))/(5-1));
33
- });
34
- test('#sd', function(){
35
- expect(jsPsych.data.get().select('rt').sd()).toBe(Math.sqrt((Math.pow(200,2)+Math.pow(100,2)+Math.pow(100,2)+Math.pow(200,2))/(5-1)));
36
- });
37
- test('#median', function(){
38
- expect(jsPsych.data.get().select('rt').median()).toBe(300);
39
- });
40
- test('#subset', function(){
41
- expect(jsPsych.data.get().select('rt').subset(function(x){ return x > 300; }).count()).toBe(2);
42
- });
43
- test('#frequencies', function(){
44
- expect(jsPsych.data.get().select('filter').frequencies()).toEqual({true:2, false: 3})
45
- });
46
- test('#all', function(){
47
- expect(jsPsych.data.get().select('rt').all(function(x){ return x < 600})).toBe(true);
48
- expect(jsPsych.data.get().select('filter').all(function(x){ return x; })).toBe(false);
49
- });
50
- });