|
1 | 1 | import {expect, fixture, html} from '@open-wc/testing'; |
2 | | -import {findLastChildItem, findPrevItem} from './helpers'; |
| 2 | +import {findLastChildItem, findNextItem, findPrevItem} from './helpers'; |
3 | 3 | import {VscodeTreeItem} from '../vscode-tree-item'; |
4 | 4 | import '../vscode-tree-item/vscode-tree-item.js'; |
5 | 5 | import {VscodeTree} from './vscode-tree'; |
@@ -66,7 +66,7 @@ describe('vscode-tree helpers', () => { |
66 | 66 | expect(findPrevItem(item2)).to.eq(item1); |
67 | 67 | }); |
68 | 68 |
|
69 | | - it('returns last children of the opened branch', async () => { |
| 69 | + it('returns last child of the opened branch', async () => { |
70 | 70 | const el = await fixture<VscodeTree>(html` |
71 | 71 | <vscode-tree> |
72 | 72 | <vscode-tree-item id="item1" open> |
@@ -114,16 +114,135 @@ describe('vscode-tree helpers', () => { |
114 | 114 | <vscode-tree-item id="item1" open> |
115 | 115 | 1 |
116 | 116 | <vscode-tree-item>1.1</vscode-tree-item> |
117 | | - <vscode-tree-item id="item1_2">1.2</vscode-tree-item> |
| 117 | + <vscode-tree-item>1.2</vscode-tree-item> |
| 118 | + <vscode-tree-item open> |
| 119 | + 1.3 |
| 120 | + <vscode-tree-item>1.3.1</vscode-tree-item> |
| 121 | + <vscode-tree-item>1.3.2</vscode-tree-item> |
| 122 | + <vscode-tree-item id="item1_3_3">1.3.3</vscode-tree-item> |
| 123 | + </vscode-tree-item> |
118 | 124 | </vscode-tree-item> |
119 | 125 | <vscode-tree-item>2</vscode-tree-item> |
120 | 126 | </vscode-tree> |
121 | 127 | `); |
122 | 128 |
|
123 | 129 | const item1 = el.querySelector<VscodeTreeItem>('#item1')!; |
124 | | - const item1_2 = el.querySelector<VscodeTreeItem>('#item1_2')!; |
| 130 | + const item1_3_3 = el.querySelector<VscodeTreeItem>('#item1_3_3')!; |
| 131 | + |
| 132 | + expect(findLastChildItem(item1)).to.eq(item1_3_3); |
| 133 | + }); |
| 134 | + |
| 135 | + it('does not traverse the closed branches', async () => { |
| 136 | + const el = await fixture(html` |
| 137 | + <vscode-tree> |
| 138 | + <vscode-tree-item id="item1" open> |
| 139 | + 1 |
| 140 | + <vscode-tree-item>1.1</vscode-tree-item> |
| 141 | + <vscode-tree-item>1.2</vscode-tree-item> |
| 142 | + <vscode-tree-item id="item1_3"> |
| 143 | + 1.3 |
| 144 | + <vscode-tree-item>1.3.1</vscode-tree-item> |
| 145 | + <vscode-tree-item>1.3.2</vscode-tree-item> |
| 146 | + <vscode-tree-item>1.3.3</vscode-tree-item> |
| 147 | + </vscode-tree-item> |
| 148 | + </vscode-tree-item> |
| 149 | + <vscode-tree-item>2</vscode-tree-item> |
| 150 | + </vscode-tree> |
| 151 | + `); |
| 152 | + |
| 153 | + const item1 = el.querySelector<VscodeTreeItem>('#item1')!; |
| 154 | + const item1_3 = el.querySelector<VscodeTreeItem>('#item1_3')!; |
| 155 | + |
| 156 | + expect(findLastChildItem(item1)).to.eq(item1_3); |
| 157 | + }); |
| 158 | + |
| 159 | + it('returns the passed item if it is not a tree-item', async () => { |
| 160 | + const el = await fixture(html`<div></div>`); |
| 161 | + |
| 162 | + expect(findLastChildItem(el as VscodeTreeItem)).to.eq(el); |
| 163 | + }); |
| 164 | + |
| 165 | + it('returns the passed item if it does not have a child', async () => { |
| 166 | + await fixture( |
| 167 | + html` <vscode-tree> |
| 168 | + <vscode-tree-item id="leaf">leaf</vscode-tree-item> |
| 169 | + </vscode-tree>` |
| 170 | + ); |
| 171 | + |
| 172 | + const item = document.getElementById('leaf')! as VscodeTreeItem; |
| 173 | + |
| 174 | + expect(findLastChildItem(item)).to.eq(item); |
| 175 | + }); |
| 176 | + }); |
| 177 | + |
| 178 | + describe('findNextItem()', () => { |
| 179 | + it('returns null if does not have parent element', () => { |
| 180 | + const el = document.createElement('vscode-tree-item'); |
| 181 | + |
| 182 | + expect(findNextItem(el)).to.be.null; |
| 183 | + }); |
| 184 | + |
| 185 | + it('returns null if it is not a tree item', async () => { |
| 186 | + const el = await fixture( |
| 187 | + html`<vscode-tree><div id="item"></div></vscode-tree>` |
| 188 | + ); |
| 189 | + |
| 190 | + expect(findNextItem(el.querySelector('#item') as VscodeTreeItem)).to.be |
| 191 | + .null; |
| 192 | + }); |
| 193 | + |
| 194 | + it('returns last children of the opened branch', async () => { |
| 195 | + const el = await fixture<VscodeTree>(html` |
| 196 | + <vscode-tree> |
| 197 | + <vscode-tree-item id="item1" open> |
| 198 | + 1 |
| 199 | + <vscode-tree-item id="item1_1">1.1</vscode-tree-item> |
| 200 | + <vscode-tree-item>1.2</vscode-tree-item> |
| 201 | + </vscode-tree-item> |
| 202 | + <vscode-tree-item>2</vscode-tree-item> |
| 203 | + </vscode-tree> |
| 204 | + `); |
| 205 | + |
| 206 | + const item1 = el.querySelector<VscodeTreeItem>('#item1')!; |
| 207 | + const item1_1 = el.querySelector<VscodeTreeItem>('#item1_1')!; |
| 208 | + |
| 209 | + expect(findNextItem(item1)).to.eq(item1_1); |
| 210 | + }); |
| 211 | + |
| 212 | + it('returns the next sibling if the opened branch does not contain any item', async () => { |
| 213 | + const el = await fixture<VscodeTree>(html` |
| 214 | + <vscode-tree> |
| 215 | + <vscode-tree-item id="item1" open>1</vscode-tree-item> |
| 216 | + <vscode-tree-item id="item2">2</vscode-tree-item> |
| 217 | + </vscode-tree> |
| 218 | + `); |
| 219 | + |
| 220 | + const item1 = el.querySelector<VscodeTreeItem>('#item1')!; |
| 221 | + const item2 = el.querySelector<VscodeTreeItem>('#item2')!; |
| 222 | + |
| 223 | + expect(findNextItem(item1)).to.eq(item2); |
| 224 | + }); |
| 225 | + |
| 226 | + it('returns the next ancestor', async () => { |
| 227 | + const el = await fixture<VscodeTree>(html` |
| 228 | + <vscode-tree> |
| 229 | + <vscode-tree-item open> |
| 230 | + 1 |
| 231 | + <vscode-tree-item> |
| 232 | + 1.1 |
| 233 | + <vscode-tree-item id="item1_1_1"> |
| 234 | + 1.1.1 |
| 235 | + </vscode-tree-item> |
| 236 | + </vscode-tree-item> |
| 237 | + </vscode-tree-item> |
| 238 | + <vscode-tree-item id="item2">2</vscode-tree-item> |
| 239 | + </vscode-tree> |
| 240 | + `); |
| 241 | + |
| 242 | + const item1_1_1 = el.querySelector<VscodeTreeItem>('#item1_1_1')!; |
| 243 | + const item2 = el.querySelector<VscodeTreeItem>('#item2')!; |
125 | 244 |
|
126 | | - expect(findLastChildItem(item1)).to.eq(item1_2); |
| 245 | + expect(findNextItem(item1_1_1)).to.eq(item2); |
127 | 246 | }); |
128 | 247 | }); |
129 | 248 | }); |
0 commit comments