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,58 +0,0 @@
1
- const root = '../../';
2
-
3
- require(root + 'jspsych.js');
4
-
5
- describe('unique', function(){
6
- test('generates unique array when there are duplicates', function(){
7
- var arr = [1,1,2,2,3,3];
8
- var out = jsPsych.utils.unique(arr);
9
- expect(out).toEqual([1,2,3]);
10
- expect(out).not.toEqual(arr);
11
- });
12
-
13
- test('generates same array when there are no duplicates', function(){
14
- var arr = [1,2,3];
15
- var out = jsPsych.utils.unique(arr);
16
- expect(out).toEqual(arr);
17
- })
18
- });
19
-
20
- describe('flatten', function(){
21
- test('generates flat array from flat input', function(){
22
- var arr = [1,1,2,2,3,3];
23
- var out = jsPsych.utils.flatten(arr);
24
- expect(out).toEqual(arr);
25
- });
26
-
27
- test('generates flat array from nested input', function(){
28
- var arr = [1,[1,2,2],[3],3];
29
- var out = jsPsych.utils.flatten(arr);
30
- expect(out).toEqual([1,1,2,2,3,3]);
31
- });
32
- });
33
-
34
- describe('deepCopy', function(){
35
- test('works for objects', function(){
36
- var o = {a:1,b:{c:2,d:3}};
37
- var o2 = jsPsych.utils.deepCopy(o);
38
- o2.b.c = 4;
39
- expect(o.b.c).toBe(2);
40
- });
41
- test('works for objects with arrays', function(){
42
- var o = {a:1,b:[2,3]};
43
- var o2 = jsPsych.utils.deepCopy(o);
44
- o2.b[0] = 4;
45
- expect(JSON.stringify(o2.b)).toBe(JSON.stringify([4,3]));
46
- expect(o.b[0]).toBe(2);
47
- });
48
- test('works for objects with functions', function(){
49
- var c = 0;
50
- var o = {a:1, b:function(){c=2}};
51
- var o2 = jsPsych.utils.deepCopy(o);
52
- o2.b = function(){ c = 1 }
53
- o.b();
54
- expect(c).toBe(2);
55
- o2.b();
56
- expect(c).toBe(1);
57
- })
58
- })
Binary file
Binary file
Binary file
Binary file
@@ -1,35 +0,0 @@
1
- const root = '../../';
2
-
3
- jest.useFakeTimers();
4
-
5
- describe('animation plugin', function(){
6
-
7
- beforeEach(function(){
8
- require(root + 'jspsych.js');
9
- require(root + 'plugins/jspsych-animation.js');
10
- });
11
-
12
- test('loads correctly', function(){
13
- expect(typeof window.jsPsych.plugins['animation']).not.toBe('undefined');
14
- });
15
-
16
- // SKIP FOR NOW
17
- test.skip('displays stimuli', function(){
18
-
19
- var animation_sequence = ['img/face_1.jpg', 'img/face_2.jpg'];
20
-
21
- var trial = {
22
- type: 'animation',
23
- stimuli: animation_sequence,
24
- render_on_canvas: false
25
- }
26
-
27
- jsPsych.init({
28
- timeline: [trial],
29
- auto_preload: false
30
- });
31
-
32
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('<img src="img/face_1.jpg" id="jspsych-animation-image"></img>');
33
- });
34
-
35
- });
@@ -1,15 +0,0 @@
1
- const root = '../../';
2
-
3
- jest.useFakeTimers();
4
-
5
- describe('audio-button-response', function(){
6
-
7
- beforeEach(function(){
8
- require(root + 'jspsych.js');
9
- require(root + 'plugins/jspsych-audio-button-response');
10
- });
11
-
12
- test('loads correctly', function(){
13
- expect(typeof window.jsPsych.plugins['audio-button-response']).not.toBe('undefined');
14
- });
15
- });
@@ -1,15 +0,0 @@
1
- const root = '../../';
2
-
3
- jest.useFakeTimers();
4
-
5
- describe('audio-keyboard-response', function(){
6
-
7
- beforeEach(function(){
8
- require(root + 'jspsych.js');
9
- require(root + 'plugins/jspsych-audio-keyboard-response');
10
- });
11
-
12
- test('loads correctly', function(){
13
- expect(typeof window.jsPsych.plugins['audio-keyboard-response']).not.toBe('undefined');
14
- });
15
- });
@@ -1,15 +0,0 @@
1
- const root = '../../';
2
-
3
- jest.useFakeTimers();
4
-
5
- describe('audio-slider-response', function(){
6
-
7
- beforeEach(function(){
8
- require(root + 'jspsych.js');
9
- require(root + 'plugins/jspsych-audio-slider-response');
10
- });
11
-
12
- test('loads correctly', function(){
13
- expect(typeof window.jsPsych.plugins['audio-slider-response']).not.toBe('undefined');
14
- });
15
- });
@@ -1,49 +0,0 @@
1
- const root = '../../';
2
-
3
- jest.useFakeTimers();
4
-
5
- describe('call-function plugin', function(){
6
-
7
- beforeEach(function(){
8
- require(root + 'jspsych.js');
9
- require(root + 'plugins/jspsych-call-function.js');
10
- });
11
-
12
- test('loads correctly', function(){
13
- expect(typeof window.jsPsych.plugins['call-function']).not.toBe('undefined');
14
- });
15
-
16
- test('calls function', function(){
17
-
18
- var trial = {
19
- type: 'call-function',
20
- func: function(){
21
- return 1;
22
- }
23
- }
24
-
25
- jsPsych.init({
26
- timeline: [trial]
27
- });
28
-
29
- expect(jsPsych.data.get().values()[0].value).toBe(1);
30
- });
31
-
32
- test('async function works', function(){
33
- var trial = {
34
- type: 'call-function',
35
- async: true,
36
- func: function(done){
37
- var data = 10;
38
- done(10);
39
- }
40
- }
41
-
42
- jsPsych.init({
43
- timeline: [trial]
44
- });
45
-
46
- expect(jsPsych.data.get().values()[0].value).toBe(10);
47
- })
48
-
49
- });
@@ -1,274 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- jest.useFakeTimers();
5
-
6
- describe('categorize-animation plugin', function(){
7
-
8
- beforeEach(function(){
9
- require(root + 'jspsych.js');
10
- require(root + 'plugins/jspsych-categorize-animation.js');
11
- });
12
-
13
- test('loads correctly', function(){
14
- expect(typeof window.jsPsych.plugins['categorize-animation']).not.toBe('undefined');
15
- });
16
-
17
- test('displays stimulus every 500ms', function(){
18
- var trial = {
19
- type: 'categorize-animation',
20
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
21
- key_answer: 68,
22
- render_on_canvas: false
23
- }
24
-
25
- jsPsych.init({
26
- timeline: [trial],
27
- auto_preload: false
28
- });
29
-
30
- jest.runTimersToTime(500);
31
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/happy_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
32
- jest.runTimersToTime(500);
33
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/sad_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">')
34
- });
35
-
36
- test('prompt should display after animation', function(){
37
- var trial = {
38
- type: 'categorize-animation',
39
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
40
- key_answer: 68,
41
- prompt: "<p>Press d if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
42
- render_on_canvas: false
43
- }
44
-
45
- jsPsych.init({
46
- timeline: [trial],
47
- auto_preload: false
48
- });
49
-
50
- jest.runTimersToTime(1500);
51
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<p>Press d if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>');
52
- });
53
-
54
- test('should display correct if key_answer is pressed', function(){
55
- var trial = {
56
- type: 'categorize-animation',
57
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
58
- key_answer: 68,
59
- choices: [68, 83],
60
- prompt: "<p>Press d if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
61
- render_on_canvas: false
62
- }
63
-
64
- jsPsych.init({
65
- timeline: [trial],
66
- auto_preload: false
67
- });
68
-
69
- jest.runTimersToTime(1500);
70
- utils.pressKey(68);
71
- jest.runTimersToTime(1000);
72
- expect(jsPsych.getDisplayElement().innerHTML).toBe('Correct.');
73
- });
74
-
75
- test('should display incorrect if different key is pressed', function(){
76
- var trial = {
77
- type: 'categorize-animation',
78
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
79
- key_answer: 68,
80
- choices: [68, 83],
81
- prompt: "<p>Press d if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
82
- render_on_canvas: false
83
- }
84
-
85
- jsPsych.init({
86
- timeline: [trial],
87
- auto_preload: false
88
- });
89
-
90
- jest.runTimersToTime(1500);
91
- utils.pressKey(83);
92
- jest.runTimersToTime(1000);
93
- expect(jsPsych.getDisplayElement().innerHTML).toBe('Wrong.');
94
- });
95
-
96
- test('text answer should replace %ANS%', function(){
97
- var trials = {
98
- type: 'categorize-animation',
99
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_3.jpg'],
100
- key_answer: 68,
101
- choices: [68, 83],
102
- text_answer: 'different',
103
- correct_text: "<p>Correct. The faces had %ANS% expressions.</p>",
104
- incorrect_text: "<p>Incorrect. The faces had %ANS% expressions.</p>",
105
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
106
- render_on_canvas: false
107
- };
108
-
109
- jsPsych.init({
110
- timeline: [trials],
111
- auto_preload: false
112
- });
113
-
114
- jest.runTimersToTime(1500);
115
- utils.pressKey(68);
116
- jest.runTimersToTime(1000);
117
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<p>Correct. The faces had different expressions.</p>');
118
- });
119
-
120
- test('correct text displays when when key_answer is pressed', function(){
121
- var trials = {
122
- type: 'categorize-animation',
123
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_3.jpg'],
124
- key_answer: 68,
125
- choices: [68, 83],
126
- correct_text: "<p>You pressed the correct key</p>",
127
- incorrect_text: "<p>Incorrect.</p>",
128
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
129
- render_on_canvas: false
130
- };
131
-
132
- jsPsych.init({
133
- timeline: [trials],
134
- auto_preload: false
135
- });
136
-
137
- jest.runTimersToTime(1500);
138
- utils.pressKey(68);
139
- jest.runTimersToTime(1000);
140
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<p>You pressed the correct key</p>');
141
- });
142
-
143
- test('correct text displays when when key_answer is pressed', function(){
144
- var trials = {
145
- type: 'categorize-animation',
146
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_3.jpg'],
147
- key_answer: 68,
148
- choices: [68, 83],
149
- correct_text: "<p>You pressed the correct key</p>",
150
- incorrect_text: "<p>Incorrect. You pressed the wrong key.</p>",
151
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
152
- render_on_canvas: false
153
- };
154
-
155
- jsPsych.init({
156
- timeline: [trials],
157
- auto_preload: false
158
- });
159
-
160
- jest.runTimersToTime(1500);
161
- utils.pressKey(83);
162
- jest.runTimersToTime(1000);
163
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<p>Incorrect. You pressed the wrong key.</p>');
164
- });
165
-
166
- test('duration to display image is based on frame_time', function(){
167
- var trials = {
168
- type: 'categorize-animation',
169
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
170
- key_answer: 68,
171
- choices: [68, 83],
172
- frame_time: 1000,
173
- correct_text: "<p>You pressed the correct key</p>",
174
- incorrect_text: "<p>Incorrect. You pressed the wrong key.</p>",
175
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
176
- render_on_canvas: false
177
- };
178
-
179
- jsPsych.init({
180
- timeline: [trials],
181
- auto_preload: false
182
- });
183
-
184
- jest.runTimersToTime(1000);
185
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/happy_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
186
- jest.runTimersToTime(500);
187
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/happy_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
188
- jest.runTimersToTime(500);
189
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/sad_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
190
- });
191
-
192
- test('sequence reps', function(){
193
- var trials = {
194
- type: 'categorize-animation',
195
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
196
- key_answer: 68,
197
- choices: [68, 83],
198
- frame_time: 1000,
199
- sequence_reps: 2,
200
- correct_text: "<p>You pressed the correct key</p>",
201
- incorrect_text: "<p>Incorrect. You pressed the wrong key.</p>",
202
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
203
- render_on_canvas: false
204
- };
205
-
206
- jsPsych.init({
207
- timeline: [trials],
208
- auto_preload: false
209
- });
210
-
211
- jest.runTimersToTime(1000);
212
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/happy_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
213
- jest.runTimersToTime(1000);
214
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/sad_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
215
- jest.runTimersToTime(1000);
216
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/happy_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
217
- jest.runTimersToTime(1000);
218
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/sad_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\">');
219
- });
220
-
221
- test('subject can response before animation is completed', function(){
222
- var trials = {
223
- type: 'categorize-animation',
224
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
225
- key_answer: 68,
226
- choices: [68, 83],
227
- frame_time: 1000,
228
- sequence_reps: 2,
229
- correct_text: "<p>You pressed the correct key</p>",
230
- incorrect_text: "<p>Incorrect. You pressed the wrong key.</p>",
231
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
232
- allow_response_before_complete: true,
233
- render_on_canvas: false
234
- };
235
-
236
- jsPsych.init({
237
- timeline: [trials],
238
- auto_preload: false
239
- });
240
-
241
- jest.runTimersToTime(1500);
242
- utils.pressKey(68);
243
- jest.runTimersToTime(500);
244
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<img src=\"img/sad_face_1.jpg\" class=\"jspsych-categorize-animation-stimulus\"><p>You pressed the correct key</p>');
245
- });
246
-
247
- test('display should clear after feeback_duration is done', function(){
248
- var trials = {
249
- type: 'categorize-animation',
250
- stimuli: ['img/happy_face_1.jpg', 'img/sad_face_1.jpg'],
251
- key_answer: 68,
252
- choices: [68, 83],
253
- frame_time: 500,
254
- feeback_duration: 500,
255
- correct_text: "<p>You pressed the correct key</p>",
256
- incorrect_text: "<p>Incorrect. You pressed the wrong key.</p>",
257
- prompt: "<p>Press D if the faces had different emotional expressions. Press S if the faces had the same emotional expression.</p>",
258
- render_on_canvas: false
259
- };
260
-
261
- jsPsych.init({
262
- timeline: [trials],
263
- auto_preload: false
264
- });
265
-
266
- jest.runTimersToTime(1500);
267
- utils.pressKey(68);
268
- jest.runTimersToTime(500);
269
- expect(jsPsych.getDisplayElement().innerHTML).toBe('<p>You pressed the correct key</p>');
270
- jest.runTimersToTime(2000);
271
- expect(jsPsych.getDisplayElement().innerHTML).toBe('');
272
- });
273
-
274
- });
@@ -1,17 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- jest.useFakeTimers();
5
-
6
- describe('categorize-html plugin', function(){
7
-
8
- beforeEach(function(){
9
- require(root + 'jspsych.js');
10
- require(root + 'plugins/jspsych-categorize-html.js');
11
- });
12
-
13
- test('loads correctly', function(){
14
- expect(typeof window.jsPsych.plugins['categorize-html']).not.toBe('undefined');
15
- });
16
-
17
- });
@@ -1,17 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- jest.useFakeTimers();
5
-
6
- describe('categorize-image plugin', function(){
7
-
8
- beforeEach(function(){
9
- require(root + 'jspsych.js');
10
- require(root + 'plugins/jspsych-categorize-image.js');
11
- });
12
-
13
- test('loads correctly', function(){
14
- expect(typeof window.jsPsych.plugins['categorize-image']).not.toBe('undefined');
15
- });
16
-
17
- });
@@ -1,140 +0,0 @@
1
- const utils = require('../testing-utils.js');
2
- const root = '../../';
3
-
4
- jest.useFakeTimers();
5
-
6
- describe('cloze', function(){
7
-
8
- beforeEach(function(){
9
- require(root + 'jspsych.js');
10
- require(root + 'plugins/jspsych-cloze');
11
- });
12
-
13
- test('loads correctly', function(){
14
- expect(typeof window.jsPsych.plugins['cloze']).not.toBe('undefined');
15
- });
16
-
17
- test('displays cloze', function(){
18
- var trial = {
19
- type: 'cloze',
20
- text: 'This is a %cloze% text.',
21
- }
22
-
23
- jsPsych.init({
24
- timeline: [trial]
25
- });
26
-
27
- expect(jsPsych.getDisplayElement().innerHTML).toMatch('<div class="cloze">This is a <input type="text" id="input0" value=""> text.</div>');
28
- });
29
-
30
- test('displays default button text', function(){
31
- var trial = {
32
- type: 'cloze',
33
- text: 'This is a %cloze% text.'
34
- }
35
-
36
- jsPsych.init({
37
- timeline: [trial]
38
- });
39
-
40
- expect(jsPsych.getDisplayElement().innerHTML).toMatch(new RegExp('<button class="jspsych-html-button-response-button" type="button" id="finish_cloze_button">OK</button>'));
41
- });
42
-
43
- test('displays custom button text', function(){
44
- var trial = {
45
- type: 'cloze',
46
- text: 'This is a %cloze% text.',
47
- button_text: 'Next'
48
- }
49
-
50
- jsPsych.init({
51
- timeline: [trial]
52
- });
53
-
54
- expect(jsPsych.getDisplayElement().innerHTML).toMatch(new RegExp('<button class="jspsych-html-button-response-button" type="button" id="finish_cloze_button">Next</button>'));
55
- });
56
-
57
- test('ends trial on button click when using default settings, i.e. answers are not checked', function(){
58
- var trial = {
59
- type: 'cloze',
60
- text: 'This is a %cloze% text.'
61
- }
62
-
63
- jsPsych.init({
64
- timeline: [trial]
65
- });
66
-
67
- utils.clickTarget(document.querySelector('#finish_cloze_button'));
68
- expect(jsPsych.getDisplayElement().innerHTML).toBe('');
69
- });
70
-
71
- test('ends trial on button click when answers are checked and correct', function(){
72
- var trial = {
73
- type: 'cloze',
74
- text: 'This is a %cloze% text.',
75
- check_answers: true
76
- }
77
-
78
- jsPsych.init({
79
- timeline: [trial]
80
- });
81
-
82
- document.getElementById('input0').value = 'cloze';
83
- utils.clickTarget(document.querySelector('#finish_cloze_button'));
84
- expect(jsPsych.getDisplayElement().innerHTML).toBe('');
85
- });
86
-
87
- test('does not end trial on button click when answers are checked and not correct', function(){
88
- var trial = {
89
- type: 'cloze',
90
- text: 'This is a %cloze% text.',
91
- check_answers: true
92
- }
93
-
94
- jsPsych.init({
95
- timeline: [trial]
96
- });
97
-
98
- document.getElementById('input0').value = 'some wrong answer';
99
- utils.clickTarget(document.querySelector('#finish_cloze_button'));
100
- expect(jsPsych.getDisplayElement().innerHTML).not.toBe('');
101
- });
102
-
103
- test('does not call mistake function on button click when answers are checked and correct', function(){
104
- var trial = {
105
- type: 'cloze',
106
- text: 'This is a %cloze% text.',
107
- check_answers: true,
108
- mistake_fn: function(){called = true}
109
- }
110
-
111
- jsPsych.init({
112
- timeline: [trial]
113
- });
114
-
115
- var called = false;
116
- document.getElementById('input0').value = 'cloze';
117
- utils.clickTarget(document.querySelector('#finish_cloze_button'));
118
- expect(called).not.toBeTruthy();
119
- });
120
-
121
- test('calls mistake function on button click when answers are checked and not correct', function(){
122
- var trial = {
123
- type: 'cloze',
124
- text: 'This is a %cloze% text.',
125
- check_answers: true,
126
- mistake_fn: function(){called = true}
127
- }
128
-
129
- jsPsych.init({
130
- timeline: [trial]
131
- });
132
-
133
- var called = false;
134
- document.getElementById('input0').value = 'some wrong answer';
135
- utils.clickTarget(document.querySelector('#finish_cloze_button'));
136
- expect(called).toBeTruthy();
137
- });
138
-
139
-
140
- });