diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2022-05-27 17:28:05 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-27 17:28:05 -0400 |
| commit | 2d3392f22c894957d17dd13486e0565c4ecea89c (patch) | |
| tree | ce4dadbd85a59e52725fa6f92613553cd5b29859 /tools | |
| parent | abb89b3e460e11e8f9a134199c2d559190bfc47e (diff) | |
Added NativeStringType (#2252)
* #include an absolute path didn't work - because paths were taken to always be relative.
* Use TerminatedUnownedStringSlice for literals in output C++.
* Remove Escape/Unescape functions used in slang-token-reader.cpp
Add target type of 'host-cpp' etc to map to the target types.
* Fix some corner cases around string encoding.
* Added unit test for string escaping.
Fixed some assorted escaping bugs.
* Updated test output.
* Added decode test.
* Stop using hex output, to get around 'greedy' aspect. Use octal instead.
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/slang-unit-test/unit-test-offset-container.cpp (renamed from tools/slang-unit-test/unit-offset-container.cpp) | 2 | ||||
| -rw-r--r-- | tools/slang-unit-test/unit-test-string-escape.cpp | 79 |
2 files changed, 80 insertions, 1 deletions
diff --git a/tools/slang-unit-test/unit-offset-container.cpp b/tools/slang-unit-test/unit-test-offset-container.cpp index 6a179c319..9d8e3a9ff 100644 --- a/tools/slang-unit-test/unit-offset-container.cpp +++ b/tools/slang-unit-test/unit-test-offset-container.cpp @@ -1,4 +1,4 @@ -// unit-test-path.cpp +// unit-test-offset-container.cpp #include "../../source/core/slang-offset-container.h" diff --git a/tools/slang-unit-test/unit-test-string-escape.cpp b/tools/slang-unit-test/unit-test-string-escape.cpp new file mode 100644 index 000000000..337573081 --- /dev/null +++ b/tools/slang-unit-test/unit-test-string-escape.cpp @@ -0,0 +1,79 @@ +// unit-test-string-escape.cpp + +#include "../../source/core/slang-string-escape-util.h" + +#include "tools/unit-test/slang-unit-test.h" + +using namespace Slang; + +static bool _checkConversion(StringEscapeHandler* handler, const UnownedStringSlice& check) +{ + StringBuilder buf; + handler->appendEscaped(check, buf); + + StringBuilder decode; + handler->appendUnescaped(buf.getUnownedSlice(), decode); + + return decode == check; +} + +static bool _checkDecode(const UnownedStringSlice& encoded, const UnownedStringSlice& decoded) +{ + auto handler = StringEscapeUtil::getHandler(StringEscapeUtil::Style::Cpp); + + StringBuilder buf; + StringEscapeUtil::appendUnquoted(handler, encoded, buf); + return buf == decoded; +} + +#define SLANG_ENCODED_DECODED(x) \ + const auto encoded = toSlice(#x); \ + const auto decoded = toSlice(x); + +SLANG_UNIT_TEST(StringEscape) +{ + // Check greedy hex digits + { + // \x can have any number of hex digits + const char text[] = "\x000001"; + SLANG_ASSERT(SLANG_COUNT_OF(text) == 2 && text[0] == 1); + } + + // Check octal greedy + { + //\ + up to 3 octal digits + const char text[] = "\0011"; + SLANG_ASSERT(SLANG_COUNT_OF(text) == 3 && text[0] == 1 && text[1] == '1'); + + const char text2[] = "\78"; + SLANG_ASSERT(SLANG_COUNT_OF(text2) == 3 && text2[0] == 7 && text2[1] == '8'); + } + + { + auto handler = StringEscapeUtil::getHandler(StringEscapeUtil::Style::Cpp); + + SLANG_CHECK(_checkConversion(handler, toSlice("\0\1\2""2"))); + } + + { + auto handler = StringEscapeUtil::getHandler(StringEscapeUtil::Style::Cpp); + + // We can't just use '\uxxxx', because it has to be translatable into an output character in MSVC (not into utf8) + // Can make work perhaps with something like + // #pragma execution_character_set("utf-8") + // But for now we don't worry + // + // Visual Studio does not appear to support '\U' by default, presumably because wchar_t is 16 bits + + { + SLANG_ENCODED_DECODED("\a\b\0hey~\u0023\n\0"); + SLANG_CHECK(_checkDecode(encoded, decoded)); + } + + { + SLANG_ENCODED_DECODED("\n\v\b\t\1\02\003\x5z\x00007f\0"); + SLANG_CHECK(_checkDecode(encoded, decoded)); + } + } +} + |
