blob: 4812101e7a27415bc246918e0a422183a149d08d [file] [log] [blame]
{{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