forked from swank-js/swank-js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
completion-tests.js
75 lines (69 loc) · 3 KB
/
completion-tests.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// -*- mode: js2; js-run: t -*-
//
// Copyright (c) 2012 Robert Krahn. All rights reserved.
// Copyright (c) 2010 Ivan Shvedunov. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR 'AS IS' AND ANY EXPRESSED
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var Completion = require("./completion").Completion;
var assert = require("assert");
function addObjectToGlobal(name, obj, callback) {
var global = Function('return this')();
global[name] = obj;
try {
callback();
} finally {
delete global[name];
}
}
var completion = new Completion({ enumerablePropsOnly: true });
var name = "foooTestTopLevelString";
addObjectToGlobal(
name, {}, function () {
assert.deepEqual({ values: [ name ], partial: name },
completion.complete("foooTestTopLev"));
assert.deepEqual({ values: [], partial: "bbbb" },
completion.complete("bbbb"));
});
name = "testPropCompletion";
addObjectToGlobal(
name, { foo: { bar: {} } }, function () {
assert.deepEqual({ values: [ "testPropCompletion.foo.bar" ],
partial: "testPropCompletion.foo.bar" },
completion.complete("testPropCompletion.foo.b"));
assert.deepEqual({ values: [], partial: "testPropCompletion.foo.baz" },
completion.complete("testPropCompletion.foo.baz"));
assert.deepEqual({ values: [], partial: "testPropCompletion.fooz.bar.qqq" },
completion.complete("testPropCompletion.fooz.bar.qqq"));
});
name = "testCompleteEverything";
addObjectToGlobal(
name, { foo: {}, bar: {} }, function () {
assert.deepEqual(
{ values: [ "testCompleteEverything.bar", "testCompleteEverything.foo" ],
partial: "testCompleteEverything." },
completion.complete("testCompleteEverything."));
});
// include non-enumerable properties
assert.ok(new Completion().complete("Obj").values.indexOf("Object") >= 0);