You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
3.4 KiB

/*===
*** test_string (duk_safe_call)
program code
return value is: '123'
myFile.js
return value is: '234'
compile rc=0
program code
return value is: '123'
compile rc=0
myFile.js
return value is: '234'
compile rc=1 -> SyntaxError: invalid object literal (line 1)
top: 0
==> rc=0, result='undefined'
*** test_lstring (duk_safe_call)
program code
return value is: '123'
myFile.js
return value is: '234'
compile rc=0
program code
return value is: '123'
compile rc=0
myFile.js
return value is: '234'
compile rc=1 -> SyntaxError: invalid object literal (line 1)
top: 0
==> rc=0, result='undefined'
===*/
static duk_ret_t test_string(duk_context *ctx) {
duk_int_t rc;
/* Normal compile */
duk_compile_string(ctx, 0, "print('program code'); 123");
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Normal compile with explicit filename */
duk_push_string(ctx, "myFile.js");
duk_compile_string_filename(ctx, 0, "print(Duktape.act(-2).function.fileName); 234");
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Protected compile, success */
rc = duk_pcompile_string(ctx, 0, "print('program code'); 123");
printf("compile rc=%ld\n", (long) rc);
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Protected compile with explicit filename, success */
duk_push_string(ctx, "myFile.js");
rc = duk_pcompile_string_filename(ctx, 0, "print(Duktape.act(-2).function.fileName); 234");
printf("compile rc=%ld\n", (long) rc);
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Protected compile, syntax error */
rc = duk_pcompile_string(ctx, 0, "print('program code'); 123; obj={");
printf("compile rc=%ld -> %s\n", (long) rc, duk_safe_to_string(ctx, -1));
duk_pop(ctx);
printf("top: %ld\n", (long) duk_get_top(ctx));
return 0;
}
static duk_ret_t test_lstring(duk_context *ctx) {
duk_int_t rc;
const char *src1 = "print('program code'); 123@";
const char *src2 = "print(Duktape.act(-2).function.fileName); 234@";
const char *src3 = "print('program code'); 123; obj={@";
/* Normal compile */
duk_compile_lstring(ctx, 0, src1, strlen(src1) - 1);
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Normal compile with explicit filename */
duk_push_string(ctx, "myFile.js");
duk_compile_lstring_filename(ctx, 0, src2, strlen(src2) - 1);
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Protected compile, success */
rc = duk_pcompile_lstring(ctx, 0, src1, strlen(src1) - 1);
printf("compile rc=%ld\n", (long) rc);
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Protected compile with explicit filename, success */
duk_push_string(ctx, "myFile.js");
rc = duk_pcompile_lstring_filename(ctx, 0, src2, strlen(src2) - 1);
printf("compile rc=%ld\n", (long) rc);
duk_call(ctx, 0);
printf("return value is: '%s'\n", duk_to_string(ctx, -1));
duk_pop(ctx);
/* Protected compile, syntax error */
rc = duk_pcompile_lstring(ctx, 0, src3, strlen(src3) - 1);
printf("compile rc=%ld -> %s\n", (long) rc, duk_safe_to_string(ctx, -1));
duk_pop(ctx);
printf("top: %ld\n", (long) duk_get_top(ctx));
return 0;
}
void test(duk_context *ctx) {
TEST_SAFE_CALL(test_string);
TEST_SAFE_CALL(test_lstring);
}