summaryrefslogtreecommitdiff
path: root/testing/resources/javascript/globals.in
diff options
context:
space:
mode:
Diffstat (limited to 'testing/resources/javascript/globals.in')
-rw-r--r--testing/resources/javascript/globals.in137
1 files changed, 137 insertions, 0 deletions
diff --git a/testing/resources/javascript/globals.in b/testing/resources/javascript/globals.in
new file mode 100644
index 0000000000..6d2f3ca241
--- /dev/null
+++ b/testing/resources/javascript/globals.in
@@ -0,0 +1,137 @@
+{{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];
+ global[prop.name] = prop.value;
+ }
+}
+
+function delete_global() {
+ for (var i = 0; i < props_to_test.length; ++i) {
+ var prop = props_to_test[i];
+ delete global[prop.name];
+ }
+}
+
+function persist_global(should_persist) {
+ for (var i = 0; i < props_to_test.length; ++i) {
+ var prop = props_to_test[i];
+ global.setPersistent(prop.name, should_persist);
+ }
+}
+
+function dump_global(msg) {
+ app.alert("************ " + msg + " ************");
+ app.alert("Enumerable Globals:");
+ for (var name in global) {
+ app.alert(" " + name + " = " + global[name] +
+ ", own property = " + global.hasOwnProperty(name));
+ }
+ app.alert("Expected Globals:");
+ for (var i = 0; i < props_to_test.length; ++i) {
+ var prop = props_to_test[i];
+ 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]);
+ }
+ }
+}
+
+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