15934a791SAdam Czachorowski //===-- RawStringLiteralTests.cpp -------------------------------*- C++ -*-===// 25934a791SAdam Czachorowski // 35934a791SAdam Czachorowski // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 45934a791SAdam Czachorowski // See https://llvm.org/LICENSE.txt for license information. 55934a791SAdam Czachorowski // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65934a791SAdam Czachorowski // 75934a791SAdam Czachorowski //===----------------------------------------------------------------------===// 85934a791SAdam Czachorowski 95934a791SAdam Czachorowski #include "TweakTesting.h" 105934a791SAdam Czachorowski #include "gmock/gmock-matchers.h" 115934a791SAdam Czachorowski #include "gmock/gmock.h" 125934a791SAdam Czachorowski #include "gtest/gtest.h" 135934a791SAdam Czachorowski 145934a791SAdam Czachorowski namespace clang { 155934a791SAdam Czachorowski namespace clangd { 165934a791SAdam Czachorowski namespace { 175934a791SAdam Czachorowski 185934a791SAdam Czachorowski TWEAK_TEST(RawStringLiteral); 195934a791SAdam Czachorowski TEST_F(RawStringLiteralTest,Test)205934a791SAdam CzachorowskiTEST_F(RawStringLiteralTest, Test) { 215934a791SAdam Czachorowski Context = Expression; 225934a791SAdam Czachorowski EXPECT_AVAILABLE(R"cpp(^"^f^o^o^\^n^")cpp"); 235934a791SAdam Czachorowski EXPECT_AVAILABLE(R"cpp(R"(multi )" ^"token " "str\ning")cpp"); 245934a791SAdam Czachorowski EXPECT_UNAVAILABLE(R"cpp(^"f^o^o^o")cpp"); // no chars need escaping 255934a791SAdam Czachorowski EXPECT_UNAVAILABLE(R"cpp(R"(multi )" ^"token " u8"str\ning")cpp"); // nonascii 265934a791SAdam Czachorowski EXPECT_UNAVAILABLE(R"cpp(^R^"^(^multi )" "token " "str\ning")cpp"); // raw 275934a791SAdam Czachorowski EXPECT_UNAVAILABLE(R"cpp(^"token\n" __FILE__)cpp"); // chunk is macro 285934a791SAdam Czachorowski EXPECT_UNAVAILABLE(R"cpp(^"a\r\n";)cpp"); // forbidden escape char 295934a791SAdam Czachorowski 305934a791SAdam Czachorowski const char *Input = R"cpp(R"(multi 315934a791SAdam Czachorowski token)" "\nst^ring\n" "literal")cpp"; 325934a791SAdam Czachorowski const char *Output = R"cpp(R"(multi 335934a791SAdam Czachorowski token 345934a791SAdam Czachorowski string 355934a791SAdam Czachorowski literal)")cpp"; 365934a791SAdam Czachorowski EXPECT_EQ(apply(Input), Output); 375934a791SAdam Czachorowski } 385934a791SAdam Czachorowski TEST_F(RawStringLiteralTest,TestC)39*2f3d4f6cSrobozatiTEST_F(RawStringLiteralTest, TestC) { 40*2f3d4f6cSrobozati Context = File; 41*2f3d4f6cSrobozati FileName = "TestTU.c"; 42*2f3d4f6cSrobozati ExtraArgs = {"-xc"}; // raw strings are unavailable in C 43*2f3d4f6cSrobozati EXPECT_UNAVAILABLE(R"c(const char *a = ^"^f^o^o^\^n^";)c"); 44*2f3d4f6cSrobozati } 45*2f3d4f6cSrobozati TEST_F(RawStringLiteralTest,TestCpp98)46*2f3d4f6cSrobozatiTEST_F(RawStringLiteralTest, TestCpp98) { 47*2f3d4f6cSrobozati Context = File; 48*2f3d4f6cSrobozati ExtraArgs = {"-std=c++98"}; // raw strings are unavailable 49*2f3d4f6cSrobozati // in versions prior to C++11 50*2f3d4f6cSrobozati EXPECT_UNAVAILABLE(R"cpp(const char *a = ^"^f^o^o^\^n^";)cpp"); 51*2f3d4f6cSrobozati } 52*2f3d4f6cSrobozati 535934a791SAdam Czachorowski } // namespace 545934a791SAdam Czachorowski } // namespace clangd 555934a791SAdam Czachorowski } // namespace clang 56