public static IEnumerable <object[]> GetTestApiArgumentTestCases()
        {
            //
            // Cmd.flag + Cmd.sign
            //
            yield return(TestCase(
                             @"export const x = Cmd.flag(""/nologo"", true);",
                             (context) => Cmd.Flag("/nologo")));

            yield return(TestCase(
                             @"export const x = Cmd.option(""/timeout"", 42);",
                             (context) => Cmd.Option("/timeout", 42)));

            yield return(TestCase(
                             @"export const x = Cmd.sign(""/unsafe"", true);",
                             (context) => Cmd.Option("/unsafe", "+")));

            yield return(TestCase(
                             @"export const x = Cmd.sign(""/unsafe"", false);",
                             (context) => Cmd.Option("/unsafe", "-")));

            yield return(TestCase(
                             @"export const x = Cmd.sign(""/unsafe"", undefined);",
                             (context) => Cmd.Undefined()));

            yield return(TestCase(
                             @"export const x = Cmd.sign(""/enableNoPlus"", true, true);",
                             (context) => Cmd.Flag("/enableNoPlus")));

            yield return(TestCase(
                             @"export const x = Cmd.sign(""/enableNoPlus"", false, true);",
                             (context) => Cmd.Option("/enableNoPlus", "-")));

            //
            // Cmd.option with files
            //
            yield return(TestCase(
                             String.Format(@"export const x = Cmd.option(""/out"", Artifact.output(p`{0}foo.txt`));", m_testAbsolutePath),
                             (context) => Cmd.Option("/out", Artifacts.Output(CreateAbsolutePath(context, String.Format("{0}foo.txt", m_testAbsolutePath))))));

            yield return(TestCase(
                             String.Format(@"export const x = Cmd.option(""/input"", Artifact.input(p`{0}foo.txt`));", m_testAbsolutePath),
                             (context) => Cmd.Option("/input", Artifacts.Input(CreateAbsolutePath(context, String.Format("{0}foo.txt", m_testAbsolutePath))))));

            yield return(TestCase(
                             String.Format(@"export const x = Cmd.option(""/outFolder"", Artifact.output(p`{0}foo`));", m_testAbsolutePath),
                             (context) => Cmd.Option("/outFolder", Artifacts.Output(CreateAbsolutePath(context, String.Format("{0}foo", m_testAbsolutePath))))));

            yield return(TestCase(
                             String.Format(@"export const x = Cmd.option(""/rewrite"", Artifact.rewritten(f`{0}foo.txt`, p`{0}boo.txt`));", m_testAbsolutePath),
                             (context) =>
                             Cmd.Option("/rewrite", Artifacts.Rewritten(
                                            CreateFile(context, String.Format("{0}foo.txt", m_testAbsolutePath)),
                                            CreateAbsolutePath(context, String.Format("{0}boo.txt", m_testAbsolutePath))))));

            yield return(TestCase(
                             String.Format(@"export const x = Cmd.option(""/rewrite"", Artifact.rewritten(f`{0}foo.txt`));", m_testAbsolutePath),
                             (context) =>
                             Cmd.Option("/rewrite", Artifacts.InPlaceRewritten(CreateFile(context, String.Format("{0}foo.txt", m_testAbsolutePath))))));

            //
            // Cmd.options
            //
            yield return(TestCase(
                             String.Format(@"export const x = Cmd.options(""/crazy"", [Artifact.output(p`{0}foo.txt`), Artifact.input(p`{0}boo.txt`)]);", m_testAbsolutePath),
                             (context) =>
                             Cmd.Options("/crazy",
                                         Artifacts.Output(CreateAbsolutePath(context, String.Format("{0}foo.txt", m_testAbsolutePath))),
                                         Artifacts.Input(CreateAbsolutePath(context, String.Format("{0}boo.txt", m_testAbsolutePath))))));
        }