@jsprismarine/brigadier 0.1.0 → 0.2.1
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.
- package/LICENSE +0 -0
- package/README.md +57 -39
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/AmbiguityConsumer.js +0 -0
- package/dist/lib/AmbiguityConsumer.js.map +0 -0
- package/dist/lib/Command.js +0 -0
- package/dist/lib/Command.js.map +0 -0
- package/dist/lib/CommandDispatcher.js +45 -28
- package/dist/lib/CommandDispatcher.js.map +1 -1
- package/dist/lib/ImmutableStringReader.js +0 -0
- package/dist/lib/ImmutableStringReader.js.map +0 -0
- package/dist/lib/LiteralMessage.js +0 -0
- package/dist/lib/LiteralMessage.js.map +0 -0
- package/dist/lib/Message.js +0 -0
- package/dist/lib/Message.js.map +0 -0
- package/dist/lib/ParseResults.js +0 -0
- package/dist/lib/ParseResults.js.map +0 -0
- package/dist/lib/Predicate.js +0 -0
- package/dist/lib/Predicate.js.map +0 -0
- package/dist/lib/RedirectModifier.js +0 -0
- package/dist/lib/RedirectModifier.js.map +0 -0
- package/dist/lib/ResultConsumer.js +0 -0
- package/dist/lib/ResultConsumer.js.map +0 -0
- package/dist/lib/SingleRedirectModifier.js +0 -0
- package/dist/lib/SingleRedirectModifier.js.map +0 -0
- package/dist/lib/StringReader.js +0 -0
- package/dist/lib/StringReader.js.map +0 -0
- package/dist/lib/arguments/ArgumentType.js +1 -1
- package/dist/lib/arguments/ArgumentType.js.map +1 -1
- package/dist/lib/arguments/BoolArgumentType.js +0 -0
- package/dist/lib/arguments/BoolArgumentType.js.map +0 -0
- package/dist/lib/arguments/FloatArgumentType.js +0 -0
- package/dist/lib/arguments/FloatArgumentType.js.map +0 -0
- package/dist/lib/arguments/IntegerArgumentType.js +0 -0
- package/dist/lib/arguments/IntegerArgumentType.js.map +0 -0
- package/dist/lib/arguments/StringArgumentType.js +0 -0
- package/dist/lib/arguments/StringArgumentType.js.map +0 -0
- package/dist/lib/builder/ArgumentBuilder.js +0 -0
- package/dist/lib/builder/ArgumentBuilder.js.map +0 -0
- package/dist/lib/builder/LiteralArgumentBuilder.js +0 -0
- package/dist/lib/builder/LiteralArgumentBuilder.js.map +1 -1
- package/dist/lib/builder/RequiredArgumentBuilder.js +0 -0
- package/dist/lib/builder/RequiredArgumentBuilder.js.map +1 -1
- package/dist/lib/context/CommandContext.js +4 -4
- package/dist/lib/context/CommandContext.js.map +1 -1
- package/dist/lib/context/CommandContextBuilder.js +0 -0
- package/dist/lib/context/CommandContextBuilder.js.map +0 -0
- package/dist/lib/context/ParsedArgument.js +0 -0
- package/dist/lib/context/ParsedArgument.js.map +0 -0
- package/dist/lib/context/ParsedCommandNode.js +0 -0
- package/dist/lib/context/ParsedCommandNode.js.map +0 -0
- package/dist/lib/context/StringRange.js +0 -0
- package/dist/lib/context/StringRange.js.map +0 -0
- package/dist/lib/context/SuggestionContext.js +0 -0
- package/dist/lib/context/SuggestionContext.js.map +0 -0
- package/dist/lib/exceptions/BuiltInExceptionProvider.js +0 -0
- package/dist/lib/exceptions/BuiltInExceptionProvider.js.map +0 -0
- package/dist/lib/exceptions/BuiltInExceptions.js +0 -0
- package/dist/lib/exceptions/BuiltInExceptions.js.map +0 -0
- package/dist/lib/exceptions/CommandExceptionType.js +0 -0
- package/dist/lib/exceptions/CommandExceptionType.js.map +0 -0
- package/dist/lib/exceptions/CommandSyntaxException.js +0 -0
- package/dist/lib/exceptions/CommandSyntaxException.js.map +0 -0
- package/dist/lib/exceptions/DynamicCommandExceptionType.js +0 -0
- package/dist/lib/exceptions/DynamicCommandExceptionType.js.map +0 -0
- package/dist/lib/exceptions/SimpleCommandExceptionType.js +0 -0
- package/dist/lib/exceptions/SimpleCommandExceptionType.js.map +0 -0
- package/dist/lib/suggestion/IntegerSuggestion.js +0 -0
- package/dist/lib/suggestion/IntegerSuggestion.js.map +0 -0
- package/dist/lib/suggestion/Suggestion.js +1 -1
- package/dist/lib/suggestion/Suggestion.js.map +1 -1
- package/dist/lib/suggestion/SuggestionProvider.js +0 -0
- package/dist/lib/suggestion/SuggestionProvider.js.map +0 -0
- package/dist/lib/suggestion/Suggestions.js +1 -1
- package/dist/lib/suggestion/Suggestions.js.map +1 -1
- package/dist/lib/suggestion/SuggestionsBuilder.js +0 -0
- package/dist/lib/suggestion/SuggestionsBuilder.js.map +0 -0
- package/dist/lib/tree/ArgumentCommandNode.js +17 -16
- package/dist/lib/tree/ArgumentCommandNode.js.map +1 -1
- package/dist/lib/tree/CommandNode.js +14 -13
- package/dist/lib/tree/CommandNode.js.map +1 -1
- package/dist/lib/tree/LiteralCommandNode.js +0 -0
- package/dist/lib/tree/LiteralCommandNode.js.map +0 -0
- package/dist/lib/tree/RootCommandNode.js +0 -0
- package/dist/lib/tree/RootCommandNode.js.map +0 -0
- package/dist/lib/util/isEqual.js +0 -0
- package/dist/lib/util/isEqual.js.map +0 -0
- package/index.js +0 -0
- package/package.json +55 -48
- package/.prettierrc +0 -10
- package/.renovaterc +0 -3
- package/CHANGELOG.md +0 -30
- package/dist/index.d.ts +0 -23
- package/dist/lib/AmbiguityConsumer.d.ts +0 -4
- package/dist/lib/Command.d.ts +0 -4
- package/dist/lib/CommandDispatcher.d.ts +0 -29
- package/dist/lib/ImmutableStringReader.d.ts +0 -12
- package/dist/lib/LiteralMessage.d.ts +0 -7
- package/dist/lib/Message.d.ts +0 -3
- package/dist/lib/ParseResults.d.ts +0 -13
- package/dist/lib/Predicate.d.ts +0 -3
- package/dist/lib/Primitive.js +0 -2
- package/dist/lib/RedirectModifier.d.ts +0 -4
- package/dist/lib/ResultConsumer.d.ts +0 -4
- package/dist/lib/SingleRedirectModifier.d.ts +0 -4
- package/dist/lib/StringReader.d.ts +0 -27
- package/dist/lib/arguments/ArgumentType.d.ts +0 -21
- package/dist/lib/arguments/BoolArgumentType.d.ts +0 -13
- package/dist/lib/arguments/FloatArgumentType.d.ts +0 -16
- package/dist/lib/arguments/IntegerArgumentType.d.ts +0 -16
- package/dist/lib/arguments/StringArgumentType.d.ts +0 -21
- package/dist/lib/builder/ArgumentBuilder.d.ts +0 -28
- package/dist/lib/builder/LiteralArgumentBuilder.d.ts +0 -11
- package/dist/lib/builder/RequiredArgumentBuilder.d.ts +0 -18
- package/dist/lib/context/CommandContext.d.ts +0 -33
- package/dist/lib/context/CommandContextBuilder.d.ts +0 -38
- package/dist/lib/context/ParsedArgument.d.ts +0 -9
- package/dist/lib/context/ParsedCommandNode.d.ts +0 -11
- package/dist/lib/context/StringRange.d.ts +0 -16
- package/dist/lib/context/SuggestionContext.d.ts +0 -6
- package/dist/lib/exceptions/BuiltInExceptionProvider.d.ts +0 -23
- package/dist/lib/exceptions/BuiltInExceptions.d.ts +0 -43
- package/dist/lib/exceptions/CommandExceptionType.d.ts +0 -2
- package/dist/lib/exceptions/CommandSyntaxException.d.ts +0 -19
- package/dist/lib/exceptions/Dynamic2CommandExceptionType.js +0 -19
- package/dist/lib/exceptions/DynamicCommandExceptionType.d.ts +0 -10
- package/dist/lib/exceptions/SimpleCommandExceptionType.d.ts +0 -11
- package/dist/lib/suggestion/IntegerSuggestion.d.ts +0 -12
- package/dist/lib/suggestion/Suggestion.d.ts +0 -17
- package/dist/lib/suggestion/SuggestionProvider.d.ts +0 -6
- package/dist/lib/suggestion/Suggestions.d.ts +0 -16
- package/dist/lib/suggestion/SuggestionsBuilder.d.ts +0 -18
- package/dist/lib/tree/ArgumentCommandNode.d.ts +0 -31
- package/dist/lib/tree/CommandNode.d.ts +0 -45
- package/dist/lib/tree/LiteralCommandNode.d.ts +0 -27
- package/dist/lib/tree/RootCommandNode.d.ts +0 -21
- package/dist/lib/util/isEqual.d.ts +0 -1
- package/example/fill.js +0 -47
- package/example/fill.ts +0 -50
- package/src/index.ts +0 -50
- package/src/lib/AmbiguityConsumer.ts +0 -6
- package/src/lib/Command.ts +0 -5
- package/src/lib/CommandDispatcher.ts +0 -390
- package/src/lib/ImmutableStringReader.ts +0 -22
- package/src/lib/LiteralMessage.ts +0 -17
- package/src/lib/Message.ts +0 -3
- package/src/lib/ParseResults.ts +0 -32
- package/src/lib/Predicate.ts +0 -3
- package/src/lib/RedirectModifier.ts +0 -5
- package/src/lib/ResultConsumer.ts +0 -6
- package/src/lib/SingleRedirectModifier.ts +0 -6
- package/src/lib/StringReader.ts +0 -210
- package/src/lib/arguments/ArgumentType.ts +0 -27
- package/src/lib/arguments/BoolArgumentType.ts +0 -41
- package/src/lib/arguments/FloatArgumentType.ts +0 -75
- package/src/lib/arguments/IntegerArgumentType.ts +0 -75
- package/src/lib/arguments/StringArgumentType.ts +0 -83
- package/src/lib/builder/ArgumentBuilder.ts +0 -94
- package/src/lib/builder/LiteralArgumentBuilder.ts +0 -35
- package/src/lib/builder/RequiredArgumentBuilder.ts +0 -54
- package/src/lib/context/CommandContext.ts +0 -118
- package/src/lib/context/CommandContextBuilder.ts +0 -155
- package/src/lib/context/ParsedArgument.ts +0 -27
- package/src/lib/context/ParsedCommandNode.ts +0 -35
- package/src/lib/context/StringRange.ts +0 -57
- package/src/lib/context/SuggestionContext.ts +0 -12
- package/src/lib/exceptions/BuiltInExceptionProvider.ts +0 -43
- package/src/lib/exceptions/BuiltInExceptions.ts +0 -121
- package/src/lib/exceptions/CommandExceptionType.ts +0 -2
- package/src/lib/exceptions/CommandSyntaxException.ts +0 -77
- package/src/lib/exceptions/DynamicCommandExceptionType.ts +0 -22
- package/src/lib/exceptions/SimpleCommandExceptionType.ts +0 -26
- package/src/lib/suggestion/IntegerSuggestion.ts +0 -46
- package/src/lib/suggestion/Suggestion.ts +0 -87
- package/src/lib/suggestion/SuggestionProvider.ts +0 -7
- package/src/lib/suggestion/Suggestions.ts +0 -85
- package/src/lib/suggestion/SuggestionsBuilder.ts +0 -69
- package/src/lib/tree/ArgumentCommandNode.ts +0 -118
- package/src/lib/tree/CommandNode.ts +0 -200
- package/src/lib/tree/LiteralCommandNode.ts +0 -111
- package/src/lib/tree/RootCommandNode.ts +0 -62
- package/src/lib/util/isEqual.ts +0 -75
- package/test/CommandDispatcherTest.ts +0 -427
- package/test/CommandDispatcherUsagesTest.ts +0 -163
- package/test/CommandSuggestionsTest.ts +0 -283
- package/test/StringReaderTest.ts +0 -391
- package/test/arguments/BoolArgumentTypeTest.ts +0 -18
- package/test/arguments/FloatArgumentTypeTest.ts +0 -61
- package/test/arguments/IntegerArgumentTypeTest.ts +0 -63
- package/test/arguments/StringArgumentTypeTest.ts +0 -61
- package/test/benchmarks/ExecuteBenchmark.js +0 -33
- package/test/benchmarks/ParsingBenchmark.js +0 -96
- package/test/builder/ArgumentBuilderTest.ts +0 -61
- package/test/builder/LiteralArgumentBuilderTest.ts +0 -37
- package/test/builder/RequiredArgumentBuilderTest.ts +0 -40
- package/test/context/CommandContextTest.ts +0 -77
- package/test/context/ParsedArgumentTest.ts +0 -19
- package/test/exceptions/DynamicCommandSyntaxExceptionTypeTest.ts +0 -18
- package/test/exceptions/SimpleCommandSyntaxExceptionTypeTest.ts +0 -33
- package/test/suggestion/SuggestionBuilderTest.ts +0 -66
- package/test/suggestion/SuggestionTest.ts +0 -65
- package/test/suggestion/SuggestionsTest.ts +0 -24
- package/test/tree/AbstractCommandNodeTest.ts +0 -57
- package/test/tree/ArgumentCommandNodeTest.ts +0 -81
- package/test/tree/LiteralCommandNodeTest.ts +0 -112
- package/test/tree/RootCommandNodeTest.ts +0 -70
- package/test/utils/testEquality.ts +0 -10
- package/tsconfig.json +0 -40
- package/tsconfig.tsbuildinfo +0 -1578
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
let output = ""
|
|
2
|
-
const outputStream = {write(content) { output = content; console.log(content) }}
|
|
3
|
-
|
|
4
|
-
const { literal, CommandDispatcher } = require("../../dist")
|
|
5
|
-
|
|
6
|
-
const subject = new CommandDispatcher();
|
|
7
|
-
subject.register(
|
|
8
|
-
literal("a")
|
|
9
|
-
.then(
|
|
10
|
-
literal("1")
|
|
11
|
-
.then(literal("i").executes(() => 0))
|
|
12
|
-
.then(literal("ii").executes(() => 0))
|
|
13
|
-
)
|
|
14
|
-
.then(
|
|
15
|
-
literal("2")
|
|
16
|
-
.then(literal("i").executes(() => 0))
|
|
17
|
-
.then(literal("ii").executes(() => 0))
|
|
18
|
-
)
|
|
19
|
-
);
|
|
20
|
-
subject.register(literal("b").then(literal("1").executes(() => 0)));
|
|
21
|
-
subject.register(literal("c").executes(() => 0));
|
|
22
|
-
subject.register(literal("d").requires(s => false).executes(() => 0));
|
|
23
|
-
subject.register(
|
|
24
|
-
literal("e")
|
|
25
|
-
.executes(() => 0)
|
|
26
|
-
.then(
|
|
27
|
-
literal("1")
|
|
28
|
-
.executes(() => 0)
|
|
29
|
-
.then(literal("i").executes(() => 0))
|
|
30
|
-
.then(literal("ii").executes(() => 0))
|
|
31
|
-
)
|
|
32
|
-
);
|
|
33
|
-
subject.register(
|
|
34
|
-
literal("f")
|
|
35
|
-
.then(
|
|
36
|
-
literal("1")
|
|
37
|
-
.then(literal("i").executes(() => 0))
|
|
38
|
-
.then(literal("ii").executes(() => 0).requires(s => false))
|
|
39
|
-
)
|
|
40
|
-
.then(
|
|
41
|
-
literal("2")
|
|
42
|
-
.then(literal("i").executes(() => 0).requires(s => false))
|
|
43
|
-
.then(literal("ii").executes(() => 0))
|
|
44
|
-
)
|
|
45
|
-
);
|
|
46
|
-
subject.register(
|
|
47
|
-
literal("g")
|
|
48
|
-
.executes(() => 0)
|
|
49
|
-
.then(literal("1").then(literal("i").executes(() => 0)))
|
|
50
|
-
);
|
|
51
|
-
const h = subject.register(
|
|
52
|
-
literal("h")
|
|
53
|
-
.executes(() => 0)
|
|
54
|
-
.then(literal("1").then(literal("i").executes(() => 0)))
|
|
55
|
-
.then(literal("2").then(literal("i").then(literal("ii").executes(() => 0))))
|
|
56
|
-
.then(literal("3").executes(() => 0))
|
|
57
|
-
);
|
|
58
|
-
subject.register(
|
|
59
|
-
literal("i")
|
|
60
|
-
.executes(() => 0)
|
|
61
|
-
.then(literal("1").executes(() => 0))
|
|
62
|
-
.then(literal("2").executes(() => 0))
|
|
63
|
-
);
|
|
64
|
-
subject.register(
|
|
65
|
-
literal("j")
|
|
66
|
-
.redirect(subject.getRoot())
|
|
67
|
-
);
|
|
68
|
-
subject.register(
|
|
69
|
-
literal("k")
|
|
70
|
-
.redirect(h)
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
bench(
|
|
74
|
-
[
|
|
75
|
-
{
|
|
76
|
-
label: "parse a 1 i",
|
|
77
|
-
fn() { subject.parse("a 1 i", new Object()); }
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
label: "parse c",
|
|
81
|
-
fn() { subject.parse("c", new Object()); }
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
label: "parse k 1 i",
|
|
85
|
-
fn() { subject.parse("k 1 i", new Object()); }
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
label: "parse _",
|
|
89
|
-
fn() { subject.parse("c", new Object()); }
|
|
90
|
-
}
|
|
91
|
-
],
|
|
92
|
-
{ stream: outputStream, runs: 1000 }
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
const d = new Date();
|
|
96
|
-
require('fs').writeFileSync(`./BenchmarkResult/Parsing-${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}-${d.getHours()}-${d.getMinutes()}.txt`, output.replace(/\[1m/g, '').replace(/\[0m/g, ''))
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { assert, expect } from "chai"
|
|
2
|
-
import { mock, instance } from "ts-mockito"
|
|
3
|
-
import CommandNode from "../../src/lib/tree/CommandNode"
|
|
4
|
-
import ArgumentBuilder from "../../src/lib/builder/ArgumentBuilder";
|
|
5
|
-
import { argument } from "../../src/lib/builder/RequiredArgumentBuilder"
|
|
6
|
-
import { literal } from "../../src/lib/builder/LiteralArgumentBuilder"
|
|
7
|
-
import { DefaultType } from "../../src/lib/arguments/ArgumentType"
|
|
8
|
-
|
|
9
|
-
const { integer } = DefaultType;
|
|
10
|
-
|
|
11
|
-
class TestableArgumentBuilder<S> extends ArgumentBuilder<S, TestableArgumentBuilder<S>> {
|
|
12
|
-
public getThis(): TestableArgumentBuilder<S> {
|
|
13
|
-
return this;
|
|
14
|
-
}
|
|
15
|
-
public build(): CommandNode<S> {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
describe('ArgumentBuilderTest', () => {
|
|
21
|
-
let builder: TestableArgumentBuilder<Object>;
|
|
22
|
-
|
|
23
|
-
beforeEach(() => {
|
|
24
|
-
builder = new TestableArgumentBuilder();
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it('testArguments', () => {
|
|
28
|
-
const arg = argument("bar", integer());
|
|
29
|
-
|
|
30
|
-
builder.then(arg);
|
|
31
|
-
|
|
32
|
-
assert.equal([...builder.getArguments()].length, 1);
|
|
33
|
-
expect([...builder.getArguments()][0].equals(arg.build())).to.equal(true);
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
it('testRedirect', () => {
|
|
37
|
-
const target = instance(mock(CommandNode));
|
|
38
|
-
builder.redirect(target);
|
|
39
|
-
assert.deepEqual(builder.getRedirect(), target);
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
it('testRedirect_withChild', () => {
|
|
43
|
-
try {
|
|
44
|
-
const target = instance(mock(CommandNode));
|
|
45
|
-
builder.then(literal("foo"));
|
|
46
|
-
builder.redirect(target);
|
|
47
|
-
assert.fail();
|
|
48
|
-
} catch (ignore) {
|
|
49
|
-
}
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
it('testThen_withRedirect', () => {
|
|
53
|
-
try {
|
|
54
|
-
const target = instance(mock(CommandNode));
|
|
55
|
-
builder.redirect(target);
|
|
56
|
-
builder.then(literal("foo"));
|
|
57
|
-
assert.fail();
|
|
58
|
-
} catch (ignore) {
|
|
59
|
-
}
|
|
60
|
-
})
|
|
61
|
-
})
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { assert, expect } from 'chai'
|
|
2
|
-
import Command from "../../src/lib/Command"
|
|
3
|
-
import LiteralArgumentBuilder from "../../src/lib/builder/LiteralArgumentBuilder"
|
|
4
|
-
import { argument } from "../../src/lib/builder/RequiredArgumentBuilder"
|
|
5
|
-
import { DefaultType } from "../../src/lib/arguments/ArgumentType"
|
|
6
|
-
|
|
7
|
-
const { integer } = DefaultType;
|
|
8
|
-
|
|
9
|
-
describe('LiteralArgumentBuilderTest', () => {
|
|
10
|
-
|
|
11
|
-
let builder: LiteralArgumentBuilder<Object>;
|
|
12
|
-
const command: Command<Object> = () => 0;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
builder = new LiteralArgumentBuilder("foo");
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('testBuild', () => {
|
|
19
|
-
const node = builder.build();
|
|
20
|
-
assert.equal(node.getLiteral(), "foo");
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it('testBuildWithExecutor', () => {
|
|
24
|
-
const node = builder.executes(command).build();
|
|
25
|
-
|
|
26
|
-
assert.equal(node.getLiteral(), "foo");
|
|
27
|
-
assert.equal(node.getCommand(), command);
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
it('testBuildWithChildren', () => {
|
|
31
|
-
builder.then(argument("bar", integer()));
|
|
32
|
-
builder.then(argument("baz", integer()));
|
|
33
|
-
const node = builder.build();
|
|
34
|
-
|
|
35
|
-
assert.equal(node.getChildrenCount(), 2);
|
|
36
|
-
})
|
|
37
|
-
})
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { assert, expect } from 'chai'
|
|
2
|
-
import { instance, mock } from 'ts-mockito'
|
|
3
|
-
import Command from "../../src/lib/Command"
|
|
4
|
-
import RequiredArgumentBuilder, { argument } from "../../src/lib/builder/RequiredArgumentBuilder"
|
|
5
|
-
import ArgumentType from "../../src/lib/arguments/ArgumentType"
|
|
6
|
-
import IntegerArgumentType from "../../src/lib/arguments/IntegerArgumentType"
|
|
7
|
-
|
|
8
|
-
describe('LiteralArgumentBuilderTest', () => {
|
|
9
|
-
|
|
10
|
-
let builder: RequiredArgumentBuilder<Object, number>;
|
|
11
|
-
const type: ArgumentType<number> = instance(mock(IntegerArgumentType));
|
|
12
|
-
const command: Command<Object> = () => 0;
|
|
13
|
-
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
builder = argument("foo", type);
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('testBuild', () => {
|
|
19
|
-
const node = builder.build();
|
|
20
|
-
|
|
21
|
-
assert.equal(node.getName(), "foo");
|
|
22
|
-
assert.equal(node.getType(), type);
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it('testBuildWithExecutor', () => {
|
|
26
|
-
const node = builder.executes(command).build();
|
|
27
|
-
|
|
28
|
-
assert.equal(node.getName(), "foo");
|
|
29
|
-
assert.equal(node.getType(), type);
|
|
30
|
-
assert.equal(node.getCommand(), command);
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it('testBuildWithChildren', () => {
|
|
34
|
-
builder.then(argument("bar", type));
|
|
35
|
-
builder.then(argument("baz", type));
|
|
36
|
-
const node = builder.build();
|
|
37
|
-
|
|
38
|
-
assert.equal(node.getChildrenCount(), 2);
|
|
39
|
-
})
|
|
40
|
-
})
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { assert } from 'chai'
|
|
2
|
-
import { mock, instance } from 'ts-mockito'
|
|
3
|
-
import testEquality from "../utils/testEquality"
|
|
4
|
-
import CommandContextBuilder from '../../src/lib/context/CommandContextBuilder'
|
|
5
|
-
import CommandDispatcher from '../../src/lib/CommandDispatcher';
|
|
6
|
-
import RootCommandNode from '../../src/lib/tree/RootCommandNode';
|
|
7
|
-
import ParsedArgument from '../../src/lib/context/ParsedArgument';
|
|
8
|
-
import CommandNode from '../../src/lib/tree/CommandNode';
|
|
9
|
-
import StringRange from '../../src/lib/context/StringRange';
|
|
10
|
-
|
|
11
|
-
describe('CommandContextTest', () => {
|
|
12
|
-
let builder: CommandContextBuilder<Object>;
|
|
13
|
-
const source = {};
|
|
14
|
-
const rootNode = new RootCommandNode();
|
|
15
|
-
const dispatcher = new CommandDispatcher<Object>(rootNode);
|
|
16
|
-
|
|
17
|
-
beforeEach(() => {
|
|
18
|
-
builder = new CommandContextBuilder(dispatcher, source, rootNode, 0);
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it('testGetArgument_nonexistent', done => {
|
|
22
|
-
try {
|
|
23
|
-
builder.build("").getArgument("foo");
|
|
24
|
-
} catch (ex) {
|
|
25
|
-
done();
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
assert.fail();
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
it('testGetArgument_noConverter', done => {
|
|
33
|
-
try {
|
|
34
|
-
const context = builder.withArgument("foo", new ParsedArgument(0, 1, Object.create(null))).build("123");
|
|
35
|
-
context.getArgument("foo", String);
|
|
36
|
-
} catch (ex) {
|
|
37
|
-
done();
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
assert.fail();
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
it('testGetArgument', () => {
|
|
45
|
-
const context = builder.withArgument("foo", new ParsedArgument(0, 1, 123)).build("123");
|
|
46
|
-
assert.equal(context.getArgument("foo", Number), 123);
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('testSource', () => {
|
|
50
|
-
assert.deepEqual(builder.build("").getSource(), source);
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('testRootNode', () => {
|
|
54
|
-
assert.deepEqual(builder.build("").getRootNode(), rootNode);
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it('testEquals', () => {
|
|
58
|
-
const otherSource = new Object();
|
|
59
|
-
const command = () => 1;
|
|
60
|
-
const otherCommand = () => 2;
|
|
61
|
-
|
|
62
|
-
const mockedCommandNode = mock(CommandNode)
|
|
63
|
-
const rootNode = new RootCommandNode()
|
|
64
|
-
const otherRootNode = new RootCommandNode()
|
|
65
|
-
const node: CommandNode<Object> = instance(mockedCommandNode)
|
|
66
|
-
const otherNode: CommandNode<Object> = instance(mockedCommandNode)
|
|
67
|
-
|
|
68
|
-
testEquality(new CommandContextBuilder(dispatcher, source, rootNode, 0).build(""), new CommandContextBuilder(dispatcher, source, rootNode, 0).build(""))
|
|
69
|
-
testEquality(new CommandContextBuilder(dispatcher, source, otherRootNode, 0).build(""), new CommandContextBuilder(dispatcher, source, otherRootNode, 0).build(""))
|
|
70
|
-
testEquality(new CommandContextBuilder(dispatcher, otherSource, rootNode, 0).build(""), new CommandContextBuilder(dispatcher, otherSource, rootNode, 0).build(""))
|
|
71
|
-
testEquality(new CommandContextBuilder(dispatcher, source, rootNode, 0).withCommand(command).build(""), new CommandContextBuilder(dispatcher, source, rootNode, 0).withCommand(command).build(""))
|
|
72
|
-
testEquality(new CommandContextBuilder(dispatcher, source, rootNode, 0).withCommand(otherCommand).build(""), new CommandContextBuilder(dispatcher, source, rootNode, 0).withCommand(otherCommand).build(""))
|
|
73
|
-
testEquality(new CommandContextBuilder(dispatcher, source, rootNode, 0).withArgument("foo", new ParsedArgument(0, 1, 123)).build("123"), new CommandContextBuilder(dispatcher, source, rootNode, 0).withArgument("foo", new ParsedArgument(0, 1, 123)).build("123"))
|
|
74
|
-
testEquality(new CommandContextBuilder(dispatcher, source, rootNode, 0).withNode(node, StringRange.between(0, 3)).withNode(otherNode, StringRange.between(4, 6)).build("123 456"), new CommandContextBuilder(dispatcher, source, rootNode, 0).withNode(node, StringRange.between(0, 3)).withNode(otherNode, StringRange.between(4, 6)).build("123 456"))
|
|
75
|
-
testEquality(new CommandContextBuilder(dispatcher, source, rootNode, 0).withNode(otherNode, StringRange.between(0, 3)).withNode(node, StringRange.between(4, 6)).build("123 456"), new CommandContextBuilder(dispatcher, source, rootNode, 0).withNode(otherNode, StringRange.between(0, 3)).withNode(node, StringRange.between(4, 6)).build("123 456"))
|
|
76
|
-
})
|
|
77
|
-
})
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { assert } from 'chai'
|
|
2
|
-
import testEquality from "../utils/testEquality"
|
|
3
|
-
import StringReader from "../../src/lib/StringReader"
|
|
4
|
-
import ParsedArgument from "../../src/lib/context/ParsedArgument"
|
|
5
|
-
|
|
6
|
-
describe('ParsedArgumentTest', () => {
|
|
7
|
-
|
|
8
|
-
it('testEquals', () => {
|
|
9
|
-
testEquality(new ParsedArgument(0, 3, "bar"), new ParsedArgument(0, 3, "bar"))
|
|
10
|
-
testEquality(new ParsedArgument(3, 6, "baz"), new ParsedArgument(3, 6, "baz"))
|
|
11
|
-
testEquality(new ParsedArgument(6, 9, "baz"), new ParsedArgument(6, 9, "baz"))
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
it('getRaw', () => {
|
|
15
|
-
const reader = new StringReader("0123456789");
|
|
16
|
-
const argument = new ParsedArgument(2, 5, "");
|
|
17
|
-
assert.equal(argument.getRange().get(reader), "234");
|
|
18
|
-
})
|
|
19
|
-
})
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { assert } from "chai"
|
|
2
|
-
import StringReader from "../../src/lib/StringReader"
|
|
3
|
-
import LiteralMessage from "../../src/lib/LiteralMessage"
|
|
4
|
-
import DynamicCommandExceptionType from "../../src/lib/exceptions/DynamicCommandExceptionType"
|
|
5
|
-
|
|
6
|
-
describe('DynamicCommandSyntaxExceptionTypeTest', () => {
|
|
7
|
-
|
|
8
|
-
const type = new DynamicCommandExceptionType(name => new LiteralMessage("Hello, " + name + "!"));
|
|
9
|
-
|
|
10
|
-
it('createWithContext', () => {
|
|
11
|
-
const reader = new StringReader("Foo bar");
|
|
12
|
-
reader.setCursor(5);
|
|
13
|
-
const exception = type.createWithContext(reader, "World");
|
|
14
|
-
assert.deepEqual(exception.getType(), type);
|
|
15
|
-
assert.equal(exception.getInput(), "Foo bar");
|
|
16
|
-
assert.equal(exception.getCursor(), 5);
|
|
17
|
-
})
|
|
18
|
-
})
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { assert } from "chai"
|
|
2
|
-
import { mock, instance } from "ts-mockito"
|
|
3
|
-
import StringReader from "../../src/lib/StringReader"
|
|
4
|
-
import LiteralMessage from "../../src/lib/LiteralMessage"
|
|
5
|
-
import CommandSyntaxException from "../../src/lib/exceptions/CommandSyntaxException"
|
|
6
|
-
import SimpleCommandExceptionType from "../../src/lib/exceptions/SimpleCommandExceptionType"
|
|
7
|
-
|
|
8
|
-
describe('SimpleCommandSyntaxExceptionTypeTest', () => {
|
|
9
|
-
it('createWithContext', () => {
|
|
10
|
-
const type = new SimpleCommandExceptionType(new LiteralMessage("error"));
|
|
11
|
-
const reader = new StringReader("Foo bar");
|
|
12
|
-
reader.setCursor(5);
|
|
13
|
-
const exception = type.createWithContext(reader);
|
|
14
|
-
assert.deepEqual(exception.getType(), type);
|
|
15
|
-
assert.equal(exception.getInput(), "Foo bar");
|
|
16
|
-
assert.equal(exception.getCursor(), 5);
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
it('getContext_none', () => {
|
|
20
|
-
const exception = new CommandSyntaxException({}, new LiteralMessage("error"));
|
|
21
|
-
assert.equal(exception.getContext(), null);
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
it('getContext_short', () => {
|
|
25
|
-
const exception = new CommandSyntaxException({}, new LiteralMessage("error"), "Hello world!", 5);
|
|
26
|
-
assert.equal(exception.getContext(), "Hello<--[HERE]");
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
it('getContext_long', () => {
|
|
30
|
-
const exception = new CommandSyntaxException({}, new LiteralMessage("error"), "Hello world! This has an error in it. Oh dear!", 20);
|
|
31
|
-
assert.equal(exception.getContext(), "...d! This ha<--[HERE]");
|
|
32
|
-
})
|
|
33
|
-
})
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { assert, expect } from "chai"
|
|
2
|
-
import StringRange from "../../src/lib/context/StringRange"
|
|
3
|
-
import Suggestion from "../../src/lib/suggestion/Suggestion"
|
|
4
|
-
import SuggestionsBuilder from "../../src/lib/suggestion/SuggestionsBuilder"
|
|
5
|
-
|
|
6
|
-
describe('SuggestionsBuilderTest', () => {
|
|
7
|
-
let builder: SuggestionsBuilder;
|
|
8
|
-
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
builder = new SuggestionsBuilder("Hello w", 6);
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it('suggest_appends', () => {
|
|
14
|
-
const result = builder.suggest("world!").build();
|
|
15
|
-
assert.deepEqual(result.getList(), [new Suggestion(StringRange.between(6, 7), "world!")]);
|
|
16
|
-
assert.deepEqual(result.getRange(), StringRange.between(6, 7));
|
|
17
|
-
assert.equal(result.isEmpty(), false);
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it('suggest_replaces', () => {
|
|
21
|
-
const result = builder.suggest("everybody").build();
|
|
22
|
-
assert.deepEqual(result.getList(), [new Suggestion(StringRange.between(6, 7), "everybody")]);
|
|
23
|
-
assert.deepEqual(result.getRange(), StringRange.between(6, 7));
|
|
24
|
-
assert.equal(result.isEmpty(), false);
|
|
25
|
-
})
|
|
26
|
-
|
|
27
|
-
it('suggest_noop', () => {
|
|
28
|
-
const result = builder.suggest("w").build();
|
|
29
|
-
assert.deepEqual(result.getList(), []);
|
|
30
|
-
assert.deepEqual(result.isEmpty(), true);
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it('suggest_multiple', () => {
|
|
34
|
-
const result = builder.suggest("world!").suggest("everybody").suggest("weekend").build();
|
|
35
|
-
expect(result.getList()).to.have.deep.members([new Suggestion(StringRange.between(6, 7), "everybody"), new Suggestion(StringRange.between(6, 7), "weekend"), new Suggestion(StringRange.between(6, 7), "world!")]);
|
|
36
|
-
assert.deepEqual(result.getRange(), StringRange.between(6, 7));
|
|
37
|
-
assert.deepEqual(result.isEmpty(), false);
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('restart', () => {
|
|
41
|
-
builder.suggest("won't be included in restart");
|
|
42
|
-
const other = builder.restart();
|
|
43
|
-
expect(other).to.not.deep.equal(builder);
|
|
44
|
-
assert.deepEqual(other.getInput(), builder.getInput());
|
|
45
|
-
assert.deepEqual(other.getStart(), builder.getStart());
|
|
46
|
-
assert.deepEqual(other.getRemaining(), builder.getRemaining());
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('sort_alphabetical', () => {
|
|
50
|
-
const result = builder.suggest("2").suggest("4").suggest("6").suggest("8").suggest("30").suggest("32").build();
|
|
51
|
-
const actual = result.getList().map(v => v.getText());
|
|
52
|
-
expect(actual).to.have.deep.members(["2", "30", "32", "4", "6", "8"]);
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
it('sort_numerical', () => {
|
|
56
|
-
const result = builder.suggest(2).suggest(4).suggest(6).suggest(8).suggest(30).suggest(32).build();
|
|
57
|
-
const actual = result.getList().map(v => v.getText());
|
|
58
|
-
expect(actual).to.have.deep.members([ "2", "4", "6", "8", "30", "32"]);
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('sort_mixed', () => {
|
|
62
|
-
const result = builder.suggest("11").suggest("22").suggest("33").suggest("a").suggest("b").suggest("c").suggest(2).suggest(4).suggest(6).suggest(8).suggest(30).suggest(32).suggest("3a").suggest("a3").build();
|
|
63
|
-
const actual = result.getList().map(v => v.getText());
|
|
64
|
-
expect(actual).to.have.deep.members([ "11", "2", "22", "33", "3a", "4", "6", "8", "30", "32", "a", "a3", "b", "c" ]);
|
|
65
|
-
})
|
|
66
|
-
})
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { assert } from "chai"
|
|
2
|
-
import StringRange from "../../src/lib/context/StringRange"
|
|
3
|
-
import Suggestion from "../../src/lib/suggestion/Suggestion"
|
|
4
|
-
|
|
5
|
-
describe('SuggestionTest', () => {
|
|
6
|
-
it('apply_insertation_start', () => {
|
|
7
|
-
const suggestion = new Suggestion(StringRange.at(0), "And so I said: ");
|
|
8
|
-
assert.equal(suggestion.apply("Hello world!"), "And so I said: Hello world!");
|
|
9
|
-
})
|
|
10
|
-
|
|
11
|
-
it('apply_insertation_middle', () => {
|
|
12
|
-
const suggestion = new Suggestion(StringRange.at(6), "small ");
|
|
13
|
-
assert.equal(suggestion.apply("Hello world!"), "Hello small world!");
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('apply_insertation_end', () => {
|
|
17
|
-
const suggestion = new Suggestion(StringRange.at(5), " world!");
|
|
18
|
-
assert.equal(suggestion.apply("Hello"), "Hello world!");
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it('apply_replacement_start', () => {
|
|
22
|
-
const suggestion = new Suggestion(StringRange.between(0, 5), "Goodbye");
|
|
23
|
-
assert.equal(suggestion.apply("Hello world!"), "Goodbye world!");
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
it('apply_replacement_middle', () => {
|
|
27
|
-
const suggestion = new Suggestion(StringRange.between(6, 11), "Alex");
|
|
28
|
-
assert.equal(suggestion.apply("Hello world!"), "Hello Alex!");
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
it('apply_replacement_end', () => {
|
|
32
|
-
const suggestion = new Suggestion(StringRange.between(6, 12), "Creeper!");
|
|
33
|
-
assert.equal(suggestion.apply("Hello world!"), "Hello Creeper!");
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
it('apply_replacement_everything', () => {
|
|
37
|
-
const suggestion = new Suggestion(StringRange.between(0, 12), "Oh dear.");
|
|
38
|
-
assert.equal(suggestion.apply("Hello world!"), "Oh dear.");
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
it('expand_unchanged', () => {
|
|
42
|
-
const suggestion = new Suggestion(StringRange.at(1), "oo");
|
|
43
|
-
assert.deepEqual(suggestion.expand("f", StringRange.at(1)), suggestion);
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
it('expand_left', () => {
|
|
47
|
-
const suggestion = new Suggestion(StringRange.at(1), "oo");
|
|
48
|
-
assert.deepEqual(suggestion.expand("f", StringRange.between(0, 1)), new Suggestion(StringRange.between(0, 1), "foo"));
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
it('expand_right', () => {
|
|
52
|
-
const suggestion = new Suggestion(StringRange.at(0), "minecraft:");
|
|
53
|
-
assert.deepEqual(suggestion.expand("fish", StringRange.between(0, 4)), new Suggestion(StringRange.between(0, 4), "minecraft:fish"));
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
it('expand_both', () => {
|
|
57
|
-
const suggestion = new Suggestion(StringRange.at(11), "minecraft:");
|
|
58
|
-
assert.deepEqual(suggestion.expand("give Steve fish_block", StringRange.between(5, 21)), new Suggestion(StringRange.between(5, 21), "Steve minecraft:fish_block"));
|
|
59
|
-
})
|
|
60
|
-
|
|
61
|
-
it('expand_replacement', () => {
|
|
62
|
-
const suggestion = new Suggestion(StringRange.between(6, 11), "strangers");
|
|
63
|
-
assert.deepEqual(suggestion.expand("Hello world!", StringRange.between(0, 12)), new Suggestion(StringRange.between(0, 12), "Hello strangers!"));
|
|
64
|
-
})
|
|
65
|
-
})
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { assert, expect } from "chai"
|
|
2
|
-
import StringRange from "../../src/lib/context/StringRange"
|
|
3
|
-
import Suggestion from "../../src/lib/suggestion/Suggestion"
|
|
4
|
-
import Suggestions from "../../src/lib/suggestion/Suggestions"
|
|
5
|
-
|
|
6
|
-
describe('SuggestionsTest', () => {
|
|
7
|
-
it('merge_empty', () => {
|
|
8
|
-
const merged = Suggestions.merge("foo b", []);
|
|
9
|
-
assert.equal(merged.isEmpty(), true);
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
it('merge_single', () => {
|
|
13
|
-
const suggestions = new Suggestions(StringRange.at(5), [new Suggestion(StringRange.at(5), "ar")]);
|
|
14
|
-
const merged = Suggestions.merge("foo b", [suggestions]);
|
|
15
|
-
assert.deepEqual(merged, suggestions);
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
it('merge_multiple', () => {
|
|
19
|
-
const a = new Suggestions(StringRange.at(5), [new Suggestion(StringRange.at(5), "ar"), new Suggestion(StringRange.at(5), "az"), new Suggestion(StringRange.at(5), "Az")]);
|
|
20
|
-
const b = new Suggestions(StringRange.between(4, 5), [new Suggestion(StringRange.between(4, 5), "foo"), new Suggestion(StringRange.between(4, 5), "qux"), new Suggestion(StringRange.between(4, 5), "apple"), new Suggestion(StringRange.between(4, 5), "Bar")]);
|
|
21
|
-
const merged = Suggestions.merge("foo b", [a, b]);
|
|
22
|
-
expect(merged.getList()).to.have.deep.members([ new Suggestion(StringRange.between(4, 5), "apple"), new Suggestion(StringRange.between(4, 5), "bar"), new Suggestion(StringRange.between(4, 5), "Bar"), new Suggestion(StringRange.between(4, 5), "baz"), new Suggestion(StringRange.between(4, 5), "bAz"), new Suggestion(StringRange.between(4, 5), "foo"), new Suggestion(StringRange.between(4, 5), "qux")]);
|
|
23
|
-
})
|
|
24
|
-
})
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { assert, expect } from "chai"
|
|
2
|
-
import { mock, instance } from "ts-mockito"
|
|
3
|
-
import Command from "../../src/lib/Command"
|
|
4
|
-
import CommandNode from "../../src/lib/tree/CommandNode"
|
|
5
|
-
import RootCommandNode from "../../src/lib/tree/RootCommandNode"
|
|
6
|
-
import { literal } from "../../src/lib/builder/LiteralArgumentBuilder"
|
|
7
|
-
|
|
8
|
-
describe('AbstractCommandNodeTest', () => {
|
|
9
|
-
const command: Command<Object> = () => 0;
|
|
10
|
-
|
|
11
|
-
function getCommandNode(): CommandNode<Object> {
|
|
12
|
-
return new RootCommandNode();
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
it('testAddChild', () => {
|
|
16
|
-
const node = getCommandNode();
|
|
17
|
-
|
|
18
|
-
node.addChild(literal("child1").build());
|
|
19
|
-
node.addChild(literal("child2").build());
|
|
20
|
-
node.addChild(literal("child1").build());
|
|
21
|
-
|
|
22
|
-
assert.equal(node.getChildrenCount(), 2);
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
it('testAddChildMergesGrandchildren', () => {
|
|
26
|
-
const node = getCommandNode();
|
|
27
|
-
|
|
28
|
-
node.addChild(literal("child").then(
|
|
29
|
-
literal("grandchild1")
|
|
30
|
-
).build());
|
|
31
|
-
|
|
32
|
-
node.addChild(literal("child").then(
|
|
33
|
-
literal("grandchild2")
|
|
34
|
-
).build());
|
|
35
|
-
|
|
36
|
-
assert.equal(node.getChildrenCount(), 1);
|
|
37
|
-
assert.equal(node.getChildren().next().value.getChildrenCount(), 2);
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
it('testAddChildPreservesCommand', () => {
|
|
41
|
-
const node = getCommandNode();
|
|
42
|
-
|
|
43
|
-
node.addChild(literal("child").executes(command).build());
|
|
44
|
-
node.addChild(literal("child").build());
|
|
45
|
-
|
|
46
|
-
expect(node.getChildren().next().value.getCommand()).to.deep.equal(command);
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('testAddChildOverwritesCommand', () => {
|
|
50
|
-
const node = getCommandNode();
|
|
51
|
-
|
|
52
|
-
node.addChild(literal("child").build());
|
|
53
|
-
node.addChild(literal("child").executes(command).build());
|
|
54
|
-
|
|
55
|
-
expect(node.getChildren().next().value.getCommand()).to.deep.equal(command);
|
|
56
|
-
})
|
|
57
|
-
})
|