Skip to content

Commit 2f12aed

Browse files
committed
more test for uri tst, fix query, fragmen compare
1 parent f43d8bc commit 2f12aed

2 files changed

Lines changed: 100 additions & 4 deletions

File tree

src/vs/base/common/map.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import { URI } from 'vs/base/common/uri';
77
import { CharCode } from 'vs/base/common/charCode';
8-
import { compareIgnoreCase } from 'vs/base/common/strings';
8+
import { compareIgnoreCase, compare } from 'vs/base/common/strings';
99

1010
/**
1111
* @deprecated ES6: use `[...SetOrMap.values()]`
@@ -184,8 +184,10 @@ export class UriIterator implements IKeyIterator<URI> {
184184
this._states.push(UriIteratorState.Authority);
185185
}
186186
if (this._value.path) {
187-
this._states.push(UriIteratorState.Path);
188187
this._pathIterator.reset(key.path);
188+
if (this._pathIterator.value()) {
189+
this._states.push(UriIteratorState.Path);
190+
}
189191
}
190192
if (this._value.query) {
191193
this._states.push(UriIteratorState.Query);
@@ -219,9 +221,9 @@ export class UriIterator implements IKeyIterator<URI> {
219221
} else if (this._states[this._stateIdx] === UriIteratorState.Path) {
220222
return this._pathIterator.cmp(a);
221223
} else if (this._states[this._stateIdx] === UriIteratorState.Query) {
222-
return compareIgnoreCase(a, this._value.query);
224+
return compare(a, this._value.query);
223225
} else if (this._states[this._stateIdx] === UriIteratorState.Fragment) {
224-
return compareIgnoreCase(a, this._value.fragment);
226+
return compare(a, this._value.fragment);
225227
}
226228
throw new Error();
227229
}

src/vs/base/test/common/map.test.ts

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,100 @@ suite('Map', () => {
550550
assert.equal(map.findSuperstr('/userr'), undefined);
551551
});
552552

553+
554+
test('TernarySearchTree (URI) - basics', function () {
555+
let trie = new TernarySearchTree<URI, number>(new UriIterator());
556+
557+
trie.set(URI.file('/user/foo/bar'), 1);
558+
trie.set(URI.file('/user/foo'), 2);
559+
trie.set(URI.file('/user/foo/flip/flop'), 3);
560+
561+
assert.equal(trie.get(URI.file('/user/foo/bar')), 1);
562+
assert.equal(trie.get(URI.file('/user/foo')), 2);
563+
assert.equal(trie.get(URI.file('/user/foo/flip/flop')), 3);
564+
565+
assert.equal(trie.findSubstr(URI.file('/user/bar')), undefined);
566+
assert.equal(trie.findSubstr(URI.file('/user/foo')), 2);
567+
assert.equal(trie.findSubstr(URI.file('/user/foo/ba')), 2);
568+
assert.equal(trie.findSubstr(URI.file('/user/foo/far/boo')), 2);
569+
assert.equal(trie.findSubstr(URI.file('/user/foo/bar')), 1);
570+
assert.equal(trie.findSubstr(URI.file('/user/foo/bar/far/boo')), 1);
571+
});
572+
573+
test('TernarySearchTree (URI) - lookup', function () {
574+
575+
const map = new TernarySearchTree<URI, number>(new UriIterator());
576+
map.set(URI.parse('http://foo.bar/user/foo/bar'), 1);
577+
map.set(URI.parse('http://foo.bar/user/foo?query'), 2);
578+
map.set(URI.parse('http://foo.bar/user/foo?QUERY'), 3);
579+
map.set(URI.parse('http://foo.bar/user/foo/flip/flop'), 3);
580+
581+
assert.equal(map.get(URI.parse('http://foo.bar/foo')), undefined);
582+
assert.equal(map.get(URI.parse('http://foo.bar/user')), undefined);
583+
assert.equal(map.get(URI.parse('http://foo.bar/user/foo/bar')), 1);
584+
assert.equal(map.get(URI.parse('http://foo.bar/user/foo?query')), 2);
585+
assert.equal(map.get(URI.parse('http://foo.bar/user/foo?Query')), undefined);
586+
assert.equal(map.get(URI.parse('http://foo.bar/user/foo?QUERY')), 3);
587+
assert.equal(map.get(URI.parse('http://foo.bar/user/foo/bar/boo')), undefined);
588+
});
589+
590+
test('TernarySearchTree (PathSegments) - superstr', function () {
591+
592+
const map = new TernarySearchTree<URI, number>(new UriIterator());
593+
map.set(URI.file('/user/foo/bar'), 1);
594+
map.set(URI.file('/user/foo'), 2);
595+
map.set(URI.file('/user/foo/flip/flop'), 3);
596+
map.set(URI.file('/usr/foo'), 4);
597+
598+
let item: IteratorResult<number>;
599+
let iter = map.findSuperstr(URI.file('/user'))!;
600+
601+
item = iter.next();
602+
assert.equal(item.value, 2);
603+
assert.equal(item.done, false);
604+
item = iter.next();
605+
assert.equal(item.value, 1);
606+
assert.equal(item.done, false);
607+
item = iter.next();
608+
assert.equal(item.value, 3);
609+
assert.equal(item.done, false);
610+
item = iter.next();
611+
assert.equal(item.value, undefined);
612+
assert.equal(item.done, true);
613+
614+
iter = map.findSuperstr(URI.file('/usr'))!;
615+
item = iter.next();
616+
assert.equal(item.value, 4);
617+
assert.equal(item.done, false);
618+
619+
item = iter.next();
620+
assert.equal(item.value, undefined);
621+
assert.equal(item.done, true);
622+
623+
iter = map.findSuperstr(URI.file('/'))!;
624+
item = iter.next();
625+
assert.equal(item.value, 2);
626+
assert.equal(item.done, false);
627+
item = iter.next();
628+
assert.equal(item.value, 1);
629+
assert.equal(item.done, false);
630+
item = iter.next();
631+
assert.equal(item.value, 3);
632+
assert.equal(item.done, false);
633+
item = iter.next();
634+
assert.equal(item.value, 4);
635+
assert.equal(item.done, false);
636+
item = iter.next();
637+
assert.equal(item.value, undefined);
638+
assert.equal(item.done, true);
639+
640+
assert.equal(map.findSuperstr(URI.file('/not')), undefined);
641+
assert.equal(map.findSuperstr(URI.file('/us')), undefined);
642+
assert.equal(map.findSuperstr(URI.file('/usrr')), undefined);
643+
assert.equal(map.findSuperstr(URI.file('/userr')), undefined);
644+
});
645+
646+
553647
test('ResourceMap - basics', function () {
554648
const map = new ResourceMap<any>();
555649

0 commit comments

Comments
 (0)