/* * Copyright 2012, Mozilla Foundation and contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ "use strict"; // THIS FILE IS GENERATED FROM SOURCE IN THE GCLI PROJECT // PLEASE TALK TO SOMEONE IN DEVELOPER TOOLS BEFORE EDITING IT const exports = {}; function test() { helpers.runTestModule(exports, "browser_gcli_exec.js"); } // var assert = require('../testharness/assert'); // var helpers = require('./helpers'); exports.testParamGroup = function (options) { var tsg = options.requisition.system.commands.get("tsg"); assert.is(tsg.params[0].groupName, null, "tsg param 0 group null"); assert.is(tsg.params[1].groupName, "First", "tsg param 1 group First"); assert.is(tsg.params[2].groupName, "First", "tsg param 2 group First"); assert.is(tsg.params[3].groupName, "Second", "tsg param 3 group Second"); assert.is(tsg.params[4].groupName, "Second", "tsg param 4 group Second"); }; exports.testWithHelpers = function (options) { return helpers.audit(options, [ { setup: "tss", check: { input: "tss", hints: "", markup: "VVV", cursor: 3, current: "__command", status: "VALID", unassigned: [ ], args: { command: { name: "tss" }, } }, exec: { output: /^Exec: tss/, } }, { setup: "tsv option1 10", check: { input: "tsv option1 10", hints: "", markup: "VVVVVVVVVVVVVV", cursor: 14, current: "optionValue", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsv" }, optionType: { value: "string", arg: " option1", status: "VALID", message: "" }, optionValue: { arg: " 10", status: "VALID", message: "" } } }, exec: { output: "Exec: tsv optionType=option1 optionValue=10" } }, { setup: "tsv option2 10", check: { input: "tsv option2 10", hints: "", markup: "VVVVVVVVVVVVVV", cursor: 14, current: "optionValue", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsv" }, optionType: { value: "number", arg: " option2", status: "VALID", message: "" }, optionValue: { arg: " 10", status: "VALID", message: "" } } }, exec: { output: "Exec: tsv optionType=option2 optionValue=10" } }, // Delegated remote types can't transfer value types so we only test for // the value of optionValue when we're local { skipIf: options.isRemote, setup: "tsv option1 10", check: { args: { optionValue: { value: "10" } } }, exec: { output: "Exec: tsv optionType=option1 optionValue=10" } }, { skipIf: options.isRemote, setup: "tsv option2 10", check: { args: { optionValue: { value: 10 } } }, exec: { output: "Exec: tsv optionType=option2 optionValue=10" } } ]); }; exports.testExecText = function (options) { return helpers.audit(options, [ { setup: "tsr fred", check: { input: "tsr fred", hints: "", markup: "VVVVVVVV", cursor: 8, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsr" }, text: { value: "fred", arg: " fred", status: "VALID", message: "" } } }, exec: { output: "Exec: tsr text=fred" } }, { setup: "tsr fred bloggs", check: { input: "tsr fred bloggs", hints: "", markup: "VVVVVVVVVVVVVVV", cursor: 15, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsr" }, text: { value: "fred bloggs", arg: " fred bloggs", status: "VALID", message: "" } } }, exec: { output: "Exec: tsr text=fred\\ bloggs" } }, { setup: 'tsr "fred bloggs"', check: { input: 'tsr "fred bloggs"', hints: "", markup: "VVVVVVVVVVVVVVVVV", cursor: 17, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsr" }, text: { value: "fred bloggs", arg: ' "fred bloggs"', status: "VALID", message: "" } } }, exec: { output: "Exec: tsr text=fred\\ bloggs" } }, { setup: 'tsr "fred bloggs', check: { input: 'tsr "fred bloggs', hints: "", markup: "VVVVVVVVVVVVVVVV", cursor: 16, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsr" }, text: { value: "fred bloggs", arg: ' "fred bloggs', status: "VALID", message: "" } } }, exec: { output: "Exec: tsr text=fred\\ bloggs" } } ]); }; exports.testExecBoolean = function (options) { return helpers.audit(options, [ { setup: "tsb", check: { input: "tsb", hints: " [toggle]", markup: "VVV", cursor: 3, current: "__command", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsb" }, toggle: { value: false, arg: "", status: "VALID", message: "" } } }, exec: { output: "Exec: tsb toggle=false" } }, { setup: "tsb --toggle", check: { input: "tsb --toggle", hints: "", markup: "VVVVVVVVVVVV", cursor: 12, current: "toggle", status: "VALID", predictions: [ ], unassigned: [ ], outputState: "false:default", args: { command: { name: "tsb" }, toggle: { value: true, arg: " --toggle", status: "VALID", message: "" } } }, exec: { output: "Exec: tsb toggle=true" } } ]); }; exports.testExecNumber = function (options) { return helpers.audit(options, [ { setup: "tsu 10", check: { input: "tsu 10", hints: "", markup: "VVVVVV", cursor: 6, current: "num", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsu" }, num: { value: 10, arg: " 10", status: "VALID", message: "" } } }, exec: { output: "Exec: tsu num=10" } }, { setup: "tsu --num 10", check: { input: "tsu --num 10", hints: "", markup: "VVVVVVVVVVVV", cursor: 12, current: "num", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsu" }, num: { value: 10, arg: " --num 10", status: "VALID", message: "" } } }, exec: { output: "Exec: tsu num=10" } } ]); }; exports.testExecScript = function (options) { return helpers.audit(options, [ { // Bug 704829 - Enable GCLI Javascript parameters // The answer to this should be 2 setup: "tsj { 1 + 1 }", check: { input: "tsj { 1 + 1 }", hints: "", markup: "VVVVVVVVVVVVV", cursor: 13, current: "javascript", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsj" }, javascript: { arg: " { 1 + 1 }", status: "VALID", message: "" } } }, exec: { output: "Exec: tsj javascript=1 + 1" } } ]); }; exports.testExecNode = function (options) { return helpers.audit(options, [ { skipIf: options.isRemote, setup: "tse :root", check: { input: "tse :root", hints: " [options]", markup: "VVVVVVVVV", cursor: 9, current: "node", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tse" }, node: { arg: " :root", status: "VALID", message: "" }, nodes: { arg: "", status: "VALID", message: "" }, nodes2: { arg: "", status: "VALID", message: "" } } }, exec: { output: /^Exec: tse/ }, post: function (output) { assert.is(output.data.args.node, ":root", "node should be :root"); assert.is(output.data.args.nodes, "Error", "nodes should be Error"); assert.is(output.data.args.nodes2, "Error", "nodes2 should be Error"); } } ]); }; exports.testExecSubCommand = function (options) { return helpers.audit(options, [ { setup: "tsn dif fred", check: { input: "tsn dif fred", hints: "", markup: "VVVVVVVVVVVV", cursor: 12, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsn dif" }, text: { value: "fred", arg: " fred", status: "VALID", message: "" } } }, exec: { output: "Exec: tsnDif text=fred" } }, { setup: "tsn exten fred", check: { input: "tsn exten fred", hints: "", markup: "VVVVVVVVVVVVVV", cursor: 14, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsn exten" }, text: { value: "fred", arg: " fred", status: "VALID", message: "" }, } }, exec: { output: "Exec: tsnExten text=fred" } }, { setup: "tsn extend fred", check: { input: "tsn extend fred", hints: "", markup: "VVVVVVVVVVVVVVV", cursor: 15, current: "text", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsn extend" }, text: { value: "fred", arg: " fred", status: "VALID", message: "" }, } }, exec: { output: "Exec: tsnExtend text=fred" } } ]); }; exports.testExecArray = function (options) { return helpers.audit(options, [ { setup: "tselarr 1", check: { input: "tselarr 1", hints: "", markup: "VVVVVVVVV", cursor: 9, current: "num", status: "VALID", predictions: ["1"], unassigned: [ ], outputState: "false:default", args: { command: { name: "tselarr" }, num: { value: "1", arg: " 1", status: "VALID", message: "" }, arr: { /* value:,*/ arg: "{}", status: "VALID", message: "" }, } }, exec: { output: "Exec: tselarr num=1 arr=" } }, { setup: "tselarr 1 a", check: { input: "tselarr 1 a", hints: "", markup: "VVVVVVVVVVV", cursor: 11, current: "arr", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tselarr" }, num: { value: "1", arg: " 1", status: "VALID", message: "" }, arr: { /* value:a,*/ arg: "{ a}", status: "VALID", message: "" }, } }, exec: { output: "Exec: tselarr num=1 arr=a" } }, { setup: "tselarr 1 a b", check: { input: "tselarr 1 a b", hints: "", markup: "VVVVVVVVVVVVV", cursor: 13, current: "arr", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tselarr" }, num: { value: "1", arg: " 1", status: "VALID", message: "" }, arr: { /* value:a,b,*/ arg: "{ a, b}", status: "VALID", message: "" }, } }, exec: { output: "Exec: tselarr num=1 arr=a b" } } ]); }; exports.testExecMultiple = function (options) { return helpers.audit(options, [ { setup: "tsm a 10 10", check: { input: "tsm a 10 10", hints: "", markup: "VVVVVVVVVVV", cursor: 11, current: "num", status: "VALID", predictions: [ ], unassigned: [ ], args: { command: { name: "tsm" }, abc: { value: "a", arg: " a", status: "VALID", message: "" }, txt: { value: "10", arg: " 10", status: "VALID", message: "" }, num: { value: 10, arg: " 10", status: "VALID", message: "" }, } }, exec: { output: "Exec: tsm abc=a txt=10 num=10" } } ]); }; exports.testExecDefaults = function (options) { return helpers.audit(options, [ { // Bug 707009 - GCLI doesn't always fill in default parameters properly setup: "tsg aaa", check: { input: "tsg aaa", hints: " [options]", markup: "VVVVVVV", cursor: 7, current: "solo", status: "VALID", predictions: ["aaa"], unassigned: [ ], args: { command: { name: "tsg" }, solo: { value: "aaa", arg: " aaa", status: "VALID", message: "" }, txt1: { value: undefined, arg: "", status: "VALID", message: "" }, bool: { value: false, arg: "", status: "VALID", message: "" }, txt2: { value: undefined, arg: "", status: "VALID", message: "" }, num: { value: undefined, arg: "", status: "VALID", message: "" }, } }, exec: { output: "Exec: tsg solo=aaa txt1= bool=false txt2=d num=42" } } ]); }; exports.testNested = function (options) { var commands = options.requisition.system.commands; commands.add({ name: "nestorama", exec: function (args, context) { return context.updateExec("tsb").then(function (tsbOutput) { return context.updateExec("tsu 6").then(function (tsuOutput) { return JSON.stringify({ tsb: tsbOutput.data, tsu: tsuOutput.data }); }); }); } }); return helpers.audit(options, [ { setup: "nestorama", exec: { output: "{" + '"tsb":{' + '"name":"tsb",' + '"args":{"toggle":"false"}' + "}," + '"tsu":{' + '"name":"tsu",' + '"args":{"num":"6"}' + "}" + "}" }, post: function () { commands.remove("nestorama"); } } ]); };