1/* Copyright JS Foundation and other contributors, http://js.foundation 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 */ 15extern "C" 16{ 17 #include "ecma-init-finalize.h" 18 #include "jmem.h" 19 #include "lit-char-helpers.h" 20} 21 22#include "jerryscript-port.h" 23#include "jerryscript-port-default.h" 24#include "ecma-helpers.h" 25#include "lit-strings.h" 26#include "js-parser-internal.h" 27#include "test-common.h" 28#include <gtest/gtest.h> 29 30static lit_code_point_t 31lexer_hex_to_character (const uint8_t *source_p) /**< current source position */ 32{ 33 lit_code_point_t result = 0; 34 35 do 36 { 37 uint32_t byte = *source_p++; 38 39 result <<= 4; 40 41 if (byte >= LIT_CHAR_0 && byte <= LIT_CHAR_9) 42 { 43 result += byte - LIT_CHAR_0; 44 } 45 else 46 { 47 byte = LEXER_TO_ASCII_LOWERCASE (byte); 48 if (byte >= LIT_CHAR_LOWERCASE_A && byte <= LIT_CHAR_LOWERCASE_F) 49 { 50 result += byte - (LIT_CHAR_LOWERCASE_A - 10); 51 } 52 else 53 { 54 return UINT32_MAX; 55 } 56 } 57 } 58 while (*source_p); 59 60 return result; 61} /* lexer_hex_to_character */ 62 63class LitCharHelpersTest : public testing::Test{ 64public: 65 static void SetUpTestCase() 66 { 67 GTEST_LOG_(INFO) << "LitCharHelpersTest SetUpTestCase"; 68 } 69 70 static void TearDownTestCase() 71 { 72 GTEST_LOG_(INFO) << "LitCharHelpersTest TearDownTestCase"; 73 } 74 75 void SetUp() override {} 76 void TearDown() override {} 77 78}; 79static constexpr size_t JERRY_SCRIPT_MEM_SIZE = 50 * 1024 * 1024; 80static void* context_alloc_fn(size_t size, void* cb_data) 81{ 82 (void)cb_data; 83 size_t newSize = size > JERRY_SCRIPT_MEM_SIZE ? JERRY_SCRIPT_MEM_SIZE : size; 84 return malloc(newSize); 85} 86HWTEST_F(LitCharHelpersTest, Test001, testing::ext::TestSize.Level1) 87{ 88 TEST_INIT (); 89 jerry_context_t *ctx_p = jerry_create_context (1024, context_alloc_fn, NULL); 90 jerry_port_default_set_current_context (ctx_p); 91 jmem_init (); 92 ecma_init (); 93 94 const uint8_t _1_byte_long1[] = "007F"; 95 const uint8_t _1_byte_long2[] = "0000"; 96 const uint8_t _1_byte_long3[] = "0065"; 97 98 const uint8_t _2_byte_long1[] = "008F"; 99 const uint8_t _2_byte_long2[] = "00FF"; 100 const uint8_t _2_byte_long3[] = "07FF"; 101 102 const uint8_t _3_byte_long1[] = "08FF"; 103 const uint8_t _3_byte_long2[] = "0FFF"; 104 const uint8_t _3_byte_long3[] = "FFFF"; 105 106 const uint8_t _6_byte_long1[] = "10000"; 107 const uint8_t _6_byte_long2[] = "10FFFF"; 108 109 size_t length; 110 111 /* Test 1-byte-long unicode sequences. */ 112 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_1_byte_long1)); 113 TEST_ASSERT (length == 1); 114 115 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_1_byte_long2)); 116 TEST_ASSERT (length == 1); 117 118 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_1_byte_long3)); 119 TEST_ASSERT (length == 1); 120 121 /* Test 2-byte-long unicode sequences. */ 122 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_2_byte_long1)); 123 TEST_ASSERT (length == 2); 124 125 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_2_byte_long2)); 126 TEST_ASSERT (length == 2); 127 128 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_2_byte_long3)); 129 TEST_ASSERT (length == 2); 130 131 /* Test 3-byte-long unicode sequences. */ 132 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_3_byte_long1)); 133 TEST_ASSERT (length == 3); 134 135 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_3_byte_long2)); 136 TEST_ASSERT (length == 3); 137 138 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_3_byte_long3)); 139 TEST_ASSERT (length == 3); 140 141 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_6_byte_long1)); 142 TEST_ASSERT (length == 6); 143 144 length = lit_code_point_get_cesu8_length (lexer_hex_to_character (_6_byte_long2)); 145 TEST_ASSERT (length == 6); 146 147 ecma_finalize (); 148 jmem_finalize (); 149 free (ctx_p); 150 return; 151} 152