summaryrefslogtreecommitdiffstats
path: root/toolkit/components/commandlines/test/unit/test_handleFlagWithParam.js
blob: 539ac1a8198742b3123501041ae23504151ac37f (plain)
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
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const { AppConstants } = ChromeUtils.importESModule(
  "resource://gre/modules/AppConstants.sys.mjs"
);

add_task(async function test_handleFlagWithParam() {
  let goodInputs = [
    ["-arg", "value"],
    ["--arg", "value"],
    ["-arg=value"],
    ["--arg=value"],
  ];
  let badInputs = [["-arg", "-value"]];
  // Accepted only on Windows.  Perhaps surprisingly, "/arg=value" is not accepted.
  let windowsInputs = [["/arg", "value"], ["/arg:value"]];

  if (AppConstants.platform == "win") {
    goodInputs.push(...windowsInputs);
  }

  for (let args of goodInputs) {
    let cmdLine = Cu.createCommandLine(
      args,
      null,
      Ci.nsICommandLine.STATE_REMOTE_EXPLICIT
    );
    Assert.equal(
      cmdLine.handleFlagWithParam("arg", false),
      "value",
      `${JSON.stringify(args)} yields 'value' for 'arg'`
    );
  }

  for (let args of badInputs) {
    let cmdLine = Cu.createCommandLine(
      args,
      null,
      Ci.nsICommandLine.STATE_REMOTE_EXPLICIT
    );
    Assert.throws(
      () => cmdLine.handleFlagWithParam("arg", false),
      /NS_ERROR_ILLEGAL_VALUE/,
      `${JSON.stringify(args)} throws for 'arg'`
    );
  }

  if (AppConstants.platform != "win") {
    // No special meaning on non-Windows platforms.
    for (let args of windowsInputs) {
      let cmdLine = Cu.createCommandLine(
        args,
        null,
        Ci.nsICommandLine.STATE_REMOTE_EXPLICIT
      );
      Assert.equal(
        cmdLine.handleFlagWithParam("arg", false),
        null,
        `${JSON.stringify(args)} yields null for 'arg'`
      );
    }
  }
});