diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2021-04-29 15:45:25 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-29 15:45:25 -0400 |
| commit | ad6f3070251f25cf022c231b8567d78e98061127 (patch) | |
| tree | 1fa9d2058f8e86710a9e716e493473217b6dff77 /tools | |
| parent | 972bd3c4c24b06501c52127416afb763a066b8ad (diff) | |
Simplify CommandLine by removing Escaping (#1825)
* #include an absolute path didn't work - because paths were taken to always be relative.
* Split out StringEscapeUtil.
* Added StringEscapeUtil.
* Fix typo in unix quoting type.
* Small comment improvements.
* Try to fix linux linking issue.
* Fix typo.
* Attempt to fix linux link issue.
* Update VS proj even though nothing really changed.
* Fix another typo issue.
* Fix for windows issue.
Fixed bug.
* Make separate Utils for escaping.
* Fix typo.
* Split out into StringEscapeHandler.
* Windows shell does handle removing quotes (so remove code to remove them).
* Handle unescaping if not initiating using the shell.
* Slight improvement around shell like decoding.
* Simplify command extraction.
* Add shared-library category type.
* Fix bug in command extraction.
* Typo in transcendental category.
* Enable unit-test on in smoke test category.
* Make parsing failing output as a failing test.
* Fixes for transcendental tests. Disable tests that do not work.
* Changed category parsing.
* Removed the TestResult parameter from _gatherTestsForFile.
Made testsList only output.
* Remove testing if all tests were disabled.
* Make args of CommandLine always unescaped.
* Add category.
* Don't need escaping on unix/linux.
* Remove some no longer used functions.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/render-test/options.cpp | 6 | ||||
| -rw-r--r-- | tools/render-test/options.h | 2 | ||||
| -rw-r--r-- | tools/render-test/slang-support.cpp | 2 | ||||
| -rw-r--r-- | tools/render-test/slang-support.h | 2 | ||||
| -rw-r--r-- | tools/slang-test/slang-test-main.cpp | 42 |
5 files changed, 15 insertions, 39 deletions
diff --git a/tools/render-test/options.cpp b/tools/render-test/options.cpp index b5d75adf2..dcf0b77b1 100644 --- a/tools/render-test/options.cpp +++ b/tools/render-test/options.cpp @@ -168,10 +168,8 @@ static SlangResult _setRendererType(DeviceType type, const char* arg, Slang::Wri return SLANG_FAIL; } - CommandLine::Arg arg; - arg.type = CommandLine::ArgType::Escaped; - arg.value = *argCursor++; - outOptions.compileArgs.add(arg); + const char* compileArg = *argCursor++; + outOptions.compileArgs.add(compileArg); } else if (strcmp(arg, "-performance-profile") == 0) { diff --git a/tools/render-test/options.h b/tools/render-test/options.h index 6ca1ef499..2945113fe 100644 --- a/tools/render-test/options.h +++ b/tools/render-test/options.h @@ -73,7 +73,7 @@ struct Options Slang::List<Slang::String> renderFeatures; /// Required render features for this test to run - Slang::List<Slang::CommandLine::Arg> compileArgs; + Slang::List<Slang::String> compileArgs; Slang::String adapter; ///< The adapter to use either name or index diff --git a/tools/render-test/slang-support.cpp b/tools/render-test/slang-support.cpp index 840b0d3e2..5470ea35a 100644 --- a/tools/render-test/slang-support.cpp +++ b/tools/render-test/slang-support.cpp @@ -93,7 +93,7 @@ void ShaderCompilerUtil::Output::reset() List<const char*> args; for (const auto& arg : request.compileArgs) { - args.add(arg.value.getBuffer()); + args.add(arg.getBuffer()); } SLANG_RETURN_ON_FAIL(spProcessCommandLineArguments(slangRequest, args.getBuffer(), int(args.getCount()))); } diff --git a/tools/render-test/slang-support.h b/tools/render-test/slang-support.h index 7e00a2c72..59d422bc7 100644 --- a/tools/render-test/slang-support.h +++ b/tools/render-test/slang-support.h @@ -39,7 +39,7 @@ struct ShaderCompileRequest Slang::List<Slang::String> globalSpecializationArgs; Slang::List<Slang::String> entryPointSpecializationArgs; - Slang::List<Slang::CommandLine::Arg> compileArgs; + Slang::List<Slang::String> compileArgs; }; diff --git a/tools/slang-test/slang-test-main.cpp b/tools/slang-test/slang-test-main.cpp index 3a9b15648..530d9a115 100644 --- a/tools/slang-test/slang-test-main.cpp +++ b/tools/slang-test/slang-test-main.cpp @@ -553,24 +553,6 @@ Result spawnAndWaitExe(TestContext* context, const String& testPath, const Comma return res; } -static const char* _getUnescaped(StringEscapeHandler* handler, const CommandLine::Arg& arg, MemoryArena& arena) -{ - if (arg.type == CommandLine::ArgType::Escaped) - { - StringBuilder buf; - StringEscapeUtil::unescapeShellLike(handler, arg.value.getUnownedSlice(), buf); - - // We strictly only need to allocate if the result is different. - // That an arg marked as 'escaped' does not mean it produces a different result when decoding. - if (buf != arg.value) - { - return arena.allocateString(buf.getBuffer(), buf.getLength()); - } - } - - return arg.value.getBuffer(); -} - Result spawnAndWaitSharedLibrary(TestContext* context, const String& testPath, const CommandLine& cmdLine, ExecuteResult& outRes) { const auto& options = context->options; @@ -618,19 +600,11 @@ Result spawnAndWaitSharedLibrary(TestContext* context, const String& testPath, c String exePath = Path::combine(context->exeDirectoryPath, exeName); - - // Use the arena to hold any unescaped strings - MemoryArena arena(1024); List<const char*> args; - args.add(exePath.getBuffer()); - + for (const auto& cmdArg : cmdLine.m_args) { - auto escapeHandler = ProcessUtil::getEscapeHandler(); - for (Index i = 0; i < cmdLine.m_args.getCount(); ++i) - { - args.add(_getUnescaped(escapeHandler, cmdLine.m_args[i], arena)); - } + args.add(cmdArg.getBuffer()); } SlangResult res = func(&stdWriters, context->getSession(), int(args.getCount()), args.begin()); @@ -656,7 +630,7 @@ static SlangResult _extractArg(const CommandLine& cmdLine, const String& argName if (index >= 0 && index < cmdLine.getArgCount() - 1) { - outValue = cmdLine.m_args[index + 1].value; + outValue = cmdLine.m_args[index + 1]; return SLANG_OK; } return SLANG_FAIL; @@ -738,7 +712,7 @@ static SlangResult _extractRenderTestRequirements(const CommandLine& cmdLine, Te for (const auto& arg: args) { - Slang::UnownedStringSlice argSlice = arg.value.getUnownedSlice(); + Slang::UnownedStringSlice argSlice = arg.getUnownedSlice(); if (argSlice.getLength() && argSlice[0] == '-') { // Look up the rendering API if set @@ -1438,12 +1412,16 @@ TestResult runCompile(TestContext* context, TestInput& input) CommandLine cmdLine; _initSlangCompiler(context, cmdLine); + StringEscapeHandler* escapeHandler = StringEscapeUtil::getHandler(StringEscapeUtil::Style::Space); + for (auto arg : input.testOptions->args) { // If there is a quote in the string, assume it is 'escaped'. - if (arg.indexOf('"') >= 0) + if (arg.indexOf(escapeHandler->getQuoteChar()) >= 0) { - cmdLine.addEscapedArg(arg); + StringBuilder buf; + StringEscapeUtil::unescapeShellLike(escapeHandler, arg.getUnownedSlice(), buf); + cmdLine.addArg(buf.ProduceString()); } else { |
