forked from yystopf/xiuos
108 lines
3.2 KiB
C
108 lines
3.2 KiB
C
/* Copyright JS Foundation and other contributors, http://js.foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include <string.h>
|
|
|
|
#include "jerryscript.h"
|
|
#include "test-common.h"
|
|
#include "jerryscript-ext/module.h"
|
|
|
|
#define ACTUAL_NAME "alice"
|
|
#define ALIAS_NAME "bob"
|
|
|
|
static jerry_value_t
|
|
get_canonical_name (const jerry_value_t name)
|
|
{
|
|
jerry_size_t name_size = jerry_get_string_size (name);
|
|
JERRY_VLA (jerry_char_t, name_string, name_size + 1);
|
|
jerry_string_to_char_buffer (name, name_string, name_size);
|
|
name_string[name_size] = 0;
|
|
|
|
if (!strcmp ((char *) name_string, ACTUAL_NAME))
|
|
{
|
|
return jerry_acquire_value (name);
|
|
}
|
|
else if (!strcmp ((char *) name_string, ALIAS_NAME))
|
|
{
|
|
return jerry_create_string ((jerry_char_t *) ACTUAL_NAME);
|
|
}
|
|
else
|
|
{
|
|
return jerry_create_undefined ();
|
|
}
|
|
} /* get_canonical_name */
|
|
|
|
static bool
|
|
resolve (const jerry_value_t canonical_name, jerry_value_t *result)
|
|
{
|
|
jerry_size_t name_size = jerry_get_string_size (canonical_name);
|
|
JERRY_VLA (jerry_char_t, name_string, name_size + 1);
|
|
jerry_string_to_char_buffer (canonical_name, name_string, name_size);
|
|
name_string[name_size] = 0;
|
|
|
|
if (!strcmp ((char *) name_string, ACTUAL_NAME))
|
|
{
|
|
*result = jerry_create_object ();
|
|
return true;
|
|
}
|
|
return false;
|
|
} /* resolve */
|
|
|
|
static const jerryx_module_resolver_t canonical_test =
|
|
{
|
|
.get_canonical_name_p = get_canonical_name,
|
|
.resolve_p = resolve
|
|
};
|
|
|
|
#define TEST_VALUE 95.0
|
|
|
|
int
|
|
main (int argc, char **argv)
|
|
{
|
|
(void) argc;
|
|
(void) argv;
|
|
|
|
const jerryx_module_resolver_t *resolver = &canonical_test;
|
|
|
|
jerry_init (JERRY_INIT_EMPTY);
|
|
|
|
jerry_value_t actual_name = jerry_create_string ((jerry_char_t *) ACTUAL_NAME);
|
|
jerry_value_t alias_name = jerry_create_string ((jerry_char_t *) ALIAS_NAME);
|
|
|
|
/* It's important that we resolve by the non-canonical name first. */
|
|
jerry_value_t result2 = jerryx_module_resolve (alias_name, &resolver, 1);
|
|
jerry_value_t result1 = jerryx_module_resolve (actual_name, &resolver, 1);
|
|
jerry_release_value (actual_name);
|
|
jerry_release_value (alias_name);
|
|
|
|
/* An elaborate way of doing strict equal - set a property on one object and it "magically" appears on the other. */
|
|
jerry_value_t prop_name = jerry_create_string ((jerry_char_t *) "something");
|
|
jerry_value_t prop_value = jerry_create_number (TEST_VALUE);
|
|
jerry_release_value (jerry_set_property (result1, prop_name, prop_value));
|
|
jerry_release_value (prop_value);
|
|
|
|
prop_value = jerry_get_property (result2, prop_name);
|
|
TEST_ASSERT (jerry_get_number_value (prop_value) == TEST_VALUE);
|
|
jerry_release_value (prop_value);
|
|
|
|
jerry_release_value (prop_name);
|
|
jerry_release_value (result1);
|
|
jerry_release_value (result2);
|
|
|
|
jerry_cleanup ();
|
|
|
|
return 0;
|
|
} /* main */
|