blob: 6f5c503cdb28e21dd063499cecb4cb8718eef2cc [file] [log] [blame]
<!--
Copyright 2016 The LUCI Authors. All rights reserved.
Use of this source code is governed under the Apache License, Version 2.0
that can be found in the LICENSE file.
-->
<!doctype html>
<title>rpc-completer</title>
<script src="../../bower_components/web-component-tester/browser.js"></script>
<link rel="import" href="../rpc-completer.html">
<link rel="import" href="descriptor.html">
<test-fixture id="completer">
<template>
<rpc-completer></rpc-completer>
</template>
</test-fixture>
<script>
'use strict';
suite('<rpc-completer>', function() {
var annotatedSet = JSON.parse(JSON.stringify(testDescriptor));
rpcExplorer.descUtil.annotateSet(annotatedSet);
var completer;
setup(function() {
completer = fixture('completer');
completer.description = annotatedSet;
});
suite('findMatching', function() {
function testFindMatching(text, i, expected) {
test(text + ' @ ' + i + ' = ' + expected, function() {
var result = completer.findMatching(text, i);
expect(result).to.equal(expected);
});
}
testFindMatching('{}', 0, 1);
testFindMatching('{{}}', 0, 3);
testFindMatching('{{}}', 1, 2);
testFindMatching('{[]}', 0, 3);
testFindMatching('{[]}', 1, 2);
testFindMatching('{aa[bb]ccc}', 0, 10);
testFindMatching('{aa[bb]ccc}', 3, 6);
});
suite('getCurrentPath', function() {
function testCurrentPath(text, expected) {
test('`' + text + '`', function() {
var path = completer.getCurrentPath(text);
expect(path.join('')).to.deep.equal(expected);
});
}
testCurrentPath('', '');
testCurrentPath(
'{ "a": ',
'a');
testCurrentPath(
'{ "a": "',
'a');
testCurrentPath(
'{ "a": {',
'a');
testCurrentPath(
'{ "a": { "b": [',
'ab');
testCurrentPath(
'{ "a": {}, "b": {',
'b');
testCurrentPath(
'{ "a": [], "b": {',
'b');
testCurrentPath(
'{ "a": { "b": ',
'ab');
testCurrentPath(
'{ "a": { "b": "',
'ab');
});
test('underscores in field name', function() {
var multiWord = rpcExplorer.descUtil.resolve(
annotatedSet, 'rpcexplorer.MultiWord');
var completions = completer.getCompletionsForText(multiWord, '');
expect(completions).to.deep.equal([
{
caption: 'fooBar',
snippet: '"fooBar": "${0}"',
meta: 'string',
docTooltip: ''
}
])
});
suite('getCompletionsForText', function() {
var m = rpcExplorer.descUtil.resolve(annotatedSet, 'rpcexplorer.M');
test('M', function() {
var completions = completer.getCompletionsForText(m, '');
expect(completions).to.deep.equal([
{
caption: 'i',
snippet: '"i": ${0}',
meta: 'int32',
docTooltip: ' i is integer\n'
},
{
caption: 'ri',
snippet: '"ri": [${0}]',
meta: 'repeated int32',
docTooltip: ''
},
{
caption: 's',
snippet: '"s": "${0}"',
meta: 'string',
docTooltip: ''
},
{
caption: 'e',
snippet: '"e": "${0}"',
meta: 'rpcexplorer.E',
docTooltip: ''
},
{
caption: 'm',
snippet: '"m": {${0}}',
meta: 'rpcexplorer.M2',
docTooltip: ''
},
{
caption: 'mr',
snippet: '"mr": [{${0}}]',
meta: 'repeated rpcexplorer.M2',
docTooltip: ' mr is repeated message\n second line.\n'
}
]);
});
test('M with quote', function() {
var completions = completer.getCompletionsForText(m, '"')
expect(completions).to.deep.equal([
{
caption: 'i',
snippet: 'i',
meta: 'int32',
docTooltip: ' i is integer\n'
},
{
caption: 'ri',
snippet: 'ri',
meta: 'repeated int32',
docTooltip: ''
},
{
caption: 's',
snippet: 's',
meta: 'string',
docTooltip: ''
},
{
caption: 'e',
snippet: 'e',
meta: 'rpcexplorer.E',
docTooltip: ''
},
{
caption: 'm',
snippet: 'm',
meta: 'rpcexplorer.M2',
docTooltip: ''
},
{
caption: 'mr',
snippet: 'mr',
meta: 'repeated rpcexplorer.M2',
docTooltip: ' mr is repeated message\n second line.\n'
}
]);
});
test('submessage', function() {
var completions = completer.getCompletionsForText(m, '"m":[{');
expect(completions).to.deep.equal([
{
caption: 'i',
snippet: '"i": ${0}',
meta: 'int32',
docTooltip: ''
},
{
caption: 's',
snippet: '"s": "${0}"',
meta: 'string',
docTooltip: ''
}
]);
});
test('enum values', function() {
var completions = completer.getCompletionsForText(m, '"e":');
expect(completions).to.deep.equal([
{
caption: 'V0',
snippet: '"V0"',
meta: '0',
docTooltip: ' V0 comment.\n'
},
{
caption: 'V1',
snippet: '"V1"',
meta: '1',
docTooltip: ' V1 comment.\n'
}
]);
});
test('enum values with quote', function() {
var completions = completer.getCompletionsForText(m, '"e": "');
expect(completions).to.deep.equal([
{
caption: 'V0',
snippet: 'V0',
meta: '0',
docTooltip: ' V0 comment.\n'
},
{
caption: 'V1',
snippet: 'V1',
meta: '1',
docTooltip: ' V1 comment.\n'
}
]);
});
suite('map', function() {
var mapContainer = rpcExplorer.descUtil.resolve(
annotatedSet, 'rpcexplorer.MapContainer');
test('field', function() {
var completions = completer.getCompletionsForText(mapContainer, '');
expect(completions).to.deep.equal([
{
caption: 'im',
snippet: '"im": {${0}}',
meta: 'map<int32, rpcexplorer.M>',
docTooltip: ''
},
{
caption: 'ii',
snippet: '"ii": {${0}}',
meta: 'map<int32, int32>',
docTooltip: ''
}
])
});
test('keys', function() {
var completions = completer.getCompletionsForText(mapContainer, '"im": {');
expect(completions).to.deep.equal([])
});
test('message values', function() {
var mapValueCompletions = completer.getCompletionsForText(mapContainer, '"im": {"key": {');
var mCompletions = completer.getCompletionsForText(m, '');
expect(mapValueCompletions).to.deep.equal(mCompletions)
});
test('int32 values', function() {
var completions = completer.getCompletionsForText(mapContainer, '"ii": {"value": {');
expect(completions).to.deep.equal([])
});
});
});
});
</script>