CharInfoTest.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. //===- unittests/Basic/CharInfoTest.cpp -- ASCII classification tests -----===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "clang/Basic/CharInfo.h"
  10. #include "gtest/gtest.h"
  11. using namespace llvm;
  12. using namespace clang;
  13. // Check that the CharInfo table has been constructed reasonably.
  14. TEST(CharInfoTest, validateInfoTable) {
  15. using namespace charinfo;
  16. EXPECT_EQ((unsigned)CHAR_SPACE, InfoTable[(unsigned)' ']);
  17. EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\t']);
  18. EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\f']); // ??
  19. EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\v']); // ??
  20. EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\n']);
  21. EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\r']);
  22. EXPECT_EQ((unsigned)CHAR_UNDER, InfoTable[(unsigned)'_']);
  23. EXPECT_EQ((unsigned)CHAR_PERIOD, InfoTable[(unsigned)'.']);
  24. for (unsigned i = 'a'; i <= 'f'; ++i) {
  25. EXPECT_EQ((unsigned)CHAR_XLOWER, InfoTable[i]);
  26. EXPECT_EQ((unsigned)CHAR_XUPPER, InfoTable[i+'A'-'a']);
  27. }
  28. for (unsigned i = 'g'; i <= 'z'; ++i) {
  29. EXPECT_EQ((unsigned)CHAR_LOWER, InfoTable[i]);
  30. EXPECT_EQ((unsigned)CHAR_UPPER, InfoTable[i+'A'-'a']);
  31. }
  32. for (unsigned i = '0'; i <= '9'; ++i)
  33. EXPECT_EQ((unsigned)CHAR_DIGIT, InfoTable[i]);
  34. }
  35. // Check various predicates.
  36. TEST(CharInfoTest, isASCII) {
  37. EXPECT_TRUE(isASCII('\0'));
  38. EXPECT_TRUE(isASCII('\n'));
  39. EXPECT_TRUE(isASCII(' '));
  40. EXPECT_TRUE(isASCII('a'));
  41. EXPECT_TRUE(isASCII('\x7f'));
  42. EXPECT_FALSE(isASCII('\x80'));
  43. EXPECT_FALSE(isASCII('\xc2'));
  44. EXPECT_FALSE(isASCII('\xff'));
  45. }
  46. TEST(CharInfoTest, isIdentifierHead) {
  47. EXPECT_TRUE(isIdentifierHead('a'));
  48. EXPECT_TRUE(isIdentifierHead('A'));
  49. EXPECT_TRUE(isIdentifierHead('z'));
  50. EXPECT_TRUE(isIdentifierHead('Z'));
  51. EXPECT_TRUE(isIdentifierHead('_'));
  52. EXPECT_FALSE(isIdentifierHead('0'));
  53. EXPECT_FALSE(isIdentifierHead('.'));
  54. EXPECT_FALSE(isIdentifierHead('`'));
  55. EXPECT_FALSE(isIdentifierHead('\0'));
  56. EXPECT_FALSE(isIdentifierHead('$'));
  57. EXPECT_TRUE(isIdentifierHead('$', /*AllowDollar=*/true));
  58. EXPECT_FALSE(isIdentifierHead('\x80'));
  59. EXPECT_FALSE(isIdentifierHead('\xc2'));
  60. EXPECT_FALSE(isIdentifierHead('\xff'));
  61. }
  62. TEST(CharInfoTest, isIdentifierBody) {
  63. EXPECT_TRUE(isIdentifierBody('a'));
  64. EXPECT_TRUE(isIdentifierBody('A'));
  65. EXPECT_TRUE(isIdentifierBody('z'));
  66. EXPECT_TRUE(isIdentifierBody('Z'));
  67. EXPECT_TRUE(isIdentifierBody('_'));
  68. EXPECT_TRUE(isIdentifierBody('0'));
  69. EXPECT_FALSE(isIdentifierBody('.'));
  70. EXPECT_FALSE(isIdentifierBody('`'));
  71. EXPECT_FALSE(isIdentifierBody('\0'));
  72. EXPECT_FALSE(isIdentifierBody('$'));
  73. EXPECT_TRUE(isIdentifierBody('$', /*AllowDollar=*/true));
  74. EXPECT_FALSE(isIdentifierBody('\x80'));
  75. EXPECT_FALSE(isIdentifierBody('\xc2'));
  76. EXPECT_FALSE(isIdentifierBody('\xff'));
  77. }
  78. TEST(CharInfoTest, isHorizontalWhitespace) {
  79. EXPECT_FALSE(isHorizontalWhitespace('a'));
  80. EXPECT_FALSE(isHorizontalWhitespace('_'));
  81. EXPECT_FALSE(isHorizontalWhitespace('0'));
  82. EXPECT_FALSE(isHorizontalWhitespace('.'));
  83. EXPECT_FALSE(isHorizontalWhitespace('`'));
  84. EXPECT_FALSE(isHorizontalWhitespace('\0'));
  85. EXPECT_FALSE(isHorizontalWhitespace('\x7f'));
  86. EXPECT_TRUE(isHorizontalWhitespace(' '));
  87. EXPECT_TRUE(isHorizontalWhitespace('\t'));
  88. EXPECT_TRUE(isHorizontalWhitespace('\f')); // ??
  89. EXPECT_TRUE(isHorizontalWhitespace('\v')); // ??
  90. EXPECT_FALSE(isHorizontalWhitespace('\n'));
  91. EXPECT_FALSE(isHorizontalWhitespace('\r'));
  92. EXPECT_FALSE(isHorizontalWhitespace('\x80'));
  93. EXPECT_FALSE(isHorizontalWhitespace('\xc2'));
  94. EXPECT_FALSE(isHorizontalWhitespace('\xff'));
  95. }
  96. TEST(CharInfoTest, isVerticalWhitespace) {
  97. EXPECT_FALSE(isVerticalWhitespace('a'));
  98. EXPECT_FALSE(isVerticalWhitespace('_'));
  99. EXPECT_FALSE(isVerticalWhitespace('0'));
  100. EXPECT_FALSE(isVerticalWhitespace('.'));
  101. EXPECT_FALSE(isVerticalWhitespace('`'));
  102. EXPECT_FALSE(isVerticalWhitespace('\0'));
  103. EXPECT_FALSE(isVerticalWhitespace('\x7f'));
  104. EXPECT_FALSE(isVerticalWhitespace(' '));
  105. EXPECT_FALSE(isVerticalWhitespace('\t'));
  106. EXPECT_FALSE(isVerticalWhitespace('\f')); // ??
  107. EXPECT_FALSE(isVerticalWhitespace('\v')); // ??
  108. EXPECT_TRUE(isVerticalWhitespace('\n'));
  109. EXPECT_TRUE(isVerticalWhitespace('\r'));
  110. EXPECT_FALSE(isVerticalWhitespace('\x80'));
  111. EXPECT_FALSE(isVerticalWhitespace('\xc2'));
  112. EXPECT_FALSE(isVerticalWhitespace('\xff'));
  113. }
  114. TEST(CharInfoTest, isWhitespace) {
  115. EXPECT_FALSE(isWhitespace('a'));
  116. EXPECT_FALSE(isWhitespace('_'));
  117. EXPECT_FALSE(isWhitespace('0'));
  118. EXPECT_FALSE(isWhitespace('.'));
  119. EXPECT_FALSE(isWhitespace('`'));
  120. EXPECT_FALSE(isWhitespace('\0'));
  121. EXPECT_FALSE(isWhitespace('\x7f'));
  122. EXPECT_TRUE(isWhitespace(' '));
  123. EXPECT_TRUE(isWhitespace('\t'));
  124. EXPECT_TRUE(isWhitespace('\f'));
  125. EXPECT_TRUE(isWhitespace('\v'));
  126. EXPECT_TRUE(isWhitespace('\n'));
  127. EXPECT_TRUE(isWhitespace('\r'));
  128. EXPECT_FALSE(isWhitespace('\x80'));
  129. EXPECT_FALSE(isWhitespace('\xc2'));
  130. EXPECT_FALSE(isWhitespace('\xff'));
  131. }
  132. TEST(CharInfoTest, isDigit) {
  133. EXPECT_TRUE(isDigit('0'));
  134. EXPECT_TRUE(isDigit('9'));
  135. EXPECT_FALSE(isDigit('a'));
  136. EXPECT_FALSE(isDigit('A'));
  137. EXPECT_FALSE(isDigit('z'));
  138. EXPECT_FALSE(isDigit('Z'));
  139. EXPECT_FALSE(isDigit('.'));
  140. EXPECT_FALSE(isDigit('_'));
  141. EXPECT_FALSE(isDigit('/'));
  142. EXPECT_FALSE(isDigit('\0'));
  143. EXPECT_FALSE(isDigit('\x80'));
  144. EXPECT_FALSE(isDigit('\xc2'));
  145. EXPECT_FALSE(isDigit('\xff'));
  146. }
  147. TEST(CharInfoTest, isHexDigit) {
  148. EXPECT_TRUE(isHexDigit('0'));
  149. EXPECT_TRUE(isHexDigit('9'));
  150. EXPECT_TRUE(isHexDigit('a'));
  151. EXPECT_TRUE(isHexDigit('A'));
  152. EXPECT_FALSE(isHexDigit('z'));
  153. EXPECT_FALSE(isHexDigit('Z'));
  154. EXPECT_FALSE(isHexDigit('.'));
  155. EXPECT_FALSE(isHexDigit('_'));
  156. EXPECT_FALSE(isHexDigit('/'));
  157. EXPECT_FALSE(isHexDigit('\0'));
  158. EXPECT_FALSE(isHexDigit('\x80'));
  159. EXPECT_FALSE(isHexDigit('\xc2'));
  160. EXPECT_FALSE(isHexDigit('\xff'));
  161. }
  162. TEST(CharInfoTest, isLetter) {
  163. EXPECT_FALSE(isLetter('0'));
  164. EXPECT_FALSE(isLetter('9'));
  165. EXPECT_TRUE(isLetter('a'));
  166. EXPECT_TRUE(isLetter('A'));
  167. EXPECT_TRUE(isLetter('z'));
  168. EXPECT_TRUE(isLetter('Z'));
  169. EXPECT_FALSE(isLetter('.'));
  170. EXPECT_FALSE(isLetter('_'));
  171. EXPECT_FALSE(isLetter('/'));
  172. EXPECT_FALSE(isLetter('('));
  173. EXPECT_FALSE(isLetter('\0'));
  174. EXPECT_FALSE(isLetter('\x80'));
  175. EXPECT_FALSE(isLetter('\xc2'));
  176. EXPECT_FALSE(isLetter('\xff'));
  177. }
  178. TEST(CharInfoTest, isLowercase) {
  179. EXPECT_FALSE(isLowercase('0'));
  180. EXPECT_FALSE(isLowercase('9'));
  181. EXPECT_TRUE(isLowercase('a'));
  182. EXPECT_FALSE(isLowercase('A'));
  183. EXPECT_TRUE(isLowercase('z'));
  184. EXPECT_FALSE(isLowercase('Z'));
  185. EXPECT_FALSE(isLowercase('.'));
  186. EXPECT_FALSE(isLowercase('_'));
  187. EXPECT_FALSE(isLowercase('/'));
  188. EXPECT_FALSE(isLowercase('('));
  189. EXPECT_FALSE(isLowercase('\0'));
  190. EXPECT_FALSE(isLowercase('\x80'));
  191. EXPECT_FALSE(isLowercase('\xc2'));
  192. EXPECT_FALSE(isLowercase('\xff'));
  193. }
  194. TEST(CharInfoTest, isUppercase) {
  195. EXPECT_FALSE(isUppercase('0'));
  196. EXPECT_FALSE(isUppercase('9'));
  197. EXPECT_FALSE(isUppercase('a'));
  198. EXPECT_TRUE(isUppercase('A'));
  199. EXPECT_FALSE(isUppercase('z'));
  200. EXPECT_TRUE(isUppercase('Z'));
  201. EXPECT_FALSE(isUppercase('.'));
  202. EXPECT_FALSE(isUppercase('_'));
  203. EXPECT_FALSE(isUppercase('/'));
  204. EXPECT_FALSE(isUppercase('('));
  205. EXPECT_FALSE(isUppercase('\0'));
  206. EXPECT_FALSE(isUppercase('\x80'));
  207. EXPECT_FALSE(isUppercase('\xc2'));
  208. EXPECT_FALSE(isUppercase('\xff'));
  209. }
  210. TEST(CharInfoTest, isAlphanumeric) {
  211. EXPECT_TRUE(isAlphanumeric('0'));
  212. EXPECT_TRUE(isAlphanumeric('9'));
  213. EXPECT_TRUE(isAlphanumeric('a'));
  214. EXPECT_TRUE(isAlphanumeric('A'));
  215. EXPECT_TRUE(isAlphanumeric('z'));
  216. EXPECT_TRUE(isAlphanumeric('Z'));
  217. EXPECT_FALSE(isAlphanumeric('.'));
  218. EXPECT_FALSE(isAlphanumeric('_'));
  219. EXPECT_FALSE(isAlphanumeric('/'));
  220. EXPECT_FALSE(isAlphanumeric('('));
  221. EXPECT_FALSE(isAlphanumeric('\0'));
  222. EXPECT_FALSE(isAlphanumeric('\x80'));
  223. EXPECT_FALSE(isAlphanumeric('\xc2'));
  224. EXPECT_FALSE(isAlphanumeric('\xff'));
  225. }
  226. TEST(CharInfoTest, isPunctuation) {
  227. EXPECT_FALSE(isPunctuation('0'));
  228. EXPECT_FALSE(isPunctuation('9'));
  229. EXPECT_FALSE(isPunctuation('a'));
  230. EXPECT_FALSE(isPunctuation('A'));
  231. EXPECT_FALSE(isPunctuation('z'));
  232. EXPECT_FALSE(isPunctuation('Z'));
  233. EXPECT_TRUE(isPunctuation('.'));
  234. EXPECT_TRUE(isPunctuation('_'));
  235. EXPECT_TRUE(isPunctuation('/'));
  236. EXPECT_TRUE(isPunctuation('('));
  237. EXPECT_FALSE(isPunctuation(' '));
  238. EXPECT_FALSE(isPunctuation('\n'));
  239. EXPECT_FALSE(isPunctuation('\0'));
  240. EXPECT_FALSE(isPunctuation('\x80'));
  241. EXPECT_FALSE(isPunctuation('\xc2'));
  242. EXPECT_FALSE(isPunctuation('\xff'));
  243. }
  244. TEST(CharInfoTest, isPrintable) {
  245. EXPECT_TRUE(isPrintable('0'));
  246. EXPECT_TRUE(isPrintable('9'));
  247. EXPECT_TRUE(isPrintable('a'));
  248. EXPECT_TRUE(isPrintable('A'));
  249. EXPECT_TRUE(isPrintable('z'));
  250. EXPECT_TRUE(isPrintable('Z'));
  251. EXPECT_TRUE(isPrintable('.'));
  252. EXPECT_TRUE(isPrintable('_'));
  253. EXPECT_TRUE(isPrintable('/'));
  254. EXPECT_TRUE(isPrintable('('));
  255. EXPECT_TRUE(isPrintable(' '));
  256. EXPECT_FALSE(isPrintable('\t'));
  257. EXPECT_FALSE(isPrintable('\n'));
  258. EXPECT_FALSE(isPrintable('\0'));
  259. EXPECT_FALSE(isPrintable('\x80'));
  260. EXPECT_FALSE(isPrintable('\xc2'));
  261. EXPECT_FALSE(isPrintable('\xff'));
  262. }
  263. TEST(CharInfoTest, isPreprocessingNumberBody) {
  264. EXPECT_TRUE(isPreprocessingNumberBody('0'));
  265. EXPECT_TRUE(isPreprocessingNumberBody('9'));
  266. EXPECT_TRUE(isPreprocessingNumberBody('a'));
  267. EXPECT_TRUE(isPreprocessingNumberBody('A'));
  268. EXPECT_TRUE(isPreprocessingNumberBody('z'));
  269. EXPECT_TRUE(isPreprocessingNumberBody('Z'));
  270. EXPECT_TRUE(isPreprocessingNumberBody('.'));
  271. EXPECT_TRUE(isPreprocessingNumberBody('_'));
  272. EXPECT_FALSE(isPreprocessingNumberBody('/'));
  273. EXPECT_FALSE(isPreprocessingNumberBody('('));
  274. EXPECT_FALSE(isPreprocessingNumberBody('\0'));
  275. EXPECT_FALSE(isPreprocessingNumberBody('\x80'));
  276. EXPECT_FALSE(isPreprocessingNumberBody('\xc2'));
  277. EXPECT_FALSE(isPreprocessingNumberBody('\xff'));
  278. }
  279. TEST(CharInfoTest, isRawStringDelimBody) {
  280. EXPECT_TRUE(isRawStringDelimBody('0'));
  281. EXPECT_TRUE(isRawStringDelimBody('9'));
  282. EXPECT_TRUE(isRawStringDelimBody('a'));
  283. EXPECT_TRUE(isRawStringDelimBody('A'));
  284. EXPECT_TRUE(isRawStringDelimBody('z'));
  285. EXPECT_TRUE(isRawStringDelimBody('Z'));
  286. EXPECT_TRUE(isRawStringDelimBody('.'));
  287. EXPECT_TRUE(isRawStringDelimBody('_'));
  288. EXPECT_TRUE(isRawStringDelimBody('/'));
  289. EXPECT_FALSE(isRawStringDelimBody('('));
  290. EXPECT_FALSE(isRawStringDelimBody('\0'));
  291. EXPECT_FALSE(isRawStringDelimBody('\x80'));
  292. EXPECT_FALSE(isRawStringDelimBody('\xc2'));
  293. EXPECT_FALSE(isRawStringDelimBody('\xff'));
  294. }
  295. TEST(CharInfoTest, toLowercase) {
  296. EXPECT_EQ('0', toLowercase('0'));
  297. EXPECT_EQ('9', toLowercase('9'));
  298. EXPECT_EQ('a', toLowercase('a'));
  299. EXPECT_EQ('a', toLowercase('A'));
  300. EXPECT_EQ('z', toLowercase('z'));
  301. EXPECT_EQ('z', toLowercase('Z'));
  302. EXPECT_EQ('.', toLowercase('.'));
  303. EXPECT_EQ('_', toLowercase('_'));
  304. EXPECT_EQ('/', toLowercase('/'));
  305. EXPECT_EQ('\0', toLowercase('\0'));
  306. }
  307. TEST(CharInfoTest, toUppercase) {
  308. EXPECT_EQ('0', toUppercase('0'));
  309. EXPECT_EQ('9', toUppercase('9'));
  310. EXPECT_EQ('A', toUppercase('a'));
  311. EXPECT_EQ('A', toUppercase('A'));
  312. EXPECT_EQ('Z', toUppercase('z'));
  313. EXPECT_EQ('Z', toUppercase('Z'));
  314. EXPECT_EQ('.', toUppercase('.'));
  315. EXPECT_EQ('_', toUppercase('_'));
  316. EXPECT_EQ('/', toUppercase('/'));
  317. EXPECT_EQ('\0', toUppercase('\0'));
  318. }
  319. TEST(CharInfoTest, isValidIdentifier) {
  320. EXPECT_FALSE(isValidIdentifier(""));
  321. // 1 character
  322. EXPECT_FALSE(isValidIdentifier("."));
  323. EXPECT_FALSE(isValidIdentifier("\n"));
  324. EXPECT_FALSE(isValidIdentifier(" "));
  325. EXPECT_FALSE(isValidIdentifier("\x80"));
  326. EXPECT_FALSE(isValidIdentifier("\xc2"));
  327. EXPECT_FALSE(isValidIdentifier("\xff"));
  328. EXPECT_FALSE(isValidIdentifier("$"));
  329. EXPECT_FALSE(isValidIdentifier("1"));
  330. EXPECT_TRUE(isValidIdentifier("_"));
  331. EXPECT_TRUE(isValidIdentifier("a"));
  332. EXPECT_TRUE(isValidIdentifier("z"));
  333. EXPECT_TRUE(isValidIdentifier("A"));
  334. EXPECT_TRUE(isValidIdentifier("Z"));
  335. // 2 characters, '_' suffix
  336. EXPECT_FALSE(isValidIdentifier("._"));
  337. EXPECT_FALSE(isValidIdentifier("\n_"));
  338. EXPECT_FALSE(isValidIdentifier(" _"));
  339. EXPECT_FALSE(isValidIdentifier("\x80_"));
  340. EXPECT_FALSE(isValidIdentifier("\xc2_"));
  341. EXPECT_FALSE(isValidIdentifier("\xff_"));
  342. EXPECT_FALSE(isValidIdentifier("$_"));
  343. EXPECT_FALSE(isValidIdentifier("1_"));
  344. EXPECT_TRUE(isValidIdentifier("__"));
  345. EXPECT_TRUE(isValidIdentifier("a_"));
  346. EXPECT_TRUE(isValidIdentifier("z_"));
  347. EXPECT_TRUE(isValidIdentifier("A_"));
  348. EXPECT_TRUE(isValidIdentifier("Z_"));
  349. // 2 characters, '_' prefix
  350. EXPECT_FALSE(isValidIdentifier("_."));
  351. EXPECT_FALSE(isValidIdentifier("_\n"));
  352. EXPECT_FALSE(isValidIdentifier("_ "));
  353. EXPECT_FALSE(isValidIdentifier("_\x80"));
  354. EXPECT_FALSE(isValidIdentifier("_\xc2"));
  355. EXPECT_FALSE(isValidIdentifier("_\xff"));
  356. EXPECT_FALSE(isValidIdentifier("_$"));
  357. EXPECT_TRUE(isValidIdentifier("_1"));
  358. EXPECT_TRUE(isValidIdentifier("__"));
  359. EXPECT_TRUE(isValidIdentifier("_a"));
  360. EXPECT_TRUE(isValidIdentifier("_z"));
  361. EXPECT_TRUE(isValidIdentifier("_A"));
  362. EXPECT_TRUE(isValidIdentifier("_Z"));
  363. // 3 characters, '__' prefix
  364. EXPECT_FALSE(isValidIdentifier("__."));
  365. EXPECT_FALSE(isValidIdentifier("__\n"));
  366. EXPECT_FALSE(isValidIdentifier("__ "));
  367. EXPECT_FALSE(isValidIdentifier("__\x80"));
  368. EXPECT_FALSE(isValidIdentifier("__\xc2"));
  369. EXPECT_FALSE(isValidIdentifier("__\xff"));
  370. EXPECT_FALSE(isValidIdentifier("__$"));
  371. EXPECT_TRUE(isValidIdentifier("__1"));
  372. EXPECT_TRUE(isValidIdentifier("___"));
  373. EXPECT_TRUE(isValidIdentifier("__a"));
  374. EXPECT_TRUE(isValidIdentifier("__z"));
  375. EXPECT_TRUE(isValidIdentifier("__A"));
  376. EXPECT_TRUE(isValidIdentifier("__Z"));
  377. // 3 characters, '_' prefix and suffix
  378. EXPECT_FALSE(isValidIdentifier("_._"));
  379. EXPECT_FALSE(isValidIdentifier("_\n_"));
  380. EXPECT_FALSE(isValidIdentifier("_ _"));
  381. EXPECT_FALSE(isValidIdentifier("_\x80_"));
  382. EXPECT_FALSE(isValidIdentifier("_\xc2_"));
  383. EXPECT_FALSE(isValidIdentifier("_\xff_"));
  384. EXPECT_FALSE(isValidIdentifier("_$_"));
  385. EXPECT_TRUE(isValidIdentifier("_1_"));
  386. EXPECT_TRUE(isValidIdentifier("___"));
  387. EXPECT_TRUE(isValidIdentifier("_a_"));
  388. EXPECT_TRUE(isValidIdentifier("_z_"));
  389. EXPECT_TRUE(isValidIdentifier("_A_"));
  390. EXPECT_TRUE(isValidIdentifier("_Z_"));
  391. }