TextEncodingTest.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include "../testTools.h"
  2. String expected_latin1 =
  3. R"QUOTE(Hello my friend.
  4. Hej min vän
  5. Halló, vinur minn
  6. Hei ystäväni
  7. Hola mi amigo
  8. Ciao amico
  9. This is Latin-1)QUOTE";
  10. String unicodeContent =
  11. R"QUOTE(Hello my friend.
  12. Hej min vän
  13. Halló, vinur minn
  14. Hei ystäväni
  15. Hola mi amigo
  16. Ciao amico
  17. 你好我的朋友
  18. こんにちは、友よ
  19. नमस्ते मेरो साथी
  20. Talofa laʻu uo
  21. Xin chào bạn của tôi
  22. העלא מיין פרייַנד
  23. 안녕 내 친구
  24. سلام دوست من
  25. ਹੈਲੋ ਮੇਰੇ ਦੋਸਤ
  26. ওহে, বন্ধু আমার
  27. សួស្តី​សម្លាញ់
  28. Γεια σου φίλε μου
  29. Привет, мой друг
  30. здраво пријатељу
  31. Բարեւ իմ ընկեր
  32. ආයුබෝවන් මාගේ යාළුවා
  33. ಹಲೋ ನನ್ನ ಸ್ನೇಹಿತನೇ
  34. Silav hevalê min
  35. اهلا صديقي
  36. )QUOTE";
  37. String expected_utf8 = unicodeContent + U"\nThis is UTF-8";
  38. String expected_utf16le = unicodeContent + U"\nThis is UTF-16 Little Endian";
  39. String expected_utf16be = unicodeContent + U"\nThis is UTF-8 Big Endian";
  40. void printCharacterCode(uint32_t value) {
  41. for (int i = 0; i < 32; i++) {
  42. if (value & 0b10000000000000000000000000000000) {
  43. printText(U"1");
  44. } else {
  45. printText(U"0");
  46. }
  47. value = value << 1;
  48. }
  49. }
  50. // Method for printing the character codes of a string for debugging
  51. void compareCharacterCodes(String textA, String textB) {
  52. int lengthA = string_length(textA);
  53. int lengthB = string_length(textB);
  54. int minLength = lengthA < lengthB ? lengthA : lengthB;
  55. printText("Character codes for strings of length ", lengthA, U" and ", lengthB, U":\n");
  56. for (int i = 0; i < minLength; i++) {
  57. uint32_t codeA = (uint32_t)textA[i];
  58. uint32_t codeB = (uint32_t)textB[i];
  59. printCharacterCode(codeA);
  60. if (codeA == codeB) {
  61. printText(U" == ");
  62. } else {
  63. printText(U" != ");
  64. }
  65. printCharacterCode(codeB);
  66. printText(U" (", textA[i], U") (", textB[i], U")\n");
  67. }
  68. }
  69. START_TEST(TextEncoding)
  70. { // Text encodings stored in memory
  71. // TODO: Test string_loadFromMemory
  72. }
  73. { // Loading strings of different encodings
  74. String folderPath = string_combine(U"test", file_separator(), U"tests", file_separator(), U"resources", file_separator());
  75. String fileLatin1 = string_load(folderPath + U"Latin1.txt", true);
  76. printText("Latin1.txt contains:\n", fileLatin1, "\n");
  77. compareCharacterCodes(fileLatin1, expected_latin1);
  78. ASSERT_MATCH(fileLatin1, expected_latin1);
  79. String fileUTF8 = string_load(folderPath + U"BomUtf8.txt", true);
  80. printText("BomUtf8.txt contains:\n", fileUTF8, "\n");
  81. compareCharacterCodes(fileUTF8, expected_utf8);
  82. ASSERT_MATCH(fileUTF8, expected_utf8);
  83. //String fileUTF16LE = string_load(folderPath + U"BomUtf16Le.txt", true);
  84. //printText("BomUtf16Le.txt contains:\n", fileUTF16LE, "\n");
  85. //ASSERT_MATCH(fileUTF16LE, expected_utf16le);
  86. //String fileUTF16BE = string_load(folderPath + U"BomUtf16Be.txt", true);
  87. //printText("BomUtf16Be.txt contains:\n", fileUTF16BE, "\n");
  88. //ASSERT_MATCH(fileUTF16BE, expected_utf16be);
  89. }
  90. END_TEST