binary_to_text.literal_test.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright (c) 2015-2016 The Khronos Group Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. #include <string>
  15. #include <utility>
  16. #include <vector>
  17. #include "gmock/gmock.h"
  18. #include "test/test_fixture.h"
  19. #include "test/unit_spirv.h"
  20. namespace spvtools {
  21. namespace {
  22. using ::testing::Eq;
  23. using RoundTripLiteralsTest =
  24. spvtest::TextToBinaryTestBase<::testing::TestWithParam<std::string>>;
  25. static const bool kSwapEndians[] = {false, true};
  26. TEST_P(RoundTripLiteralsTest, Sample) {
  27. for (bool endian_swap : kSwapEndians) {
  28. EXPECT_THAT(
  29. EncodeAndDecodeSuccessfully(GetParam(), SPV_BINARY_TO_TEXT_OPTION_NONE,
  30. SPV_ENV_UNIVERSAL_1_0, endian_swap),
  31. Eq(GetParam()));
  32. }
  33. }
  34. // clang-format off
  35. INSTANTIATE_TEST_SUITE_P(
  36. StringLiterals, RoundTripLiteralsTest,
  37. ::testing::ValuesIn(std::vector<std::string>{
  38. "OpName %1 \"\"\n", // empty
  39. "OpName %1 \"foo\"\n", // normal
  40. "OpName %1 \"foo bar\"\n", // string with spaces
  41. "OpName %1 \"foo\tbar\"\n", // string with tab
  42. "OpName %1 \"\tfoo\"\n", // starts with tab
  43. "OpName %1 \" foo\"\n", // starts with space
  44. "OpName %1 \"foo \"\n", // ends with space
  45. "OpName %1 \"foo\t\"\n", // ends with tab
  46. "OpName %1 \"foo\nbar\"\n", // contains newline
  47. "OpName %1 \"\nfoo\nbar\"\n", // starts with newline
  48. "OpName %1 \"\n\n\nfoo\nbar\"\n", // multiple newlines
  49. "OpName %1 \"\\\"foo\nbar\\\"\"\n", // escaped quote
  50. "OpName %1 \"\\\\foo\nbar\\\\\"\n", // escaped backslash
  51. "OpName %1 \"\xE4\xBA\xB2\"\n", // UTF-8
  52. }));
  53. // clang-format on
  54. using RoundTripSpecialCaseLiteralsTest = spvtest::TextToBinaryTestBase<
  55. ::testing::TestWithParam<std::pair<std::string, std::string>>>;
  56. // Test case where the generated disassembly is not the same as the
  57. // assembly passed in.
  58. TEST_P(RoundTripSpecialCaseLiteralsTest, Sample) {
  59. for (bool endian_swap : kSwapEndians) {
  60. EXPECT_THAT(EncodeAndDecodeSuccessfully(std::get<0>(GetParam()),
  61. SPV_BINARY_TO_TEXT_OPTION_NONE,
  62. SPV_ENV_UNIVERSAL_1_0, endian_swap),
  63. Eq(std::get<1>(GetParam())));
  64. }
  65. }
  66. // clang-format off
  67. INSTANTIATE_TEST_SUITE_P(
  68. StringLiterals, RoundTripSpecialCaseLiteralsTest,
  69. ::testing::ValuesIn(std::vector<std::pair<std::string, std::string>>{
  70. {"OpName %1 \"\\foo\"\n", "OpName %1 \"foo\"\n"}, // Escape f
  71. {"OpName %1 \"\\\nfoo\"\n", "OpName %1 \"\nfoo\"\n"}, // Escape newline
  72. {"OpName %1 \"\\\xE4\xBA\xB2\"\n", "OpName %1 \"\xE4\xBA\xB2\"\n"}, // Escape utf-8
  73. }));
  74. // clang-format on
  75. } // namespace
  76. } // namespace spvtools