summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2021-04-29 15:45:25 -0400
committerGitHub <noreply@github.com>2021-04-29 15:45:25 -0400
commitad6f3070251f25cf022c231b8567d78e98061127 (patch)
tree1fa9d2058f8e86710a9e716e493473217b6dff77 /tools
parent972bd3c4c24b06501c52127416afb763a066b8ad (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.cpp6
-rw-r--r--tools/render-test/options.h2
-rw-r--r--tools/render-test/slang-support.cpp2
-rw-r--r--tools/render-test/slang-support.h2
-rw-r--r--tools/slang-test/slang-test-main.cpp42
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
{