jqtree 1.5.2 → 1.6.2

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 (174) hide show
  1. package/.eslintrc +1 -0
  2. package/.github/workflows/ci.yml +54 -0
  3. package/.github/workflows/codeql-analysis.yml +28 -0
  4. package/README.md +1 -1
  5. package/_config.yml +1 -1
  6. package/_entries/10_changelog.md +20 -0
  7. package/_entries/{36_showemptynode.md → 36_showemptyfolder.md} +5 -5
  8. package/_entries/38_start_dnd_delay.md +13 -0
  9. package/_entries/{38_tabindex.md → 39_tabindex.md} +0 -0
  10. package/_entries/{39_usecontextmenu.md → 40_usecontextmenu.md} +0 -0
  11. package/_entries/{40_functions.md → 41_functions.md} +0 -0
  12. package/_entries/{41_addparentnode.md → 42_addparentnode.md} +0 -0
  13. package/_entries/{42_addnodeafter.md → 43_addnodeafter.md} +0 -0
  14. package/_entries/{43_addnodebefore.md → 44_addnodebefore.md} +0 -0
  15. package/_entries/{44_appendnode.md → 45_appendnode.md} +0 -0
  16. package/_entries/{45_closenode.md → 46_closenode.md} +0 -0
  17. package/_entries/{46_destroy.md → 47_destroy.md} +0 -0
  18. package/_entries/{47_getnodebycallback.md → 48_getnodebycallback.md} +0 -0
  19. package/_entries/{48_getnodebyid.md → 49_getnodebyid.md} +0 -0
  20. package/_entries/{49_getnodebyhtmlelement.md → 50_getnodebyhtmlelement.md} +0 -0
  21. package/_entries/{50_getselectednode.md → 51_getselectednode.md} +0 -0
  22. package/_entries/{51_getstate.md → 52_getstate.md} +0 -0
  23. package/_entries/{52_gettree.md → 53_gettree.md} +0 -0
  24. package/_entries/{53_isdragging.md → 54_isdragging.md} +0 -0
  25. package/_entries/{54_loaddata.md → 55_loaddata.md} +0 -0
  26. package/_entries/{55_loaddatafromurl.md → 56_loaddatafromurl.md} +0 -0
  27. package/_entries/{56_movedown.md → 57_movedown.md} +0 -0
  28. package/_entries/{57_movenode.md → 58_movenode.md} +0 -0
  29. package/_entries/{58_moveup.md → 59_moveup.md} +0 -0
  30. package/_entries/{59_opennode.md → 60_opennode.md} +0 -0
  31. package/_entries/{60_prependnode.md → 61_prependnode.md} +0 -0
  32. package/_entries/62_refresh.md +12 -0
  33. package/_entries/{61_reload.md → 63_reload.md} +0 -0
  34. package/_entries/{62_removenode.md → 64_removenode.md} +0 -0
  35. package/_entries/{63_selectnode.md → 65_selectnode.md} +0 -0
  36. package/_entries/{64_scrolltonode.md → 66_scrolltonode.md} +0 -0
  37. package/_entries/{65_setoption.md → 67_setoption.md} +0 -0
  38. package/_entries/{66_setstate.md → 68_setstate.md} +0 -0
  39. package/_entries/{67_toggle.md → 69_toggle.md} +0 -0
  40. package/_entries/{68_tojson.md → 70_tojson.md} +0 -0
  41. package/_entries/{69_updatenode.md → 71_updatenode.md} +0 -0
  42. package/_entries/{70_events.md → 72_events.md} +0 -0
  43. package/_entries/{71_tree-click.md → 73_tree-click.md} +0 -0
  44. package/_entries/{72_tree-close.md → 74_tree-close.md} +0 -0
  45. package/_entries/{73_tree-contextmenu.md → 75_tree-contextmenu.md} +0 -0
  46. package/_entries/{74_tree-dblclick.md → 76_tree-dblclick.md} +0 -0
  47. package/_entries/{75_tree-init.md → 77_tree-init.md} +0 -0
  48. package/_entries/{76_tree-load-data.md → 78_tree-load-data.md} +0 -0
  49. package/_entries/{77_tree-loading-data.md → 79_tree-loading-data.md} +0 -0
  50. package/_entries/{78_tree-move.md → 80_tree-move.md} +0 -0
  51. package/_entries/{79_tree-refresh.md → 81_tree-refresh.md} +0 -0
  52. package/_entries/{80_tree-open.md → 82_tree-open.md} +0 -0
  53. package/_entries/{81_tree-select.md → 83_tree-select.md} +0 -0
  54. package/_entries/{82_multiple-selection.md → 84_multiple-selection.md} +0 -0
  55. package/_entries/{83_add-to-selection.md → 85_add-to-selection.md} +0 -0
  56. package/_entries/{84_get-selected-nodes.md → 86_get-selected-nodes.md} +0 -0
  57. package/_entries/{85_is-node-selected.md → 87_is-node-selected.md} +0 -0
  58. package/_entries/{86_remove-from-selection.md → 88_remove-from-selection.md} +0 -0
  59. package/_entries/{87_node-functions.md → 89_node-functions.md} +0 -0
  60. package/_entries/{88_children.md → 90_children.md} +0 -0
  61. package/_entries/{89_getdata.md → 91_getdata.md} +0 -0
  62. package/_entries/{90_getlevel.md → 92_getlevel.md} +0 -0
  63. package/_entries/{91_getnextnode.md → 93_getnextnode.md} +0 -0
  64. package/_entries/{92_getnextsibling.md → 94_getnextsibling.md} +0 -0
  65. package/_entries/{93_getpreviousnode.md → 95_getpreviousnode.md} +0 -0
  66. package/_entries/{94_getprevioussibling.md → 96_getprevioussibling.md} +0 -0
  67. package/_entries/{95_parent.md → 97_parent.md} +0 -0
  68. package/_examples/13_drag_outside.html +2 -1
  69. package/_examples/14_filter.html +113 -0
  70. package/_layouts/base.html +1 -23
  71. package/babel.config.json +11 -0
  72. package/babel.coverage.config.json +4 -0
  73. package/bower.json +1 -1
  74. package/jest-browser.config.js +0 -3
  75. package/jest-jsdom.config.js +1 -2
  76. package/jqtree.css +4 -1
  77. package/jqtree.postcss +3 -0
  78. package/lib/dataLoader.js +146 -98
  79. package/lib/dragAndDropHandler.js +668 -470
  80. package/lib/elementsRenderer.js +282 -197
  81. package/lib/jqtreeOptions.js +1 -2
  82. package/lib/keyHandler.js +134 -87
  83. package/lib/mouse.widget.js +288 -165
  84. package/lib/node.js +693 -505
  85. package/lib/nodeElement.js +329 -205
  86. package/lib/playwright/playwright.test.js +216 -189
  87. package/lib/playwright/testUtil.js +437 -192
  88. package/lib/playwright/visualRegression.js +183 -117
  89. package/lib/saveStateHandler.js +311 -204
  90. package/lib/scrollHandler.js +293 -199
  91. package/lib/selectNodeHandler.js +140 -105
  92. package/lib/simple.widget.js +184 -109
  93. package/lib/test/global.d.js +3 -0
  94. package/lib/test/jqTree/create.test.js +44 -40
  95. package/lib/test/jqTree/events.test.js +185 -138
  96. package/lib/test/jqTree/keyboard.test.js +216 -199
  97. package/lib/test/jqTree/loadOnDemand.test.js +233 -157
  98. package/lib/test/jqTree/methods.test.js +1269 -1000
  99. package/lib/test/jqTree/options.test.js +467 -398
  100. package/lib/test/node.test.js +1036 -873
  101. package/lib/test/nodeUtil.test.js +21 -20
  102. package/lib/test/support/exampleData.js +35 -23
  103. package/lib/test/support/jqTreeMatchers.js +72 -54
  104. package/lib/test/support/matchers.d.js +1 -0
  105. package/lib/test/support/setupTests.js +9 -3
  106. package/lib/test/support/testUtil.js +38 -15
  107. package/lib/test/support/treeStructure.js +41 -32
  108. package/lib/test/util.test.js +21 -20
  109. package/lib/tree.jquery.d.js +1 -0
  110. package/lib/tree.jquery.js +1264 -883
  111. package/lib/types.js +1 -2
  112. package/lib/typings.d.js +2 -0
  113. package/lib/util.js +21 -7
  114. package/lib/version.js +8 -3
  115. package/package.json +43 -36
  116. package/production +4 -4
  117. package/rollup.config.js +16 -11
  118. package/src/dataLoader.ts +6 -6
  119. package/src/dragAndDropHandler.ts +0 -4
  120. package/src/elementsRenderer.ts +4 -0
  121. package/src/jqtreeOptions.ts +33 -32
  122. package/src/mouse.widget.ts +58 -29
  123. package/src/node.ts +32 -46
  124. package/src/nodeElement.ts +17 -9
  125. package/src/playwright/.eslintrc +5 -0
  126. package/src/playwright/playwright.test.ts +30 -30
  127. package/src/playwright/testUtil.ts +36 -37
  128. package/src/saveStateHandler.ts +11 -6
  129. package/src/selectNodeHandler.ts +14 -21
  130. package/src/simple.widget.ts +1 -1
  131. package/src/test/.eslintrc +4 -0
  132. package/src/test/jqTree/create.test.ts +0 -1
  133. package/src/test/jqTree/events.test.ts +12 -13
  134. package/src/test/jqTree/keyboard.test.ts +0 -1
  135. package/src/test/jqTree/loadOnDemand.test.ts +46 -1
  136. package/src/test/jqTree/methods.test.ts +67 -18
  137. package/src/test/jqTree/options.test.ts +5 -6
  138. package/src/test/node.test.ts +2 -2
  139. package/src/test/support/jqTreeMatchers.ts +8 -9
  140. package/src/test/support/matchers.d.ts +2 -4
  141. package/src/test/support/setupTests.ts +2 -1
  142. package/src/tree.jquery.d.ts +19 -13
  143. package/src/tree.jquery.ts +63 -57
  144. package/src/version.ts +1 -1
  145. package/static/bower.json +3 -3
  146. package/static/bower_components/fontawesome/css/all.min.css +2 -2
  147. package/static/bower_components/fontawesome/webfonts/fa-brands-400.eot +0 -0
  148. package/static/bower_components/fontawesome/webfonts/fa-brands-400.svg +774 -627
  149. package/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  150. package/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
  151. package/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  152. package/static/bower_components/fontawesome/webfonts/fa-regular-400.eot +0 -0
  153. package/static/bower_components/fontawesome/webfonts/fa-regular-400.svg +93 -95
  154. package/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  155. package/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
  156. package/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  157. package/static/bower_components/fontawesome/webfonts/fa-solid-900.eot +0 -0
  158. package/static/bower_components/fontawesome/webfonts/fa-solid-900.svg +1164 -1074
  159. package/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  160. package/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
  161. package/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  162. package/static/bower_components/jquery/dist/jquery.js +118 -109
  163. package/static/bower_components/jquery/dist/jquery.min.js +2 -2
  164. package/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js +15 -9
  165. package/static/example.css +13 -0
  166. package/static/example.postcss +13 -0
  167. package/static/example_data.js +33 -36
  168. package/static/examples/filter.js +63 -0
  169. package/tree.jquery.debug.js +4809 -3305
  170. package/tree.jquery.debug.js.map +1 -1
  171. package/tree.jquery.js +3 -3
  172. package/tree.jquery.js.map +1 -1
  173. package/tsconfig.json +1 -0
  174. package/.travis.yml +0 -18
@@ -1,214 +1,231 @@
1
1
  "use strict";
2
- exports.__esModule = true;
3
- var $ = require("jquery");
4
- var givens_1 = require("givens");
2
+
3
+ var _givens = _interopRequireDefault(require("givens"));
4
+
5
5
  require("../../tree.jquery");
6
- var exampleData_1 = require("../support/exampleData");
6
+
7
+ var _exampleData = _interopRequireDefault(require("../support/exampleData"));
8
+
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
10
+
7
11
  var context = describe;
8
12
  beforeEach(function () {
9
- $("body").append('<div id="tree1"></div>');
13
+ $("body").append('<div id="tree1"></div>');
10
14
  });
11
15
  afterEach(function () {
12
- var $tree = $("#tree1");
13
- $tree.tree("destroy");
14
- $tree.remove();
16
+ var $tree = $("#tree1");
17
+ $tree.tree("destroy");
18
+ $tree.remove();
15
19
  });
16
20
  describe("keyboard support", function () {
17
- var KEY_DOWN = 40;
18
- var KEY_LEFT = 37;
19
- var KEY_RIGHT = 39;
20
- var KEY_UP = 38;
21
- var KEY_PAGE_UP = 33;
22
- var given = givens_1["default"]();
23
- given("autoOpen", function () { return false; });
24
- given("initialSelectedNode", function () { return null; });
25
- given("$tree", function () { return $("#tree1"); });
26
- beforeEach(function () {
27
- given.$tree.tree({
28
- animationSpeed: 0,
29
- autoOpen: given.autoOpen,
30
- data: exampleData_1["default"]
31
- });
32
- if (given.initialSelectedNode) {
33
- given.$tree.tree("selectNode", given.initialSelectedNode);
34
- }
35
- given.$tree.trigger($.Event("keydown", { which: given.pressedKey }));
36
- });
37
- context("with key down", function () {
38
- given("pressedKey", function () { return KEY_DOWN; });
39
- context("when a node is selected", function () {
40
- given("initialSelectedNode", function () {
41
- return given.$tree.tree("getNodeByNameMustExist", "node1");
42
- });
43
- it("selects the next node", function () {
44
- expect(given.$tree).toHaveTreeStructure([
45
- expect.objectContaining({ name: "node1", selected: false }),
46
- expect.objectContaining({ name: "node2", selected: true }),
47
- ]);
48
- });
49
- });
50
- context("when no node is selected", function () {
51
- it("does nothing", function () {
52
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
53
- });
54
- });
55
- context("when the last node is selected", function () {
56
- given("initialSelectedNode", function () {
57
- return given.$tree.tree("getNodeByNameMustExist", "node2");
58
- });
59
- it("keeps the node selected", function () {
60
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
61
- name: "node2"
62
- });
63
- });
64
- });
21
+ var KEY_DOWN = 40;
22
+ var KEY_LEFT = 37;
23
+ var KEY_RIGHT = 39;
24
+ var KEY_UP = 38;
25
+ var KEY_PAGE_UP = 33;
26
+ var given = (0, _givens["default"])();
27
+ given("autoOpen", function () {
28
+ return false;
29
+ });
30
+ given("initialSelectedNode", function () {
31
+ return null;
32
+ });
33
+ given("$tree", function () {
34
+ return $("#tree1");
35
+ });
36
+ beforeEach(function () {
37
+ given.$tree.tree({
38
+ animationSpeed: 0,
39
+ autoOpen: given.autoOpen,
40
+ data: _exampleData["default"]
65
41
  });
66
- context("with key up", function () {
67
- given("pressedKey", function () { return KEY_UP; });
68
- context("when a node is selected", function () {
69
- given("initialSelectedNode", function () {
70
- return given.$tree.tree("getNodeByNameMustExist", "node2");
71
- });
72
- it("selects the next node", function () {
73
- expect(given.$tree).toHaveTreeStructure([
74
- expect.objectContaining({ name: "node1", selected: true }),
75
- expect.objectContaining({ name: "node2", selected: false }),
76
- ]);
77
- });
78
- });
79
- context("when no node is selected", function () {
80
- it("does nothing", function () {
81
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
82
- });
83
- });
42
+
43
+ if (given.initialSelectedNode) {
44
+ given.$tree.tree("selectNode", given.initialSelectedNode);
45
+ }
46
+
47
+ given.$tree.trigger($.Event("keydown", {
48
+ which: given.pressedKey
49
+ }));
50
+ });
51
+ context("with key down", function () {
52
+ given("pressedKey", function () {
53
+ return KEY_DOWN;
84
54
  });
85
- context("with key right", function () {
86
- given("pressedKey", function () { return KEY_RIGHT; });
87
- context("when a closed folder is selected", function () {
88
- given("initialSelectedNode", function () {
89
- return given.$tree.tree("getNodeByNameMustExist", "node1");
90
- });
91
- it("opens the folder", function () {
92
- expect(given.$tree).toHaveTreeStructure([
93
- expect.objectContaining({
94
- name: "node1",
95
- open: true,
96
- selected: true
97
- }),
98
- expect.objectContaining({
99
- name: "node2",
100
- open: false,
101
- selected: false
102
- }),
103
- ]);
104
- });
105
- });
106
- context("when an open folder is selected", function () {
107
- given("autoOpen", function () { return true; });
108
- given("initialSelectedNode", function () {
109
- return given.$tree.tree("getNodeByNameMustExist", "node1");
110
- });
111
- it("selects the first child", function () {
112
- expect(given.$tree).toHaveTreeStructure([
113
- expect.objectContaining({
114
- name: "node1",
115
- open: true,
116
- selected: false,
117
- children: [
118
- expect.objectContaining({
119
- name: "child1",
120
- selected: true
121
- }),
122
- expect.objectContaining({
123
- name: "child2",
124
- selected: false
125
- }),
126
- ]
127
- }),
128
- expect.objectContaining({
129
- name: "node2",
130
- selected: false
131
- }),
132
- ]);
133
- });
134
- });
135
- context("when no node is selected", function () {
136
- it("does nothing", function () {
137
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
138
- });
139
- });
140
- context("when a child is selected", function () {
141
- given("initialSelectedNode", function () {
142
- return given.$tree.tree("getNodeByNameMustExist", "child1");
143
- });
144
- it("does nothing", function () {
145
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
146
- name: "child1"
147
- });
148
- });
149
- });
55
+ context("when a node is selected", function () {
56
+ given("initialSelectedNode", function () {
57
+ return given.$tree.tree("getNodeByNameMustExist", "node1");
58
+ });
59
+ it("selects the next node", function () {
60
+ expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
61
+ name: "node1",
62
+ selected: false
63
+ }), expect.objectContaining({
64
+ name: "node2",
65
+ selected: true
66
+ })]);
67
+ });
150
68
  });
151
- context("with key left", function () {
152
- given("pressedKey", function () { return KEY_LEFT; });
153
- context("when a closed folder is selected", function () {
154
- given("initialSelectedNode", function () {
155
- return given.$tree.tree("getNodeByNameMustExist", "node3");
156
- });
157
- it("selects the previous node", function () {
158
- expect(given.$tree).toHaveTreeStructure([
159
- expect.objectContaining({
160
- name: "node1",
161
- selected: false
162
- }),
163
- expect.objectContaining({
164
- name: "node2",
165
- selected: true,
166
- children: [
167
- expect.objectContaining({
168
- name: "node3",
169
- open: false,
170
- selected: false
171
- }),
172
- ]
173
- }),
174
- ]);
175
- });
176
- });
177
- context("when an open folder is selected", function () {
178
- given("autoOpen", function () { return true; });
179
- given("initialSelectedNode", function () {
180
- return given.$tree.tree("getNodeByNameMustExist", "node2");
181
- });
182
- it("closes the folder", function () {
183
- expect(given.$tree).toHaveTreeStructure([
184
- expect.objectContaining({
185
- name: "node1",
186
- open: true,
187
- selected: false
188
- }),
189
- expect.objectContaining({
190
- name: "node2",
191
- open: false,
192
- selected: true
193
- }),
194
- ]);
195
- });
196
- });
197
- context("when no node is selected", function () {
198
- it("does nothing", function () {
199
- expect(given.$tree.tree("getSelectedNode")).toBe(false);
200
- });
201
- });
69
+ context("when no node is selected", function () {
70
+ it("does nothing", function () {
71
+ expect(given.$tree.tree("getSelectedNode")).toBe(false);
72
+ });
202
73
  });
203
- context("with page up key", function () {
204
- given("pressedKey", function () { return KEY_PAGE_UP; });
205
- given("initialSelectedNode", function () {
206
- return given.$tree.tree("getNodeByNameMustExist", "child1");
74
+ context("when the last node is selected", function () {
75
+ given("initialSelectedNode", function () {
76
+ return given.$tree.tree("getNodeByNameMustExist", "node2");
77
+ });
78
+ it("keeps the node selected", function () {
79
+ expect(given.$tree.tree("getSelectedNode")).toMatchObject({
80
+ name: "node2"
207
81
  });
208
- it("does nothing", function () {
209
- expect(given.$tree.tree("getSelectedNode")).toMatchObject({
210
- name: "child1"
211
- });
82
+ });
83
+ });
84
+ });
85
+ context("with key up", function () {
86
+ given("pressedKey", function () {
87
+ return KEY_UP;
88
+ });
89
+ context("when a node is selected", function () {
90
+ given("initialSelectedNode", function () {
91
+ return given.$tree.tree("getNodeByNameMustExist", "node2");
92
+ });
93
+ it("selects the next node", function () {
94
+ expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
95
+ name: "node1",
96
+ selected: true
97
+ }), expect.objectContaining({
98
+ name: "node2",
99
+ selected: false
100
+ })]);
101
+ });
102
+ });
103
+ context("when no node is selected", function () {
104
+ it("does nothing", function () {
105
+ expect(given.$tree.tree("getSelectedNode")).toBe(false);
106
+ });
107
+ });
108
+ });
109
+ context("with key right", function () {
110
+ given("pressedKey", function () {
111
+ return KEY_RIGHT;
112
+ });
113
+ context("when a closed folder is selected", function () {
114
+ given("initialSelectedNode", function () {
115
+ return given.$tree.tree("getNodeByNameMustExist", "node1");
116
+ });
117
+ it("opens the folder", function () {
118
+ expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
119
+ name: "node1",
120
+ open: true,
121
+ selected: true
122
+ }), expect.objectContaining({
123
+ name: "node2",
124
+ open: false,
125
+ selected: false
126
+ })]);
127
+ });
128
+ });
129
+ context("when an open folder is selected", function () {
130
+ given("autoOpen", function () {
131
+ return true;
132
+ });
133
+ given("initialSelectedNode", function () {
134
+ return given.$tree.tree("getNodeByNameMustExist", "node1");
135
+ });
136
+ it("selects the first child", function () {
137
+ expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
138
+ name: "node1",
139
+ open: true,
140
+ selected: false,
141
+ children: [expect.objectContaining({
142
+ name: "child1",
143
+ selected: true
144
+ }), expect.objectContaining({
145
+ name: "child2",
146
+ selected: false
147
+ })]
148
+ }), expect.objectContaining({
149
+ name: "node2",
150
+ selected: false
151
+ })]);
152
+ });
153
+ });
154
+ context("when no node is selected", function () {
155
+ it("does nothing", function () {
156
+ expect(given.$tree.tree("getSelectedNode")).toBe(false);
157
+ });
158
+ });
159
+ context("when a child is selected", function () {
160
+ given("initialSelectedNode", function () {
161
+ return given.$tree.tree("getNodeByNameMustExist", "child1");
162
+ });
163
+ it("does nothing", function () {
164
+ expect(given.$tree.tree("getSelectedNode")).toMatchObject({
165
+ name: "child1"
212
166
  });
167
+ });
213
168
  });
214
- });
169
+ });
170
+ context("with key left", function () {
171
+ given("pressedKey", function () {
172
+ return KEY_LEFT;
173
+ });
174
+ context("when a closed folder is selected", function () {
175
+ given("initialSelectedNode", function () {
176
+ return given.$tree.tree("getNodeByNameMustExist", "node3");
177
+ });
178
+ it("selects the previous node", function () {
179
+ expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
180
+ name: "node1",
181
+ selected: false
182
+ }), expect.objectContaining({
183
+ name: "node2",
184
+ selected: true,
185
+ children: [expect.objectContaining({
186
+ name: "node3",
187
+ open: false,
188
+ selected: false
189
+ })]
190
+ })]);
191
+ });
192
+ });
193
+ context("when an open folder is selected", function () {
194
+ given("autoOpen", function () {
195
+ return true;
196
+ });
197
+ given("initialSelectedNode", function () {
198
+ return given.$tree.tree("getNodeByNameMustExist", "node2");
199
+ });
200
+ it("closes the folder", function () {
201
+ expect(given.$tree).toHaveTreeStructure([expect.objectContaining({
202
+ name: "node1",
203
+ open: true,
204
+ selected: false
205
+ }), expect.objectContaining({
206
+ name: "node2",
207
+ open: false,
208
+ selected: true
209
+ })]);
210
+ });
211
+ });
212
+ context("when no node is selected", function () {
213
+ it("does nothing", function () {
214
+ expect(given.$tree.tree("getSelectedNode")).toBe(false);
215
+ });
216
+ });
217
+ });
218
+ context("with page up key", function () {
219
+ given("pressedKey", function () {
220
+ return KEY_PAGE_UP;
221
+ });
222
+ given("initialSelectedNode", function () {
223
+ return given.$tree.tree("getNodeByNameMustExist", "child1");
224
+ });
225
+ it("does nothing", function () {
226
+ expect(given.$tree.tree("getSelectedNode")).toMatchObject({
227
+ name: "child1"
228
+ });
229
+ });
230
+ });
231
+ });