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.
159 lines
3.7 KiB
159 lines
3.7 KiB
{{header}} |
|
{{object 1 0}} << |
|
/Type /Catalog |
|
/Pages 2 0 R |
|
/OpenAction 10 0 R |
|
>> |
|
endobj |
|
{{object 2 0}} << |
|
/Type /Pages |
|
/Count 1 |
|
/Kids [ |
|
3 0 R |
|
] |
|
>> |
|
endobj |
|
% Page number 0. |
|
{{object 3 0}} << |
|
/Type /Page |
|
/Parent 2 0 R |
|
/Resources << |
|
/Font <</F1 15 0 R>> |
|
>> |
|
/Contents [21 0 R] |
|
/MediaBox [0 0 612 792] |
|
>> |
|
% OpenAction action |
|
{{object 10 0}} << |
|
/Type /Action |
|
/S /JavaScript |
|
/JS 11 0 R |
|
>> |
|
endobj |
|
% JS program to exexute |
|
{{object 11 0}} << |
|
>> |
|
stream |
|
// The "global" object stores data in a C-like manner, and |
|
// can theoretically persist them between sessions (though |
|
// pdfium deliberately excludes that functionality). |
|
|
|
var some_object = { "colors": [ "red", "green", "blue"] }; |
|
|
|
var props_to_test = [ |
|
// Cover both bool values. |
|
{ "name": "true_var", "value": true }, |
|
{ "name": "false_var", "value": false }, |
|
|
|
// Include both zero and a number with some fractional digits. |
|
{ "name": "zero_var", "value": 0 }, |
|
{ "name": "number_var", "value": -3.918 }, |
|
|
|
// TODO(tsepez): unicode doesn't seem to survive. |
|
{ "name": "string_var", "value": "This is a string" }, |
|
|
|
// Try a complex object. |
|
{ "name": "object_var", "value": some_object }, |
|
|
|
// Test null and undefined. |
|
{ "name": "null_var", "value": null }, |
|
{ "name": "undefined_var", "value": undefined } |
|
]; |
|
|
|
function setup_global() { |
|
for (var i = 0; i < props_to_test.length; ++i) { |
|
var prop = props_to_test[i]; |
|
try { |
|
global[prop.name] = prop.value; |
|
} catch (e) { |
|
app.alert("For " + prop.name + ": Setup: ERROR: " + e.toString()); |
|
} |
|
} |
|
} |
|
|
|
function delete_global() { |
|
for (var i = 0; i < props_to_test.length; ++i) { |
|
var prop = props_to_test[i]; |
|
try { |
|
delete global[prop.name]; |
|
} catch (e) { |
|
app.alert("For " + prop.name + ": Delete: ERROR: " + e.toString()); |
|
} |
|
} |
|
} |
|
|
|
function persist_global(should_persist) { |
|
for (var i = 0; i < props_to_test.length; ++i) { |
|
var prop = props_to_test[i]; |
|
try { |
|
global.setPersistent(prop.name, should_persist); |
|
} catch (e) { |
|
app.alert("For " + prop.name + |
|
": Set Persistent: ERROR: " + e.toString()); |
|
} |
|
} |
|
} |
|
|
|
function dump_global(msg) { |
|
app.alert("************ " + msg + " ************"); |
|
app.alert("Enumerable Globals:"); |
|
for (var name in global) { |
|
try { |
|
app.alert(" " + name + " = " + global[name] + |
|
", own property = " + global.hasOwnProperty(name)); |
|
} catch (e) { |
|
app.alert("For " + name + ": Dump: ERROR: " + e.toString()); |
|
} |
|
} |
|
app.alert("Expected Globals:"); |
|
for (var i = 0; i < props_to_test.length; ++i) { |
|
var prop = props_to_test[i]; |
|
try { |
|
var actual = global[prop.name]; |
|
app.alert(" " + prop.name + " = " + actual); |
|
if (actual != null && typeof actual == "object") { |
|
app.alert(" " + actual.colors[0]); |
|
app.alert(" " + actual.colors[1]); |
|
app.alert(" " + actual.colors[2]); |
|
} |
|
} catch (e) { |
|
app.alert("For " + prop.name + |
|
": Dump Expected: ERROR: " + e.toString()); |
|
} |
|
} |
|
} |
|
|
|
dump_global("Initial State"); |
|
|
|
// Check that they all exist. |
|
setup_global(); |
|
dump_global("After Setup"); |
|
|
|
// Test deletion. |
|
delete_global(); |
|
dump_global("After Deletion"); |
|
|
|
// setPersistent() should be a no-op for pdfium. |
|
setup_global(); |
|
persist_global(false); |
|
dump_global("After Setup and Persist false"); |
|
|
|
// Test setting deleted variables as persistent. |
|
delete_global(); |
|
persist_global(true); |
|
dump_global("After Delete and Persist"); |
|
|
|
// Exit with variables marked as persistent to test whatever path |
|
// may exist to persist them (should be igonored on pdfium). |
|
setup_global(); |
|
persist_global(true); |
|
dump_global("After Setup and Persist true"); |
|
|
|
endstream |
|
endobj |
|
{{xref}} |
|
trailer << |
|
/Root 1 0 R |
|
>> |
|
{{startxref}} |
|
%%EOF
|
|
|