Refactor jerry_property_descriptor_t to use status flags (#4594)
JerryScript-DCO-1.0-Signed-off-by: Peter Marki marpeter@inf.u-szeged.hu
This commit is contained in:
@@ -104,16 +104,14 @@ main (void)
|
||||
|
||||
jerry_value_t names;
|
||||
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
prop_desc.is_configurable_defined = true;
|
||||
prop_desc.is_configurable = true;
|
||||
prop_desc.is_writable_defined = true;
|
||||
prop_desc.is_writable = true;
|
||||
prop_desc.is_enumerable_defined = true;
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
prop_desc.flags |= (JERRY_PROP_IS_CONFIGURABLE_DEFINED
|
||||
| JERRY_PROP_IS_CONFIGURABLE
|
||||
| JERRY_PROP_IS_WRITABLE_DEFINED
|
||||
| JERRY_PROP_IS_WRITABLE
|
||||
| JERRY_PROP_IS_ENUMERABLE_DEFINED);
|
||||
|
||||
// Test enumerable - non-enumerable filter
|
||||
prop_desc.is_enumerable = false;
|
||||
define_property (test_object, prop_names[2], &prop_desc, false);
|
||||
names = jerry_object_get_property_names (test_object,
|
||||
JERRY_PROPERTY_FILTER_ALL | JERRY_PROPERTY_FILTER_EXLCUDE_NON_ENUMERABLE);
|
||||
@@ -123,10 +121,10 @@ main (void)
|
||||
TEST_ASSERT (jerry_get_array_length (names) == (uint32_t) 3);
|
||||
compare_prop_name (names, prop_names[2], 2);
|
||||
jerry_release_value (names);
|
||||
prop_desc.is_enumerable = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_ENUMERABLE;
|
||||
|
||||
// Test configurable - non-configurable filter
|
||||
prop_desc.is_configurable = false;
|
||||
prop_desc.flags &= (uint16_t) ~JERRY_PROP_IS_CONFIGURABLE;
|
||||
define_property (test_object, prop_names[3], &prop_desc, false);
|
||||
names = jerry_object_get_property_names (test_object,
|
||||
JERRY_PROPERTY_FILTER_ALL | JERRY_PROPERTY_FILTER_EXLCUDE_NON_CONFIGURABLE);
|
||||
@@ -136,10 +134,10 @@ main (void)
|
||||
TEST_ASSERT (jerry_get_array_length (names) == (uint32_t) 4);
|
||||
compare_prop_name (names, prop_names[3], 3);
|
||||
jerry_release_value (names);
|
||||
prop_desc.is_configurable = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_CONFIGURABLE;
|
||||
|
||||
// Test writable - non-writable filter
|
||||
prop_desc.is_writable = false;
|
||||
prop_desc.flags &= (uint16_t) ~JERRY_PROP_IS_WRITABLE;
|
||||
define_property (test_object, prop_names[4], &prop_desc, false);
|
||||
names = jerry_object_get_property_names (test_object,
|
||||
JERRY_PROPERTY_FILTER_ALL | JERRY_PROPERTY_FILTER_EXLCUDE_NON_WRITABLE);
|
||||
@@ -149,7 +147,7 @@ main (void)
|
||||
TEST_ASSERT (jerry_get_array_length (names) == (uint32_t) 5);
|
||||
compare_prop_name (names, prop_names[4], 4);
|
||||
jerry_release_value (names);
|
||||
prop_desc.is_writable = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_WRITABLE;
|
||||
|
||||
// Test all property filter
|
||||
names = jerry_object_get_property_names (test_object, JERRY_PROPERTY_FILTER_ALL);
|
||||
@@ -195,7 +193,7 @@ main (void)
|
||||
TEST_ASSERT (jerry_get_array_length (names) == (uint32_t) 7);
|
||||
jerry_release_value (names);
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
jerry_release_value (test_object);
|
||||
jerry_cleanup ();
|
||||
return 0;
|
||||
|
||||
@@ -25,46 +25,48 @@ main (void)
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
/* Test: init property descriptor */
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
TEST_ASSERT (prop_desc.is_value_defined == false);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
TEST_ASSERT (prop_desc.flags == JERRY_PROP_NO_OPTS);
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.value));
|
||||
TEST_ASSERT (prop_desc.is_writable_defined == false);
|
||||
TEST_ASSERT (prop_desc.is_writable == false);
|
||||
TEST_ASSERT (prop_desc.is_enumerable_defined == false);
|
||||
TEST_ASSERT (prop_desc.is_enumerable == false);
|
||||
TEST_ASSERT (prop_desc.is_configurable_defined == false);
|
||||
TEST_ASSERT (prop_desc.is_configurable == false);
|
||||
TEST_ASSERT (prop_desc.is_get_defined == false);
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.getter));
|
||||
TEST_ASSERT (prop_desc.is_set_defined == false);
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.setter));
|
||||
|
||||
/* Test: define own properties */
|
||||
jerry_value_t global_obj_val = jerry_get_global_object ();
|
||||
jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_defined_property");
|
||||
prop_desc.is_value_defined = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_VALUE_DEFINED;
|
||||
prop_desc.value = jerry_acquire_value (prop_name);
|
||||
jerry_value_t res = jerry_define_own_property (global_obj_val, prop_name, &prop_desc);
|
||||
TEST_ASSERT (!jerry_value_is_error (res));
|
||||
TEST_ASSERT (jerry_value_is_boolean (res));
|
||||
TEST_ASSERT (jerry_get_boolean_value (res));
|
||||
jerry_release_value (res);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Test: define own property with error */
|
||||
prop_desc = jerry_property_descriptor_create ();
|
||||
prop_desc.flags |= JERRY_PROP_IS_VALUE_DEFINED | JERRY_PROP_IS_THROW;
|
||||
prop_desc.value = jerry_create_number (3.14);
|
||||
res = jerry_define_own_property (global_obj_val, prop_name, &prop_desc);
|
||||
TEST_ASSERT (jerry_value_is_error (res));
|
||||
TEST_ASSERT (!jerry_value_is_boolean (res));
|
||||
jerry_release_value (res);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Test: get own property descriptor */
|
||||
prop_desc = jerry_property_descriptor_create ();
|
||||
bool is_ok = jerry_get_own_property_descriptor (global_obj_val, prop_name, &prop_desc);
|
||||
TEST_ASSERT (is_ok);
|
||||
TEST_ASSERT (prop_desc.is_value_defined == true);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED);
|
||||
TEST_ASSERT (jerry_value_is_string (prop_desc.value));
|
||||
TEST_ASSERT (prop_desc.is_writable == false);
|
||||
TEST_ASSERT (prop_desc.is_enumerable == false);
|
||||
TEST_ASSERT (prop_desc.is_configurable == false);
|
||||
TEST_ASSERT (prop_desc.is_get_defined == false);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_ENUMERABLE));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_GET_DEFINED));
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.getter));
|
||||
TEST_ASSERT (prop_desc.is_set_defined == false);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_SET_DEFINED));
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.setter));
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
if (jerry_is_feature_enabled (JERRY_FEATURE_PROXY))
|
||||
{
|
||||
@@ -83,26 +85,26 @@ main (void)
|
||||
jerry_release_value (prop_name);
|
||||
|
||||
/* Test: define and get own property descriptor */
|
||||
prop_desc.is_enumerable = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_ENUMERABLE;
|
||||
prop_name = jerry_create_string ((const jerry_char_t *) "enumerable-property");
|
||||
res = jerry_define_own_property (global_obj_val, prop_name, &prop_desc);
|
||||
TEST_ASSERT (!jerry_value_is_error (res));
|
||||
TEST_ASSERT (jerry_value_is_boolean (res));
|
||||
TEST_ASSERT (jerry_get_boolean_value (res));
|
||||
jerry_release_value (res);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
is_ok = jerry_get_own_property_descriptor (global_obj_val, prop_name, &prop_desc);
|
||||
TEST_ASSERT (is_ok);
|
||||
TEST_ASSERT (prop_desc.is_writable == false);
|
||||
TEST_ASSERT (prop_desc.is_enumerable == true);
|
||||
TEST_ASSERT (prop_desc.is_configurable == false);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE));
|
||||
|
||||
jerry_release_value (prop_name);
|
||||
jerry_release_value (global_obj_val);
|
||||
|
||||
/* Test: define own property descriptor error */
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
prop_desc.is_value_defined = true;
|
||||
prop_desc = jerry_property_descriptor_create ();
|
||||
prop_desc.flags |= JERRY_PROP_IS_VALUE_DEFINED;
|
||||
prop_desc.value = jerry_create_number (11);
|
||||
|
||||
jerry_value_t obj_val = jerry_create_object ();
|
||||
|
||||
@@ -924,16 +924,15 @@ main (void)
|
||||
jerry_value_t global_obj = jerry_get_global_object ();
|
||||
jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "foo");
|
||||
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
prop_desc.is_value_defined = true;
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
prop_desc.flags |= JERRY_PROP_IS_VALUE_DEFINED;
|
||||
prop_desc.value = jerry_create_number (5.2);
|
||||
|
||||
jerry_value_t define_result = jerry_define_own_property (global_obj, prop_name, &prop_desc);
|
||||
TEST_ASSERT (jerry_value_is_boolean (define_result) && jerry_get_boolean_value (define_result));
|
||||
jerry_release_value (define_result);
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
jerry_release_value (prop_name);
|
||||
jerry_release_value (global_obj);
|
||||
|
||||
|
||||
@@ -43,25 +43,21 @@ main (void)
|
||||
|
||||
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "writable");
|
||||
value = jerry_get_property (from_object, prop_name);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == prop_desc.is_writable);
|
||||
|
||||
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "writable");
|
||||
value = jerry_get_property (from_object, prop_name);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == prop_desc.is_writable);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == ((prop_desc.flags & JERRY_PROP_IS_WRITABLE) != 0));
|
||||
|
||||
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "enumerable");
|
||||
value = jerry_get_property (from_object, prop_name);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == prop_desc.is_enumerable);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == ((prop_desc.flags & JERRY_PROP_IS_ENUMERABLE) != 0));
|
||||
|
||||
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "configurable");
|
||||
value = jerry_get_property (from_object, prop_name);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == prop_desc.is_configurable);
|
||||
TEST_ASSERT (jerry_get_boolean_value (value) == ((prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE) != 0));
|
||||
|
||||
jerry_release_value (object);
|
||||
jerry_release_value (prop_name);
|
||||
jerry_release_value (value);
|
||||
jerry_release_value (from_object);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
jerry_cleanup ();
|
||||
return 0;
|
||||
} /* main */
|
||||
|
||||
@@ -91,49 +91,46 @@ main (void)
|
||||
/* Test {get, define}_own_property_descriptor */
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
TEST_ASSERT (jerry_get_own_property_descriptor (object, symbol_2, &prop_desc));
|
||||
TEST_ASSERT (prop_desc.is_value_defined == true);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED);
|
||||
TEST_ASSERT (value_2 == prop_desc.value);
|
||||
TEST_ASSERT (jerry_get_number_value (value_2) == jerry_get_number_value (prop_desc.value));
|
||||
TEST_ASSERT (prop_desc.is_writable == true);
|
||||
TEST_ASSERT (prop_desc.is_enumerable == true);
|
||||
TEST_ASSERT (prop_desc.is_configurable == true);
|
||||
TEST_ASSERT (prop_desc.is_get_defined == false);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_WRITABLE);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_GET_DEFINED));
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.getter));
|
||||
TEST_ASSERT (prop_desc.is_set_defined == false);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_SET_DEFINED));
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.setter));
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Modify the descriptor fields */
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
prop_desc = jerry_property_descriptor_create ();
|
||||
jerry_value_t value_3 = jerry_create_string (STRING_BAR);
|
||||
|
||||
prop_desc.is_value_defined = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_VALUE_DEFINED
|
||||
| JERRY_PROP_IS_WRITABLE_DEFINED
|
||||
| JERRY_PROP_IS_ENUMERABLE_DEFINED
|
||||
| JERRY_PROP_IS_CONFIGURABLE_DEFINED;
|
||||
prop_desc.value = jerry_acquire_value (value_3);
|
||||
prop_desc.is_writable_defined = true;
|
||||
prop_desc.is_writable = false;
|
||||
prop_desc.is_enumerable_defined = true;
|
||||
prop_desc.is_enumerable = false;
|
||||
prop_desc.is_configurable_defined = true;
|
||||
prop_desc.is_configurable = false;
|
||||
TEST_ASSERT (jerry_get_boolean_value (jerry_define_own_property (object, symbol_2, &prop_desc)));
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Check the modified fields */
|
||||
TEST_ASSERT (jerry_get_own_property_descriptor (object, symbol_2, &prop_desc));
|
||||
TEST_ASSERT (prop_desc.is_value_defined == true);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED);
|
||||
TEST_ASSERT (value_3 == prop_desc.value);
|
||||
TEST_ASSERT (jerry_value_is_string (prop_desc.value));
|
||||
TEST_ASSERT (prop_desc.is_writable_defined == true);
|
||||
TEST_ASSERT (prop_desc.is_writable == false);
|
||||
TEST_ASSERT (prop_desc.is_enumerable_defined == true);
|
||||
TEST_ASSERT (prop_desc.is_enumerable == false);
|
||||
TEST_ASSERT (prop_desc.is_configurable_defined == true);
|
||||
TEST_ASSERT (prop_desc.is_configurable == false);
|
||||
TEST_ASSERT (prop_desc.is_get_defined == false);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_WRITABLE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_ENUMERABLE));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_GET_DEFINED));
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.getter));
|
||||
TEST_ASSERT (prop_desc.is_set_defined == false);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_SET_DEFINED));
|
||||
TEST_ASSERT (jerry_value_is_undefined (prop_desc.setter));
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
jerry_release_value (value_3);
|
||||
jerry_release_value (value_2);
|
||||
|
||||
@@ -48,15 +48,16 @@ check_attribute (jerry_value_t attribute, /**< attribute to be checked */
|
||||
jerry_release_value (prop_name);
|
||||
} /* check_attribute */
|
||||
|
||||
static void
|
||||
to_property_descriptor (jerry_value_t object, /**< object */
|
||||
jerry_property_descriptor_t *prop_desc_p) /**< property descriptor */
|
||||
static jerry_property_descriptor_t
|
||||
to_property_descriptor (jerry_value_t object /**< object */)
|
||||
{
|
||||
jerry_init_property_descriptor_fields (prop_desc_p);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
jerry_value_t result = jerry_to_property_descriptor (object, prop_desc_p);
|
||||
jerry_value_t result = jerry_to_property_descriptor (object, &prop_desc);
|
||||
TEST_ASSERT (jerry_value_is_boolean (result) && jerry_get_boolean_value (result));
|
||||
jerry_release_value (result);
|
||||
|
||||
return prop_desc;
|
||||
} /* to_property_descriptor */
|
||||
|
||||
int
|
||||
@@ -66,39 +67,44 @@ main (void)
|
||||
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
|
||||
/* Next test. */
|
||||
const char *source_p = "({ value:'X', writable:true, enumerable:true, configurable:true })";
|
||||
jerry_value_t object = create_property_descriptor (source_p);
|
||||
|
||||
to_property_descriptor (object, &prop_desc);
|
||||
jerry_property_descriptor_t prop_desc = to_property_descriptor (object);
|
||||
|
||||
check_attribute (prop_desc.value, object, "value");
|
||||
|
||||
TEST_ASSERT (prop_desc.is_value_defined);
|
||||
TEST_ASSERT (!prop_desc.is_get_defined && !prop_desc.is_set_defined);
|
||||
TEST_ASSERT (prop_desc.is_writable_defined && prop_desc.is_writable);
|
||||
TEST_ASSERT (prop_desc.is_enumerable_defined && prop_desc.is_enumerable);
|
||||
TEST_ASSERT (prop_desc.is_configurable_defined && prop_desc.is_configurable);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_GET_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_SET_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_WRITABLE_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_WRITABLE);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE);
|
||||
|
||||
jerry_release_value (object);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Next test. */
|
||||
source_p = "({ writable:false, configurable:true })";
|
||||
object = create_property_descriptor (source_p);
|
||||
|
||||
to_property_descriptor (object, &prop_desc);
|
||||
prop_desc = to_property_descriptor (object);
|
||||
|
||||
TEST_ASSERT (!prop_desc.is_value_defined);
|
||||
TEST_ASSERT (!prop_desc.is_get_defined && !prop_desc.is_set_defined);
|
||||
TEST_ASSERT (prop_desc.is_writable_defined && !prop_desc.is_writable);
|
||||
TEST_ASSERT (!prop_desc.is_enumerable_defined);
|
||||
TEST_ASSERT (prop_desc.is_configurable_defined && prop_desc.is_configurable);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_GET_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_SET_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_WRITABLE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_ENUMERABLE_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE);
|
||||
|
||||
jerry_release_value (object);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Next test. */
|
||||
/* Note: the 'set' property is defined, and it has a value of undefined.
|
||||
@@ -106,50 +112,60 @@ main (void)
|
||||
source_p = "({ get: function() {}, set:undefined, configurable:true })";
|
||||
object = create_property_descriptor (source_p);
|
||||
|
||||
to_property_descriptor (object, &prop_desc);
|
||||
prop_desc = to_property_descriptor (object);
|
||||
|
||||
check_attribute (prop_desc.getter, object, "get");
|
||||
check_attribute (prop_desc.setter, object, "set");
|
||||
|
||||
TEST_ASSERT (!prop_desc.is_value_defined && !prop_desc.is_writable_defined);
|
||||
TEST_ASSERT (prop_desc.is_get_defined && prop_desc.is_set_defined);
|
||||
TEST_ASSERT (!prop_desc.is_enumerable_defined);
|
||||
TEST_ASSERT (prop_desc.is_configurable_defined && prop_desc.is_configurable);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_GET_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_SET_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_ENUMERABLE_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE);
|
||||
|
||||
jerry_release_value (object);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Next test. */
|
||||
source_p = "({ get: undefined, enumerable:false })";
|
||||
object = create_property_descriptor (source_p);
|
||||
|
||||
to_property_descriptor (object, &prop_desc);
|
||||
prop_desc = to_property_descriptor (object);
|
||||
|
||||
check_attribute (prop_desc.getter, object, "get");
|
||||
|
||||
TEST_ASSERT (!prop_desc.is_value_defined && !prop_desc.is_writable_defined);
|
||||
TEST_ASSERT (prop_desc.is_get_defined && !prop_desc.is_set_defined);
|
||||
TEST_ASSERT (prop_desc.is_enumerable_defined && !prop_desc.is_enumerable);
|
||||
TEST_ASSERT (!prop_desc.is_configurable_defined);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_GET_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_SET_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_ENUMERABLE));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE_DEFINED));
|
||||
|
||||
jerry_release_value (object);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Next test. */
|
||||
source_p = "({ set: function(v) {}, enumerable:true, configurable:false })";
|
||||
object = create_property_descriptor (source_p);
|
||||
|
||||
to_property_descriptor (object, &prop_desc);
|
||||
prop_desc = to_property_descriptor (object);
|
||||
|
||||
check_attribute (prop_desc.setter, object, "set");
|
||||
|
||||
TEST_ASSERT (!prop_desc.is_value_defined && !prop_desc.is_writable_defined);
|
||||
TEST_ASSERT (!prop_desc.is_get_defined && prop_desc.is_set_defined);
|
||||
TEST_ASSERT (prop_desc.is_enumerable_defined && prop_desc.is_enumerable);
|
||||
TEST_ASSERT (prop_desc.is_configurable_defined && !prop_desc.is_configurable);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_VALUE_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_WRITABLE_DEFINED));
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_GET_DEFINED));
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_SET_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE_DEFINED);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_ENUMERABLE);
|
||||
TEST_ASSERT (prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE_DEFINED);
|
||||
TEST_ASSERT (!(prop_desc.flags & JERRY_PROP_IS_CONFIGURABLE));
|
||||
|
||||
jerry_release_value (object);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
|
||||
/* Next test. */
|
||||
source_p = "({ get: function(v) {}, writable:true })";
|
||||
|
||||
@@ -41,10 +41,8 @@ freeze_property (jerry_value_t target_obj, /**< target object */
|
||||
const char *target_prop) /**< target property name */
|
||||
{
|
||||
// "freeze" property
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
prop_desc.is_configurable_defined = true;
|
||||
prop_desc.is_configurable = false;
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
prop_desc.flags |= JERRY_PROP_IS_CONFIGURABLE_DEFINED;
|
||||
|
||||
jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) target_prop);
|
||||
jerry_value_t return_value = jerry_define_own_property (target_obj, prop_name, &prop_desc);
|
||||
@@ -52,7 +50,7 @@ freeze_property (jerry_value_t target_obj, /**< target object */
|
||||
jerry_release_value (return_value);
|
||||
jerry_release_value (prop_name);
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
} /* freeze_property */
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user