1/* 2 * Copyright JS Foundation and other contributors, http://js.foundation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16extern "C" 17{ 18 #include "ecma-init-finalize.h" 19 #include "jmem.h" 20 #include "ecma-helpers.h" 21 #include "ecma-conversion.h" 22 #include "ecma-exceptions.h" 23 #include "jcontext.h" 24} 25 26#include "jerryscript-port.h" 27#include "jerryscript-port-default.h" 28#include "ecma-globals.h" 29#include "jerryscript.h" 30#include <gtest/gtest.h> 31#include "test-common.h" 32 33/** 34 * Unit test's main function. 35 */ 36class ToLengthTest : public testing::Test{ 37public: 38 static void SetUpTestCase() 39 { 40 GTEST_LOG_(INFO) << "ToLengthTest SetUpTestCase"; 41 } 42 43 static void TearDownTestCase() 44 { 45 GTEST_LOG_(INFO) << "ToLengthTest TearDownTestCase"; 46 } 47 48 void SetUp() override {} 49 void TearDown() override {} 50 51}; 52static constexpr size_t JERRY_SCRIPT_MEM_SIZE = 50 * 1024 * 1024; 53static void* context_alloc_fn(size_t size, void* cb_data) 54{ 55 (void)cb_data; 56 size_t newSize = size > JERRY_SCRIPT_MEM_SIZE ? JERRY_SCRIPT_MEM_SIZE : size; 57 return malloc(newSize); 58} 59HWTEST_F(ToLengthTest, Test001, testing::ext::TestSize.Level1) 60{ 61 TEST_INIT (); 62 jerry_context_t *ctx_p = jerry_create_context (1024, context_alloc_fn, NULL); 63 jerry_port_default_set_current_context (ctx_p); 64 jmem_init (); 65 ecma_init (); 66 67 uint32_t num; 68 69 ecma_value_t int_num = ecma_make_int32_value (123); 70 71 uint32_t result = ecma_op_to_length (int_num, &num); 72 73 ecma_free_value (int_num); 74 75 TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result)); 76 TEST_ASSERT (num == 123); 77 78 /* 1, 3 */ 79 ecma_value_t error_throw = ecma_raise_type_error (ECMA_ERR_MSG ("I'm an error")); 80 81 result = ecma_op_to_length (error_throw, &num); 82 83 jcontext_release_exception (); 84 85 TEST_ASSERT (ECMA_IS_VALUE_ERROR (result)); 86 87 /* zero */ 88 ecma_value_t zero = ecma_make_int32_value (0); 89 90 result = ecma_op_to_length (zero, &num); 91 92 ecma_free_value (zero); 93 94 TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result)); 95 TEST_ASSERT (num == 0); 96 97 /* negative */ 98 ecma_value_t negative = ecma_make_number_value (-26.5973f); 99 100 result = ecma_op_to_length (negative, &num); 101 102 ecma_free_value (negative); 103 104 TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result)); 105#if ENABLED (JERRY_ES2015) 106 TEST_ASSERT (num == 4294967270); 107#else /* !ENABLED (JERRY_ES2015) */ 108 TEST_ASSERT (num == 0); 109#endif /* ENABLED (JERRY_ES2015) */ 110 111 /* +infinity */ 112 ecma_value_t positive_infinity = ecma_make_number_value (ecma_number_make_infinity (false)); 113 114 result = ecma_op_to_length (positive_infinity, &num); 115 116 ecma_free_value (positive_infinity); 117 118 TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result)); 119#if ENABLED (JERRY_ES2015) 120 TEST_ASSERT (num == 0); 121#else /* !ENABLED (JERRY_ES2015) */ 122 TEST_ASSERT (num == UINT32_MAX); 123#endif /* ENABLED (JERRY_ES2015) */ 124 125 /* -infinity */ 126 ecma_value_t negative_infinity = ecma_make_number_value (ecma_number_make_infinity (true)); 127 128 result = ecma_op_to_length (negative_infinity, &num); 129 130 ecma_free_value (negative_infinity); 131 132 TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result)); 133 TEST_ASSERT (num == 0); 134 135 /* NaN */ 136 ecma_value_t nan = ecma_make_nan_value (); 137 138 result = ecma_op_to_length (nan, &num); 139 140 ecma_free_value (nan); 141 142 TEST_ASSERT (!ECMA_IS_VALUE_ERROR (result)); 143 TEST_ASSERT (num == 0); 144 145 ecma_finalize (); 146 jmem_finalize (); 147 free(ctx_p); 148 return; 149} 150