kokopu-react 3.0.2 → 3.2.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 (253) hide show
  1. package/.eslintrc.yml +1 -1
  2. package/CHANGELOG.md +13 -1
  3. package/dist/lib/chessboard/BoardProperties.d.ts +91 -0
  4. package/dist/lib/chessboard/BoardProperties.js +43 -0
  5. package/dist/lib/chessboard/BoardProperties.js.map +1 -0
  6. package/dist/lib/chessboard/Chessboard.css +13 -13
  7. package/dist/lib/chessboard/Chessboard.d.ts +14 -58
  8. package/dist/lib/chessboard/Chessboard.js +26 -92
  9. package/dist/lib/chessboard/Chessboard.js.map +1 -1
  10. package/dist/lib/chessboard/ChessboardImpl.js.map +1 -1
  11. package/dist/lib/chessboard/Draggable.js.map +1 -1
  12. package/dist/lib/chessboard/Motion.js.map +1 -1
  13. package/dist/lib/chessboard/colorsets.js.map +1 -1
  14. package/dist/lib/chessboard/piecesets.js.map +1 -1
  15. package/dist/lib/errorbox/ErrorBox.css +18 -18
  16. package/dist/lib/errorbox/ErrorBox.js.map +1 -1
  17. package/dist/lib/errorbox/parsing.d.ts +57 -0
  18. package/dist/lib/errorbox/parsing.js +140 -0
  19. package/dist/lib/errorbox/parsing.js.map +1 -0
  20. package/dist/lib/exception.js.map +1 -1
  21. package/dist/lib/i18n.d.ts +6 -0
  22. package/dist/lib/i18n.js +7 -0
  23. package/dist/lib/i18n.js.map +1 -1
  24. package/dist/lib/icons/AnnotationSymbolShape.css +6 -6
  25. package/dist/lib/icons/AnnotationSymbolShape.js.map +1 -1
  26. package/dist/lib/icons/ArrowMarkerIcon.js.map +1 -1
  27. package/dist/lib/icons/ArrowTip.js.map +1 -1
  28. package/dist/lib/icons/ChessPieceIcon.js.map +1 -1
  29. package/dist/lib/icons/SquareMarkerIcon.js.map +1 -1
  30. package/dist/lib/icons/TextMarkerIcon.js.map +1 -1
  31. package/dist/lib/icons/arrow.css +1 -1
  32. package/dist/lib/index.d.ts +5 -1
  33. package/dist/lib/index.js +3 -0
  34. package/dist/lib/index.js.map +1 -1
  35. package/dist/lib/movetext/Movetext.css +27 -40
  36. package/dist/lib/movetext/Movetext.d.ts +9 -43
  37. package/dist/lib/movetext/Movetext.js +15 -67
  38. package/dist/lib/movetext/Movetext.js.map +1 -1
  39. package/dist/lib/movetext/MovetextImpl.d.ts +7 -28
  40. package/dist/lib/movetext/MovetextImpl.js +15 -94
  41. package/dist/lib/movetext/MovetextImpl.js.map +1 -1
  42. package/dist/lib/movetext/fonts.css +7 -7
  43. package/dist/lib/movetext/htmlFilter.js.map +1 -1
  44. package/dist/lib/movetext/moveFormatter.js.map +1 -1
  45. package/dist/lib/navigationboard/NavigationBoard.d.ts +156 -0
  46. package/dist/lib/navigationboard/NavigationBoard.js +195 -0
  47. package/dist/lib/navigationboard/NavigationBoard.js.map +1 -0
  48. package/dist/lib/navigationboard/NavigationButton.d.ts +54 -0
  49. package/dist/lib/navigationboard/NavigationButton.js +35 -0
  50. package/dist/lib/navigationboard/NavigationButton.js.map +1 -0
  51. package/dist/lib/navigationboard/NavigationField.css +36 -0
  52. package/dist/lib/navigationboard/NavigationField.d.ts +81 -0
  53. package/dist/lib/navigationboard/NavigationField.js +154 -0
  54. package/dist/lib/navigationboard/NavigationField.js.map +1 -0
  55. package/dist/lib/navigationboard/NavigationToolbar.css +54 -0
  56. package/dist/lib/navigationboard/NavigationToolbar.d.ts +34 -0
  57. package/dist/lib/navigationboard/NavigationToolbar.js +73 -0
  58. package/dist/lib/navigationboard/NavigationToolbar.js.map +1 -0
  59. package/dist/lib/navigationboard/iconPaths.d.ts +29 -0
  60. package/dist/lib/navigationboard/iconPaths.js +91 -0
  61. package/dist/lib/navigationboard/iconPaths.js.map +1 -0
  62. package/dist/lib/sanitization.js.map +1 -1
  63. package/dist/lib/types.js.map +1 -1
  64. package/dist/lib/util.js.map +1 -1
  65. package/doc_src/demo/PageChessboardBase.tsx +115 -115
  66. package/doc_src/demo/PageChessboardInteraction.tsx +303 -303
  67. package/doc_src/demo/PageChessboardMove.tsx +173 -156
  68. package/doc_src/demo/PageChessboardSmallScreens.tsx +94 -94
  69. package/doc_src/demo/PageMovetextBase.tsx +180 -180
  70. package/doc_src/demo/PageMovetextInteraction.tsx +123 -123
  71. package/doc_src/demo/PageNavigationBoardBase.tsx +201 -0
  72. package/doc_src/demo/PageNavigationBoardUncontrolledVsControlled.tsx +114 -0
  73. package/doc_src/demo/decs.d.ts +4 -4
  74. package/doc_src/demo/demo.css +12 -12
  75. package/doc_src/demo/game-3.pgn +10 -0
  76. package/doc_src/demo/util.ts +1 -1
  77. package/doc_src/examples/Movetext.md +1 -1
  78. package/doc_src/examples/NavigationBoard.md +15 -0
  79. package/doc_src/theming/LogoRenderer.js +13 -13
  80. package/doc_src/theming/theming.css +5 -5
  81. package/package.json +95 -95
  82. package/scripts/doc.styleguide.config.js +133 -123
  83. package/scripts/doc.tsconfig.json +5 -5
  84. package/scripts/docker-compose.yml +1 -1
  85. package/scripts/test-graphic.tsconfig.json +5 -5
  86. package/scripts/test-graphic.webpack.config.js +57 -57
  87. package/scripts/test-headless.webpack.config.js +29 -29
  88. package/src/chessboard/BoardProperties.ts +131 -0
  89. package/src/chessboard/Chessboard.css +13 -13
  90. package/src/chessboard/Chessboard.tsx +389 -518
  91. package/src/chessboard/ChessboardImpl.tsx +557 -557
  92. package/src/chessboard/Draggable.tsx +185 -185
  93. package/src/chessboard/Motion.tsx +67 -67
  94. package/src/chessboard/colorsets.ts +66 -66
  95. package/src/chessboard/piecesets.ts +84 -84
  96. package/src/decs.d.ts +2 -2
  97. package/src/errorbox/ErrorBox.css +18 -18
  98. package/src/errorbox/ErrorBox.tsx +75 -75
  99. package/src/errorbox/parsing.tsx +158 -0
  100. package/src/exception.ts +17 -17
  101. package/src/i18n.ts +8 -0
  102. package/src/icons/AnnotationSymbolShape.css +6 -6
  103. package/src/icons/AnnotationSymbolShape.tsx +31 -31
  104. package/src/icons/ArrowMarkerIcon.tsx +34 -34
  105. package/src/icons/ArrowTip.tsx +14 -14
  106. package/src/icons/ChessPieceIcon.tsx +45 -45
  107. package/src/icons/SquareMarkerIcon.tsx +20 -20
  108. package/src/icons/TextMarkerIcon.tsx +29 -29
  109. package/src/icons/arrow.css +1 -1
  110. package/src/index.ts +8 -3
  111. package/src/movetext/Movetext.css +27 -40
  112. package/src/movetext/Movetext.tsx +163 -228
  113. package/src/movetext/MovetextImpl.tsx +351 -438
  114. package/src/movetext/fonts.css +7 -7
  115. package/src/movetext/htmlFilter.tsx +129 -129
  116. package/src/movetext/moveFormatter.tsx +37 -37
  117. package/src/navigationboard/NavigationBoard.tsx +350 -0
  118. package/src/navigationboard/NavigationButton.ts +72 -0
  119. package/src/navigationboard/NavigationField.css +36 -0
  120. package/src/navigationboard/NavigationField.tsx +185 -0
  121. package/src/navigationboard/NavigationToolbar.css +54 -0
  122. package/src/navigationboard/NavigationToolbar.tsx +117 -0
  123. package/src/navigationboard/iconPaths.ts +98 -0
  124. package/src/sanitization.ts +17 -17
  125. package/src/types.ts +116 -116
  126. package/src/util.ts +11 -11
  127. package/test/01_types.js +167 -167
  128. package/test/02_chessboard_util.js +114 -114
  129. package/test/03_error_box_graphic.js +16 -16
  130. package/test/04_icons_graphic.js +32 -32
  131. package/test/05_chessboard_graphic.js +60 -58
  132. package/test/06_chessboard_animation.js +36 -36
  133. package/test/07_chessboard_interaction.js +101 -101
  134. package/test/08_chessboard_play_moves.js +62 -62
  135. package/test/09_chessboard_small_screens.js +42 -21
  136. package/test/10_movetext_graphic.js +36 -31
  137. package/test/11_movetext_interaction.js +100 -96
  138. package/test/12_navigation_board_base.js +151 -0
  139. package/test/13_navigation_board_graphic.js +68 -0
  140. package/test/14_navigation_board_autoplay.js +100 -0
  141. package/test/common/graphic.js +106 -97
  142. package/test/graphic_references/05_chessboard_graphic/move/illegal_null-move.png +0 -0
  143. package/test/graphic_references/05_chessboard_graphic/move/null-move.png +0 -0
  144. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/default_bottom_component.png +0 -0
  145. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/default_top_component.png +0 -0
  146. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/reduced_bottom_component.png +0 -0
  147. package/test/graphic_references/09_chessboard_small_screens/top_bottom_components/reduced_top_component.png +0 -0
  148. package/test/graphic_references/10_movetext_graphic/format_move/format_text.png +0 -0
  149. package/test/graphic_references/10_movetext_graphic/options/wrong_piece_symbol_value.png +0 -0
  150. package/test/graphic_references/11_movetext_interaction/select_moves/click_on_unselected_without_callback.png +0 -0
  151. package/test/graphic_references/12_navigation_board_base/controlled/default.png +0 -0
  152. package/test/graphic_references/12_navigation_board_base/controlled/forbidden_navigation_0.png +0 -0
  153. package/test/graphic_references/12_navigation_board_base/controlled/forbidden_navigation_1.png +0 -0
  154. package/test/graphic_references/12_navigation_board_base/controlled/invalid_node_id.png +0 -0
  155. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_0.png +0 -0
  156. package/test/graphic_references/12_navigation_board_base/controlled/no_callback_defined_1.png +0 -0
  157. package/test/graphic_references/12_navigation_board_base/controlled/overriding_initial_node_id.png +0 -0
  158. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_0.png +0 -0
  159. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_1.png +0 -0
  160. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_2.png +0 -0
  161. package/test/graphic_references/12_navigation_board_base/controlled/regular_navigation_3.png +0 -0
  162. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_0.png +0 -0
  163. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_1.png +0 -0
  164. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_beginning_2.png +0 -0
  165. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_0.png +0 -0
  166. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_1.png +0 -0
  167. package/test/graphic_references/12_navigation_board_base/uncontrolled/forbidden_navigation_at_end_2.png +0 -0
  168. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_end.png +0 -0
  169. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_at_specific_id.png +0 -0
  170. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_default.png +0 -0
  171. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_default_with_game_index.png +0 -0
  172. package/test/graphic_references/12_navigation_board_base/uncontrolled/initial_state_on_null-move.png +0 -0
  173. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_0.png +0 -0
  174. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_1.png +0 -0
  175. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_2.png +0 -0
  176. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_3.png +0 -0
  177. package/test/graphic_references/12_navigation_board_base/uncontrolled/navigation_with_keys_4.png +0 -0
  178. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_flipping_0.png +0 -0
  179. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_flipping_1.png +0 -0
  180. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_0.png +0 -0
  181. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_1.png +0 -0
  182. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_2.png +0 -0
  183. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_3.png +0 -0
  184. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_4.png +0 -0
  185. package/test/graphic_references/12_navigation_board_base/uncontrolled/regular_navigation_5.png +0 -0
  186. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_1.png +0 -0
  187. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/error_2.png +0 -0
  188. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/multiple_buttons.png +0 -0
  189. package/test/graphic_references/13_navigation_board_graphic/additional_buttons/single_button.png +0 -0
  190. package/test/graphic_references/13_navigation_board_graphic/error/pgn_parsing_error.png +0 -0
  191. package/test/graphic_references/13_navigation_board_graphic/error/wrong_game_type.png +0 -0
  192. package/test/graphic_references/13_navigation_board_graphic/theme/custom_1.png +0 -0
  193. package/test/graphic_references/13_navigation_board_graphic/theme/custom_2.png +0 -0
  194. package/test/graphic_references/13_navigation_board_graphic/theme/large.png +0 -0
  195. package/test/graphic_references/13_navigation_board_graphic/theme/small.png +0 -0
  196. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_acknowledging_is-playing_changes.png +0 -0
  197. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_1_move_not_acknowledging_is-playing_changes.png +0 -0
  198. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_acknowledging_node_changes.png +0 -0
  199. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_2_moves_not_acknowledging_node_changes.png +0 -0
  200. package/test/graphic_references/14_navigation_board_autoplay/controlled/after_reaching_the_end.png +0 -0
  201. package/test/graphic_references/14_navigation_board_autoplay/controlled/already_at_the_end.png +0 -0
  202. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_is-playing_changes.png +0 -0
  203. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_acknowledging_node_changes.png +0 -0
  204. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_at_the_end.png +0 -0
  205. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_close_to_end.png +0 -0
  206. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_is-playing_changes.png +0 -0
  207. package/test/graphic_references/14_navigation_board_autoplay/controlled/initial_state_not_acknowledging_node_changes.png +0 -0
  208. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_after_stop.png +0 -0
  209. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_2_moves_from_beginning_before_stop.png +0 -0
  210. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_after_stop.png +0 -0
  211. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/after_reaching_the_end_before_stop.png +0 -0
  212. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_close_to_end.png +0 -0
  213. package/test/graphic_references/14_navigation_board_autoplay/uncontrolled/initial_state_default.png +0 -0
  214. package/test/graphic_test_app/03_error_box_graphic/base.tsx +14 -14
  215. package/test/graphic_test_app/03_error_box_graphic/localization.tsx +1 -1
  216. package/test/graphic_test_app/04_icons_graphic/chess_piece.tsx +7 -7
  217. package/test/graphic_test_app/04_icons_graphic/marker.tsx +15 -15
  218. package/test/graphic_test_app/05_chessboard_graphic/annotations.tsx +7 -7
  219. package/test/graphic_test_app/05_chessboard_graphic/base.tsx +6 -6
  220. package/test/graphic_test_app/05_chessboard_graphic/chess_variants.tsx +7 -7
  221. package/test/graphic_test_app/05_chessboard_graphic/flipped.tsx +5 -5
  222. package/test/graphic_test_app/05_chessboard_graphic/move.tsx +12 -10
  223. package/test/graphic_test_app/05_chessboard_graphic/theme.tsx +12 -12
  224. package/test/graphic_test_app/06_chessboard_animation/base_1.tsx +6 -6
  225. package/test/graphic_test_app/06_chessboard_animation/base_2.tsx +6 -6
  226. package/test/graphic_test_app/06_chessboard_animation/base_3.tsx +6 -6
  227. package/test/graphic_test_app/06_chessboard_animation/on_redraw.tsx +16 -16
  228. package/test/graphic_test_app/07_chessboard_interaction/click_squares.tsx +5 -5
  229. package/test/graphic_test_app/07_chessboard_interaction/edit_arrows.tsx +4 -4
  230. package/test/graphic_test_app/07_chessboard_interaction/error.tsx +2 -2
  231. package/test/graphic_test_app/07_chessboard_interaction/move_pieces.tsx +5 -5
  232. package/test/graphic_test_app/08_chessboard_play_moves/base.tsx +8 -8
  233. package/test/graphic_test_app/08_chessboard_play_moves/promotions.tsx +4 -4
  234. package/test/graphic_test_app/09_chessboard_small_screens/base.tsx +9 -9
  235. package/test/graphic_test_app/09_chessboard_small_screens/top_bottom_components.tsx +48 -0
  236. package/test/graphic_test_app/10_movetext_graphic/base.tsx +4 -4
  237. package/test/graphic_test_app/10_movetext_graphic/error.tsx +6 -6
  238. package/test/graphic_test_app/10_movetext_graphic/format_move.tsx +31 -0
  239. package/test/graphic_test_app/10_movetext_graphic/html.tsx +5 -5
  240. package/test/graphic_test_app/10_movetext_graphic/options.tsx +10 -9
  241. package/test/graphic_test_app/11_movetext_interaction/error.tsx +1 -1
  242. package/test/graphic_test_app/11_movetext_interaction/select_moves.tsx +11 -10
  243. package/test/graphic_test_app/12_navigation_board_base/controlled.tsx +43 -0
  244. package/test/graphic_test_app/12_navigation_board_base/uncontrolled.tsx +56 -0
  245. package/test/graphic_test_app/13_navigation_board_graphic/additional_buttons.tsx +49 -0
  246. package/test/graphic_test_app/13_navigation_board_graphic/error.tsx +34 -0
  247. package/test/graphic_test_app/13_navigation_board_graphic/theme.tsx +38 -0
  248. package/test/graphic_test_app/14_navigation_board_autoplay/controlled.tsx +73 -0
  249. package/test/graphic_test_app/14_navigation_board_autoplay/uncontrolled.tsx +34 -0
  250. package/test/graphic_test_app/common/decs.d.ts +2 -2
  251. package/test/graphic_test_app/common/test_app.css +15 -15
  252. package/test/graphic_test_app/common/test_app.tsx +48 -48
  253. package/tsconfig.json +13 -13
package/test/01_types.js CHANGED
@@ -23,224 +23,224 @@
23
23
 
24
24
 
25
25
  const { exception, isPieceSymbolMapping, isAnnotationSymbol, isAnnotationColor, flattenSquareMarkers, parseSquareMarkers, flattenTextMarkers, parseTextMarkers,
26
- flattenArrowMarkers, parseArrowMarkers } = require('../build/test_headless/index');
26
+ flattenArrowMarkers, parseArrowMarkers } = require('../build/test_headless/index');
27
27
  const test = require('unit.js');
28
28
 
29
29
 
30
30
  describe('Is piece symbol mapping', () => {
31
31
 
32
- function itIsPieceSymbolMapping(label, value, expected) {
33
- it(label, () => {
34
- test.value(isPieceSymbolMapping(value)).is(expected);
35
- });
36
- }
32
+ function itIsPieceSymbolMapping(label, value, expected) {
33
+ it(label, () => {
34
+ test.value(isPieceSymbolMapping(value)).is(expected);
35
+ });
36
+ }
37
37
 
38
- itIsPieceSymbolMapping('French localization', { K: 'R', Q: 'D', R: 'T', B: 'F', N: 'C', P: 'P' } , true);
39
- itIsPieceSymbolMapping('Additional fields', { K: 'Ki_', Q: 'Qu_', R: 'Rk_', B: 'Bi_', N: 'Kn_', P: 'Pw_', Z: 'whatever', val: 42 }, true);
40
- itIsPieceSymbolMapping('Missing fields', { K: 'Ki_', Q: 'Qu_', R: 'Rk_', B: 'Bi_', N: 'Kn_' }, false);
41
- itIsPieceSymbolMapping('Non-string valued fields', { K: 42, Q: 'Qu_', R: 'Rk_', B: 'Bi_', N: 'Kn_', P: 'Pw_' }, false);
38
+ itIsPieceSymbolMapping('French localization', { K: 'R', Q: 'D', R: 'T', B: 'F', N: 'C', P: 'P' } , true);
39
+ itIsPieceSymbolMapping('Additional fields', { K: 'Ki_', Q: 'Qu_', R: 'Rk_', B: 'Bi_', N: 'Kn_', P: 'Pw_', Z: 'whatever', val: 42 }, true);
40
+ itIsPieceSymbolMapping('Missing fields', { K: 'Ki_', Q: 'Qu_', R: 'Rk_', B: 'Bi_', N: 'Kn_' }, false);
41
+ itIsPieceSymbolMapping('Non-string valued fields', { K: 42, Q: 'Qu_', R: 'Rk_', B: 'Bi_', N: 'Kn_', P: 'Pw_' }, false);
42
42
 
43
- itIsPieceSymbolMapping('String', 'whatever', false);
44
- itIsPieceSymbolMapping('null', null, false);
45
- itIsPieceSymbolMapping('undefined', undefined, false);
43
+ itIsPieceSymbolMapping('String', 'whatever', false);
44
+ itIsPieceSymbolMapping('null', null, false);
45
+ itIsPieceSymbolMapping('undefined', undefined, false);
46
46
  });
47
47
 
48
48
 
49
49
  describe('Is Annotation symbol', () => {
50
50
 
51
- function itIsAnnotationSymbol(label, value, expected) {
52
- it(label, () => {
53
- test.value(isAnnotationSymbol(value)).is(expected);
54
- });
55
- }
56
-
57
- itIsAnnotationSymbol('Upper case letter', 'A', true);
58
- itIsAnnotationSymbol('Lower case letter', 'z', true);
59
- itIsAnnotationSymbol('Digit character', '0', true);
60
- itIsAnnotationSymbol('Special token 1', 'plus', true);
61
- itIsAnnotationSymbol('Special token 2', 'circle', true);
62
-
63
- itIsAnnotationSymbol('Non-special token', 'whatever', false);
64
- itIsAnnotationSymbol('Number', 0, false);
65
- itIsAnnotationSymbol('null', null, false);
66
- itIsAnnotationSymbol('undefined', undefined, false);
51
+ function itIsAnnotationSymbol(label, value, expected) {
52
+ it(label, () => {
53
+ test.value(isAnnotationSymbol(value)).is(expected);
54
+ });
55
+ }
56
+
57
+ itIsAnnotationSymbol('Upper case letter', 'A', true);
58
+ itIsAnnotationSymbol('Lower case letter', 'z', true);
59
+ itIsAnnotationSymbol('Digit character', '0', true);
60
+ itIsAnnotationSymbol('Special token 1', 'plus', true);
61
+ itIsAnnotationSymbol('Special token 2', 'circle', true);
62
+
63
+ itIsAnnotationSymbol('Non-special token', 'whatever', false);
64
+ itIsAnnotationSymbol('Number', 0, false);
65
+ itIsAnnotationSymbol('null', null, false);
66
+ itIsAnnotationSymbol('undefined', undefined, false);
67
67
  });
68
68
 
69
69
 
70
70
  describe('Is Annotation color', () => {
71
71
 
72
- function itIsAnnotationColor(label, value, expected) {
73
- it(label, () => {
74
- test.value(isAnnotationColor(value)).is(expected);
75
- });
76
- }
77
-
78
- itIsAnnotationColor('b', 'b', true);
79
- itIsAnnotationColor('g', 'g', true);
80
- itIsAnnotationColor('r', 'r', true);
81
- itIsAnnotationColor('y', 'y', true);
82
-
83
- itIsAnnotationColor('Not a color', 'z', false);
84
- itIsAnnotationColor('Number', 42, false);
85
- itIsAnnotationColor('null', null, false);
86
- itIsAnnotationColor('undefined', undefined, false);
72
+ function itIsAnnotationColor(label, value, expected) {
73
+ it(label, () => {
74
+ test.value(isAnnotationColor(value)).is(expected);
75
+ });
76
+ }
77
+
78
+ itIsAnnotationColor('b', 'b', true);
79
+ itIsAnnotationColor('g', 'g', true);
80
+ itIsAnnotationColor('r', 'r', true);
81
+ itIsAnnotationColor('y', 'y', true);
82
+
83
+ itIsAnnotationColor('Not a color', 'z', false);
84
+ itIsAnnotationColor('Number', 42, false);
85
+ itIsAnnotationColor('null', null, false);
86
+ itIsAnnotationColor('undefined', undefined, false);
87
87
  });
88
88
 
89
89
 
90
90
  describe('Flatten square markers', () => {
91
91
 
92
- it('Re4', () => { test.value(flattenSquareMarkers({ e4: 'r' })).is('Re4'); });
93
- it('Gd3,Yh8', () => { test.value(flattenSquareMarkers({ h8: 'y', d3: 'g' })).is('Gd3,Yh8'); });
94
- it('Ga1,Yc5,Rd2,Bh7,Yh8', () => { test.value(flattenSquareMarkers({ c5: 'y', h8: 'y', a1: 'g', h7: 'b', d2: 'r' })).is('Ga1,Yc5,Rd2,Bh7,Yh8'); });
95
- it('<empty>', () => { test.value(flattenSquareMarkers({})).is(''); });
92
+ it('Re4', () => { test.value(flattenSquareMarkers({ e4: 'r' })).is('Re4'); });
93
+ it('Gd3,Yh8', () => { test.value(flattenSquareMarkers({ h8: 'y', d3: 'g' })).is('Gd3,Yh8'); });
94
+ it('Ga1,Yc5,Rd2,Bh7,Yh8', () => { test.value(flattenSquareMarkers({ c5: 'y', h8: 'y', a1: 'g', h7: 'b', d2: 'r' })).is('Ga1,Yc5,Rd2,Bh7,Yh8'); });
95
+ it('<empty>', () => { test.value(flattenSquareMarkers({})).is(''); });
96
96
 
97
- it('Wrong square', () => { test.value(flattenSquareMarkers({ e1: 'r', k9: 'g', whatever: 'y' })).is('Re1'); });
98
- it('Wrong color', () => { test.value(flattenSquareMarkers({ a2: 'g', b5: 'R', c4: 42, h8: 'yellow' })).is('Ga2'); });
97
+ it('Wrong square', () => { test.value(flattenSquareMarkers({ e1: 'r', k9: 'g', whatever: 'y' })).is('Re1'); });
98
+ it('Wrong color', () => { test.value(flattenSquareMarkers({ a2: 'g', b5: 'R', c4: 42, h8: 'yellow' })).is('Ga2'); });
99
99
 
100
- it('Wrong type (not an object)', () => { test.exception(() => flattenSquareMarkers('whatever')).isInstanceOf(exception.IllegalArgument); });
101
- it('Wrong type (null)', () => { test.exception(() => flattenSquareMarkers(null)).isInstanceOf(exception.IllegalArgument); });
102
- it('Wrong type (undefined)', () => { test.exception(() => flattenSquareMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
100
+ it('Wrong type (not an object)', () => { test.exception(() => flattenSquareMarkers('whatever')).isInstanceOf(exception.IllegalArgument); });
101
+ it('Wrong type (null)', () => { test.exception(() => flattenSquareMarkers(null)).isInstanceOf(exception.IllegalArgument); });
102
+ it('Wrong type (undefined)', () => { test.exception(() => flattenSquareMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
103
103
  });
104
104
 
105
105
 
106
106
  describe('Parse square markers', () => {
107
107
 
108
- it('Re4', () => { test.value(parseSquareMarkers('Re4')).is({ e4: 'r' }); });
109
- it('Gd3,Yh8', () => { test.value(parseSquareMarkers('Gd3,Yh8')).is({ h8: 'y', d3: 'g' }); });
110
- it('Ga1,Yc5,Rd2,Bh7,Yh8', () => { test.value(parseSquareMarkers(' Ga1, Yh8,Yc5 ,Rd2, Bh7 ')).is({ c5: 'y', h8: 'y', a1: 'g', h7: 'b', d2: 'r' }); });
111
- it('<empty>', () => { test.value(parseSquareMarkers('')).is({}); });
112
- it('<blank>', () => { test.value(parseSquareMarkers(' ')).is({}); });
108
+ it('Re4', () => { test.value(parseSquareMarkers('Re4')).is({ e4: 'r' }); });
109
+ it('Gd3,Yh8', () => { test.value(parseSquareMarkers('Gd3,Yh8')).is({ h8: 'y', d3: 'g' }); });
110
+ it('Ga1,Yc5,Rd2,Bh7,Yh8', () => { test.value(parseSquareMarkers(' Ga1, Yh8,Yc5 ,Rd2, Bh7 ')).is({ c5: 'y', h8: 'y', a1: 'g', h7: 'b', d2: 'r' }); });
111
+ it('<empty>', () => { test.value(parseSquareMarkers('')).is({}); });
112
+ it('<blank>', () => { test.value(parseSquareMarkers(' ')).is({}); });
113
113
 
114
- it('Wrong square', () => { test.value(parseSquareMarkers('Rg9,Ye1')).is({ e1: 'y' }); });
115
- it('Duplicated square', () => { test.value(parseSquareMarkers('Ra3,Ya3')).is({ a3: 'y' }); });
116
- it('Wrong color', () => { test.value(parseSquareMarkers('Ga6,Cg5')).is({ a6: 'g' }); });
117
- it('Wrong format', () => { test.value(parseSquareMarkers('Something Ra2 invalid, Ye4, G g3')).is({ e4: 'y' }); });
114
+ it('Wrong square', () => { test.value(parseSquareMarkers('Rg9,Ye1')).is({ e1: 'y' }); });
115
+ it('Duplicated square', () => { test.value(parseSquareMarkers('Ra3,Ya3')).is({ a3: 'y' }); });
116
+ it('Wrong color', () => { test.value(parseSquareMarkers('Ga6,Cg5')).is({ a6: 'g' }); });
117
+ it('Wrong format', () => { test.value(parseSquareMarkers('Something Ra2 invalid, Ye4, G g3')).is({ e4: 'y' }); });
118
118
 
119
- it('Wrong type (not a string)', () => { test.exception(() => parseSquareMarkers(42)).isInstanceOf(exception.IllegalArgument); });
120
- it('Wrong type (null)', () => { test.exception(() => parseSquareMarkers(null)).isInstanceOf(exception.IllegalArgument); });
121
- it('Wrong type (undefined)', () => { test.exception(() => parseSquareMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
119
+ it('Wrong type (not a string)', () => { test.exception(() => parseSquareMarkers(42)).isInstanceOf(exception.IllegalArgument); });
120
+ it('Wrong type (null)', () => { test.exception(() => parseSquareMarkers(null)).isInstanceOf(exception.IllegalArgument); });
121
+ it('Wrong type (undefined)', () => { test.exception(() => parseSquareMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
122
122
  });
123
123
 
124
124
 
125
125
  describe('Flatten text markers', () => {
126
126
 
127
- it('RAe4', () => { test.value(flattenTextMarkers({ e4: { symbol: 'A', color: 'r' } })).is('RAe4'); });
128
- it('Gzd3,Y1h8', () => { test.value(flattenTextMarkers({
129
- h8: { symbol: '1', color: 'y' },
130
- d3: { symbol: 'z', color: 'g' },
131
- })).is('Gzd3,Y1h8'); });
132
- it('G2a1,YMc5,RLd2,Rxh7,Bwh8', () => { test.value(flattenTextMarkers({
133
- c5: { symbol: 'M', color: 'y' },
134
- h8: { symbol: 'w', color: 'b' },
135
- a1: { symbol: '2', color: 'g' },
136
- h7: { symbol: 'x', color: 'r' },
137
- d2: { symbol: 'L', color: 'r' },
138
- })).is('G2a1,YMc5,RLd2,Rxh7,Bwh8'); });
139
- it('Multi-character symbols', () => { test.value(flattenTextMarkers({
140
- a1: { symbol: 'A', color: 'y' },
141
- a7: { symbol: 'plus', color: 'g' },
142
- b3: { symbol: 'times', color: 'r' },
143
- g5: { symbol: 'dot', color: 'y' },
144
- h3: { symbol: 'circle', color: 'g' },
145
- })).is('YAa1,G(plus)a7,R(times)b3,Y(dot)g5,G(circle)h3'); });
146
- it('<empty>', () => { test.value(flattenTextMarkers({})).is(''); });
147
-
148
- it('Wrong square', () => { test.value(flattenTextMarkers({
149
- e1: { symbol: 'H', color: 'r' },
150
- j5: { symbol: 'A', color: 'g' },
151
- })).is('RHe1'); });
152
- it('Wrong color', () => { test.value(flattenTextMarkers({
153
- a2: { symbol: '0', color: 'g' },
154
- b5: { symbol: 'A', color: 'R' },
155
- h8: { symbol: 'A' },
156
- })).is('G0a2'); });
157
- it('Wrong symbol', () => { test.value(flattenTextMarkers({
158
- a2: { symbol: '0', color: 'g' },
159
- b5: { symbol: '', color: 'r' },
160
- h8: { color: 'g' },
161
- d8: { symbol: '-', color: 'r' },
162
- c1: { symbol: 'abcd', color: 'r' },
163
- })).is('G0a2'); });
164
- it('Wrong multi-character symbol', () => { test.value(flattenTextMarkers({
165
- a2: { symbol: '0', color: 'g' },
166
- b5: { symbol: 'whatever', color: 'r' },
167
- })).is('G0a2'); });
168
-
169
- it('Wrong type (not an object)', () => { test.exception(() => flattenTextMarkers('whatever')).isInstanceOf(exception.IllegalArgument); });
170
- it('Wrong type (null)', () => { test.exception(() => flattenTextMarkers(null)).isInstanceOf(exception.IllegalArgument); });
171
- it('Wrong type (undefined)', () => { test.exception(() => flattenTextMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
127
+ it('RAe4', () => { test.value(flattenTextMarkers({ e4: { symbol: 'A', color: 'r' } })).is('RAe4'); });
128
+ it('Gzd3,Y1h8', () => { test.value(flattenTextMarkers({
129
+ h8: { symbol: '1', color: 'y' },
130
+ d3: { symbol: 'z', color: 'g' },
131
+ })).is('Gzd3,Y1h8'); });
132
+ it('G2a1,YMc5,RLd2,Rxh7,Bwh8', () => { test.value(flattenTextMarkers({
133
+ c5: { symbol: 'M', color: 'y' },
134
+ h8: { symbol: 'w', color: 'b' },
135
+ a1: { symbol: '2', color: 'g' },
136
+ h7: { symbol: 'x', color: 'r' },
137
+ d2: { symbol: 'L', color: 'r' },
138
+ })).is('G2a1,YMc5,RLd2,Rxh7,Bwh8'); });
139
+ it('Multi-character symbols', () => { test.value(flattenTextMarkers({
140
+ a1: { symbol: 'A', color: 'y' },
141
+ a7: { symbol: 'plus', color: 'g' },
142
+ b3: { symbol: 'times', color: 'r' },
143
+ g5: { symbol: 'dot', color: 'y' },
144
+ h3: { symbol: 'circle', color: 'g' },
145
+ })).is('YAa1,G(plus)a7,R(times)b3,Y(dot)g5,G(circle)h3'); });
146
+ it('<empty>', () => { test.value(flattenTextMarkers({})).is(''); });
147
+
148
+ it('Wrong square', () => { test.value(flattenTextMarkers({
149
+ e1: { symbol: 'H', color: 'r' },
150
+ j5: { symbol: 'A', color: 'g' },
151
+ })).is('RHe1'); });
152
+ it('Wrong color', () => { test.value(flattenTextMarkers({
153
+ a2: { symbol: '0', color: 'g' },
154
+ b5: { symbol: 'A', color: 'R' },
155
+ h8: { symbol: 'A' },
156
+ })).is('G0a2'); });
157
+ it('Wrong symbol', () => { test.value(flattenTextMarkers({
158
+ a2: { symbol: '0', color: 'g' },
159
+ b5: { symbol: '', color: 'r' },
160
+ h8: { color: 'g' },
161
+ d8: { symbol: '-', color: 'r' },
162
+ c1: { symbol: 'abcd', color: 'r' },
163
+ })).is('G0a2'); });
164
+ it('Wrong multi-character symbol', () => { test.value(flattenTextMarkers({
165
+ a2: { symbol: '0', color: 'g' },
166
+ b5: { symbol: 'whatever', color: 'r' },
167
+ })).is('G0a2'); });
168
+
169
+ it('Wrong type (not an object)', () => { test.exception(() => flattenTextMarkers('whatever')).isInstanceOf(exception.IllegalArgument); });
170
+ it('Wrong type (null)', () => { test.exception(() => flattenTextMarkers(null)).isInstanceOf(exception.IllegalArgument); });
171
+ it('Wrong type (undefined)', () => { test.exception(() => flattenTextMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
172
172
  });
173
173
 
174
174
 
175
175
  describe('Parse text markers', () => {
176
176
 
177
- it('RAe4', () => { test.value(parseTextMarkers('RAe4')).is({ e4: { symbol: 'A', color: 'r' } }); });
178
- it('Gzd3,Y1h8', () => { test.value(parseTextMarkers('Gzd3,Y1h8')).is({
179
- h8: { symbol: '1', color: 'y' },
180
- d3: { symbol: 'z', color: 'g' },
181
- }); });
182
- it('G2a1,YMc5,RLd2,Rxh7,Bwh8', () => { test.value(parseTextMarkers(' G2a1, Rxh7 ,YMc5 ,RLd2,Bwh8 ')).is({
183
- c5: { symbol: 'M', color: 'y' },
184
- h8: { symbol: 'w', color: 'b' },
185
- a1: { symbol: '2', color: 'g' },
186
- h7: { symbol: 'x', color: 'r' },
187
- d2: { symbol: 'L', color: 'r' },
188
- }); });
189
- it('Multi-character symbols', () => { test.value(parseTextMarkers('YAa1,G(plus)a7, R(times)b3 ,Y(dot)g5,G(circle)h3')).is({
190
- a1: { symbol: 'A', color: 'y' },
191
- a7: { symbol: 'plus', color: 'g' },
192
- b3: { symbol: 'times', color: 'r' },
193
- g5: { symbol: 'dot', color: 'y' },
194
- h3: { symbol: 'circle', color: 'g' },
195
- }); });
196
- it('<empty>', () => { test.value(parseTextMarkers('')).is({}); });
197
- it('<blank>', () => { test.value(parseTextMarkers(' ')).is({}); });
198
-
199
- it('Wrong square', () => { test.value(parseTextMarkers('RHg9,Yxe1')).is({ e1: { symbol: 'x', color: 'y' } }); });
200
- it('Duplicated square', () => { test.value(parseTextMarkers('Rka3,Gba3')).is({ a3: { symbol: 'b', color: 'g' } }); });
201
- it('Wrong color', () => { test.value(parseTextMarkers('G3a6,CAg5')).is({ a6: { symbol: '3', color: 'g' } }); });
202
- it('Wrong symbol', () => { test.value(parseTextMarkers('Rb2,RAg5,G.d3,Yabcde7')).is({ g5: { symbol: 'A', color: 'r' } }); });
203
- it('Wrong multi-character symbol', () => { test.value(parseTextMarkers('RZb2,Y(whatever)e4')).is({ b2: { symbol: 'Z', color: 'r' } }); });
204
- it('Wrong format', () => { test.value(parseTextMarkers('Something RHa2 invalid, Yqe4, G g3')).is({ e4: { symbol: 'q', color: 'y' } }); });
205
-
206
- it('Wrong type (not a string)', () => { test.exception(() => parseTextMarkers(42)).isInstanceOf(exception.IllegalArgument); });
207
- it('Wrong type (null)', () => { test.exception(() => parseTextMarkers(null)).isInstanceOf(exception.IllegalArgument); });
208
- it('Wrong type (undefined)', () => { test.exception(() => parseTextMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
177
+ it('RAe4', () => { test.value(parseTextMarkers('RAe4')).is({ e4: { symbol: 'A', color: 'r' } }); });
178
+ it('Gzd3,Y1h8', () => { test.value(parseTextMarkers('Gzd3,Y1h8')).is({
179
+ h8: { symbol: '1', color: 'y' },
180
+ d3: { symbol: 'z', color: 'g' },
181
+ }); });
182
+ it('G2a1,YMc5,RLd2,Rxh7,Bwh8', () => { test.value(parseTextMarkers(' G2a1, Rxh7 ,YMc5 ,RLd2,Bwh8 ')).is({
183
+ c5: { symbol: 'M', color: 'y' },
184
+ h8: { symbol: 'w', color: 'b' },
185
+ a1: { symbol: '2', color: 'g' },
186
+ h7: { symbol: 'x', color: 'r' },
187
+ d2: { symbol: 'L', color: 'r' },
188
+ }); });
189
+ it('Multi-character symbols', () => { test.value(parseTextMarkers('YAa1,G(plus)a7, R(times)b3 ,Y(dot)g5,G(circle)h3')).is({
190
+ a1: { symbol: 'A', color: 'y' },
191
+ a7: { symbol: 'plus', color: 'g' },
192
+ b3: { symbol: 'times', color: 'r' },
193
+ g5: { symbol: 'dot', color: 'y' },
194
+ h3: { symbol: 'circle', color: 'g' },
195
+ }); });
196
+ it('<empty>', () => { test.value(parseTextMarkers('')).is({}); });
197
+ it('<blank>', () => { test.value(parseTextMarkers(' ')).is({}); });
198
+
199
+ it('Wrong square', () => { test.value(parseTextMarkers('RHg9,Yxe1')).is({ e1: { symbol: 'x', color: 'y' } }); });
200
+ it('Duplicated square', () => { test.value(parseTextMarkers('Rka3,Gba3')).is({ a3: { symbol: 'b', color: 'g' } }); });
201
+ it('Wrong color', () => { test.value(parseTextMarkers('G3a6,CAg5')).is({ a6: { symbol: '3', color: 'g' } }); });
202
+ it('Wrong symbol', () => { test.value(parseTextMarkers('Rb2,RAg5,G.d3,Yabcde7')).is({ g5: { symbol: 'A', color: 'r' } }); });
203
+ it('Wrong multi-character symbol', () => { test.value(parseTextMarkers('RZb2,Y(whatever)e4')).is({ b2: { symbol: 'Z', color: 'r' } }); });
204
+ it('Wrong format', () => { test.value(parseTextMarkers('Something RHa2 invalid, Yqe4, G g3')).is({ e4: { symbol: 'q', color: 'y' } }); });
205
+
206
+ it('Wrong type (not a string)', () => { test.exception(() => parseTextMarkers(42)).isInstanceOf(exception.IllegalArgument); });
207
+ it('Wrong type (null)', () => { test.exception(() => parseTextMarkers(null)).isInstanceOf(exception.IllegalArgument); });
208
+ it('Wrong type (undefined)', () => { test.exception(() => parseTextMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
209
209
  });
210
210
 
211
211
 
212
212
  describe('Flatten arrow markers', () => {
213
213
 
214
- it('Re4d6', () => { test.value(flattenArrowMarkers({ e4d6: 'r' })).is('Re4d6'); });
215
- it('Gd3b4,Yh8h7', () => { test.value(flattenArrowMarkers({ h8h7: 'y', d3b4: 'g' })).is('Gd3b4,Yh8h7'); });
216
- it('Ga1h8,Yc5a1,Rd2d2,Rh7h8,Bh8c5', () => { test.value(flattenArrowMarkers({ c5a1: 'y', h8c5: 'b', a1h8: 'g', h7h8: 'r', d2d2: 'r' }))
217
- .is('Ga1h8,Yc5a1,Rd2d2,Rh7h8,Bh8c5'); });
218
- it('<empty>', () => { test.value(flattenArrowMarkers({})).is(''); });
214
+ it('Re4d6', () => { test.value(flattenArrowMarkers({ e4d6: 'r' })).is('Re4d6'); });
215
+ it('Gd3b4,Yh8h7', () => { test.value(flattenArrowMarkers({ h8h7: 'y', d3b4: 'g' })).is('Gd3b4,Yh8h7'); });
216
+ it('Ga1h8,Yc5a1,Rd2d2,Rh7h8,Bh8c5', () => { test.value(flattenArrowMarkers({ c5a1: 'y', h8c5: 'b', a1h8: 'g', h7h8: 'r', d2d2: 'r' }))
217
+ .is('Ga1h8,Yc5a1,Rd2d2,Rh7h8,Bh8c5'); });
218
+ it('<empty>', () => { test.value(flattenArrowMarkers({})).is(''); });
219
219
 
220
- it('Wrong vector', () => { test.value(flattenArrowMarkers({ e1c2: 'r', a1b9: 'g', c0d2: 'r', i3d4: 'r', f2k3: 'g', whatever: 'y' })).is('Re1c2'); });
221
- it('Wrong color', () => { test.value(flattenArrowMarkers({ a2b3: 'g', b5c1: 'R', c4d8: 42, h8g1: 'yellow' })).is('Ga2b3'); });
220
+ it('Wrong vector', () => { test.value(flattenArrowMarkers({ e1c2: 'r', a1b9: 'g', c0d2: 'r', i3d4: 'r', f2k3: 'g', whatever: 'y' })).is('Re1c2'); });
221
+ it('Wrong color', () => { test.value(flattenArrowMarkers({ a2b3: 'g', b5c1: 'R', c4d8: 42, h8g1: 'yellow' })).is('Ga2b3'); });
222
222
 
223
- it('Wrong type (not an object)', () => { test.exception(() => flattenArrowMarkers('whatever')).isInstanceOf(exception.IllegalArgument); });
224
- it('Wrong type (null)', () => { test.exception(() => flattenArrowMarkers(null)).isInstanceOf(exception.IllegalArgument); });
225
- it('Wrong type (undefined)', () => { test.exception(() => flattenArrowMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
223
+ it('Wrong type (not an object)', () => { test.exception(() => flattenArrowMarkers('whatever')).isInstanceOf(exception.IllegalArgument); });
224
+ it('Wrong type (null)', () => { test.exception(() => flattenArrowMarkers(null)).isInstanceOf(exception.IllegalArgument); });
225
+ it('Wrong type (undefined)', () => { test.exception(() => flattenArrowMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
226
226
  });
227
227
 
228
228
 
229
229
  describe('Parse arrow markers', () => {
230
230
 
231
- it('Re4d6', () => { test.value(parseArrowMarkers('Re4d6')).is({ e4d6: 'r' }); });
232
- it('Gd3b4,Yh8h7', () => { test.value(parseArrowMarkers('Gd3b4,Yh8h7')).is({ h8h7: 'y', d3b4: 'g' }); });
233
- it('Ga1h8,Yc5a1,Rd2d2,Rh7h8,Bh8c5', () => { test.value(parseArrowMarkers(' Bh8c5,Ga1h8 , Yc5a1 , Rd2d2,Rh7h8 '))
234
- .is({ c5a1: 'y', h8c5: 'b', a1h8: 'g', h7h8: 'r', d2d2: 'r' }); });
235
- it('<empty>', () => { test.value(parseArrowMarkers('')).is({}); });
236
- it('<blank>', () => { test.value(parseArrowMarkers(' ')).is({}); });
237
-
238
- it('Wrong vector', () => { test.value(parseArrowMarkers('Re1c2,Ga1b9,Rc0d2,Ri3d4,Gf2k3')).is({ e1c2: 'r' }); });
239
- it('Duplicated vector', () => { test.value(parseArrowMarkers('Ya3b4,Ra3b4')).is({ a3b4: 'r' }); });
240
- it('Wrong color', () => { test.value(parseArrowMarkers('Ga6c5,Cg5e2')).is({ a6c5: 'g' }); });
241
- it('Wrong format', () => { test.value(parseArrowMarkers('Something Rb1a2 invalid, Ye4c7, G g3b1')).is({ e4c7: 'y' }); });
242
-
243
- it('Wrong type (not a string)', () => { test.exception(() => parseArrowMarkers(42)).isInstanceOf(exception.IllegalArgument); });
244
- it('Wrong type (null)', () => { test.exception(() => parseArrowMarkers(null)).isInstanceOf(exception.IllegalArgument); });
245
- it('Wrong type (undefined)', () => { test.exception(() => parseArrowMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
231
+ it('Re4d6', () => { test.value(parseArrowMarkers('Re4d6')).is({ e4d6: 'r' }); });
232
+ it('Gd3b4,Yh8h7', () => { test.value(parseArrowMarkers('Gd3b4,Yh8h7')).is({ h8h7: 'y', d3b4: 'g' }); });
233
+ it('Ga1h8,Yc5a1,Rd2d2,Rh7h8,Bh8c5', () => { test.value(parseArrowMarkers(' Bh8c5,Ga1h8 , Yc5a1 , Rd2d2,Rh7h8 '))
234
+ .is({ c5a1: 'y', h8c5: 'b', a1h8: 'g', h7h8: 'r', d2d2: 'r' }); });
235
+ it('<empty>', () => { test.value(parseArrowMarkers('')).is({}); });
236
+ it('<blank>', () => { test.value(parseArrowMarkers(' ')).is({}); });
237
+
238
+ it('Wrong vector', () => { test.value(parseArrowMarkers('Re1c2,Ga1b9,Rc0d2,Ri3d4,Gf2k3')).is({ e1c2: 'r' }); });
239
+ it('Duplicated vector', () => { test.value(parseArrowMarkers('Ya3b4,Ra3b4')).is({ a3b4: 'r' }); });
240
+ it('Wrong color', () => { test.value(parseArrowMarkers('Ga6c5,Cg5e2')).is({ a6c5: 'g' }); });
241
+ it('Wrong format', () => { test.value(parseArrowMarkers('Something Rb1a2 invalid, Ye4c7, G g3b1')).is({ e4c7: 'y' }); });
242
+
243
+ it('Wrong type (not a string)', () => { test.exception(() => parseArrowMarkers(42)).isInstanceOf(exception.IllegalArgument); });
244
+ it('Wrong type (null)', () => { test.exception(() => parseArrowMarkers(null)).isInstanceOf(exception.IllegalArgument); });
245
+ it('Wrong type (undefined)', () => { test.exception(() => parseArrowMarkers(undefined)).isInstanceOf(exception.IllegalArgument); });
246
246
  });