summaryrefslogtreecommitdiffstats
path: root/tools/slang-test/unit-test-command-line-args.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2021-05-21 18:41:54 -0400
committerGitHub <noreply@github.com>2021-05-21 15:41:54 -0700
commit172538fdb418f7a2faab1f5a410f3b2cb8e18ba5 (patch)
treeb17fd1cae7ace4bb3f2dbdd4ad29f4f57df0b286 /tools/slang-test/unit-test-command-line-args.cpp
parent0389546b0b065303d3c6874891a9fab4428910b9 (diff)
Downstream option handling (#1850)
* #include an absolute path didn't work - because paths were taken to always be relative. * Added SourceLoc handling for command line parsing. * Fix typo in debug. * Fix issue around the DiagnosticSink used in options parsing not having a writer available - by having DiagnosticSink parenting. * Small rename for clarity. * WIP extracting command line args for downstream tools. * Unit tests/bug fixes around extracting args. * Use DownstreamArgs in the EndToEndCompileRequest * Passing downstream compiler options downstream. * Fix issue with endToEndReq being nullptr. * Fix issue with diagnostics number change. * Small improvements to how the source line is displayed if it's too long. Default to 120, as suggested in previous review. Co-authored-by: T. Foley <tfoleyNV@users.noreply.github.com>
Diffstat (limited to 'tools/slang-test/unit-test-command-line-args.cpp')
-rw-r--r--tools/slang-test/unit-test-command-line-args.cpp126
1 files changed, 126 insertions, 0 deletions
diff --git a/tools/slang-test/unit-test-command-line-args.cpp b/tools/slang-test/unit-test-command-line-args.cpp
new file mode 100644
index 000000000..fd50ceeef
--- /dev/null
+++ b/tools/slang-test/unit-test-command-line-args.cpp
@@ -0,0 +1,126 @@
+// unit-test-command-line-args.cpp
+
+#include "../../source/compiler-core/slang-command-line-args.h"
+
+#include "test-context.h"
+
+using namespace Slang;
+
+static void commandLineArgsUnitTest()
+{
+ RefPtr<CommandLineContext> context = new CommandLineContext;
+
+
+ // Simple scoped version
+ {
+ CommandLineArgs args(context);
+ DownstreamArgs downstreamArgs(context);
+
+ DiagnosticSink sink(context->getSourceManager(), nullptr);
+
+ const char* inArgs[] =
+ {
+ "-Xa...",
+ "-blah",
+ "10",
+ "-X.",
+ };
+
+ args.setArgs(inArgs, SLANG_COUNT_OF(inArgs));
+
+ SLANG_CHECK(SLANG_SUCCEEDED(downstreamArgs.stripDownstreamArgs(args, DownstreamArgs::Flag::AllowNewNames, &sink)));
+
+ const char* aArgs[] =
+ {
+ "-blah",
+ "10"
+ };
+
+ SLANG_CHECK(downstreamArgs.getArgsByName("a").hasArgs(aArgs, SLANG_COUNT_OF(aArgs)));
+ SLANG_CHECK(args.getArgCount() == 0 && sink.getErrorCount() == 0);
+ }
+
+ // Leaving off terminating -X. is ok
+ {
+ CommandLineArgs args(context);
+ DownstreamArgs downstreamArgs(context);
+
+ DiagnosticSink sink(context->getSourceManager(), nullptr);
+
+ const char* inArgs[] =
+ {
+ "-Xa...",
+ "-blah",
+ "10",
+ };
+
+ args.setArgs(inArgs, SLANG_COUNT_OF(inArgs));
+
+ SLANG_CHECK(SLANG_SUCCEEDED(downstreamArgs.stripDownstreamArgs(args, DownstreamArgs::Flag::AllowNewNames, &sink)));
+
+ const char* aArgs[] =
+ {
+ "-blah",
+ "10"
+ };
+
+ SLANG_CHECK(downstreamArgs.getArgsByName("a").hasArgs(aArgs, SLANG_COUNT_OF(aArgs)));
+ SLANG_CHECK(args.getArgCount() == 0 && sink.getErrorCount() == 0);
+ }
+
+ // Having a nesting
+
+ {
+ CommandLineArgs args(context);
+ DownstreamArgs downstreamArgs(context);
+
+ DiagnosticSink sink(context->getSourceManager(), nullptr);
+
+ const char* inArgs[] =
+ {
+ "-something",
+ "andAnother",
+ "-Xa...",
+ "-blah",
+ "-Xb...",
+ "-hey",
+ "-X.",
+ "10",
+ "-X.",
+ "-Xc",
+ "somethingForC",
+ };
+
+ args.setArgs(inArgs, SLANG_COUNT_OF(inArgs));
+
+ SLANG_CHECK(SLANG_SUCCEEDED(downstreamArgs.stripDownstreamArgs(args, DownstreamArgs::Flag::AllowNewNames, &sink)));
+
+ const char* aArgs[] =
+ {
+ "-blah",
+ "-Xb...",
+ "-hey",
+ "-X.",
+ "10"
+ };
+
+ const char* cArgs[] =
+ {
+ "somethingForC",
+ };
+
+ const char* mainArgs[] =
+ {
+ "-something",
+ "andAnother",
+ };
+
+ SLANG_CHECK(downstreamArgs.getArgsByName("a").hasArgs(aArgs, SLANG_COUNT_OF(aArgs)));
+ SLANG_CHECK(downstreamArgs.getArgsByName("c").hasArgs(cArgs, SLANG_COUNT_OF(cArgs)));
+
+ SLANG_CHECK(args.hasArgs(mainArgs, SLANG_COUNT_OF(mainArgs)) && sink.getErrorCount() == 0);
+ }
+
+}
+
+SLANG_UNIT_TEST("CommandLineArgs", commandLineArgsUnitTest);