Index: testing/resources/javascript/globals.in |
diff --git a/testing/resources/javascript/globals.in b/testing/resources/javascript/globals.in |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6d2f3ca2414eb8bd3fceb1f3ff71962157eccf21 |
--- /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 |