6d2f3ca2414eb8bd3fceb1f3ff71962157eccf21
[pdfium.git] / testing / resources / javascript / globals.in
1 {{header}}
2 {{object 1 0}} <<
3   /Type /Catalog
4   /Pages 2 0 R
5   /OpenAction 10 0 R
6 >>
7 endobj
8 {{object 2 0}} <<
9   /Type /Pages
10   /Count 1
11   /Kids [
12     3 0 R
13   ]
14 >>
15 endobj
16 % Page number 0.
17 {{object 3 0}} <<
18   /Type /Page
19   /Parent 2 0 R
20   /Resources <<
21     /Font <</F1 15 0 R>>
22   >>
23   /Contents [21 0 R]
24   /MediaBox [0 0 612 792]
25 >>
26 % OpenAction action
27 {{object 10 0}} <<
28   /Type /Action
29   /S /JavaScript
30   /JS 11 0 R
31 >>
32 endobj
33 % JS program to exexute
34 {{object 11 0}} <<
35 >>
36 stream
37 // The "global" object stores data in a C-like manner, and
38 // can theoretically persist them between sessions (though
39 // pdfium deliberately excludes that functionality).
40
41 var some_object = { "colors": [ "red", "green", "blue"] };
42
43 var props_to_test = [
44   // Cover both bool values.
45   { "name": "true_var", "value": true },
46   { "name": "false_var", "value": false },
47
48   // Include both zero and a number with some fractional digits.
49   { "name": "zero_var", "value": 0 },
50   { "name": "number_var", "value": -3.918 },
51
52   // TODO(tsepez): unicode doesn't seem to survive.
53   { "name": "string_var", "value": "This is a string" },
54
55   // Try a complex object.
56   { "name": "object_var", "value": some_object },
57
58   // Test null and undefined.
59   { "name": "null_var", "value": null },
60   { "name": "undefined_var", "value": undefined }
61 ];
62
63 function setup_global() {
64   for (var i = 0; i < props_to_test.length; ++i) {
65     var prop = props_to_test[i];
66     global[prop.name] = prop.value;
67   }
68 }
69
70 function delete_global() {
71   for (var i = 0; i < props_to_test.length; ++i) {
72     var prop = props_to_test[i];
73     delete global[prop.name];
74   }
75 }
76
77 function persist_global(should_persist) {
78   for (var i = 0; i < props_to_test.length; ++i) {
79     var prop = props_to_test[i];
80     global.setPersistent(prop.name, should_persist);
81   }
82 }
83
84 function dump_global(msg) {
85   app.alert("************ " + msg + " ************");
86   app.alert("Enumerable Globals:");
87   for (var name in global) {
88     app.alert("  " + name + " = " + global[name] +
89               ", own property = " + global.hasOwnProperty(name));
90   }
91   app.alert("Expected Globals:");
92   for (var i = 0; i < props_to_test.length; ++i) {
93     var prop = props_to_test[i];
94     var actual = global[prop.name];
95     app.alert("  " + prop.name + " = " + actual);
96     if (actual != null && typeof actual == "object") {
97       app.alert("    " + actual.colors[0]);
98       app.alert("    " + actual.colors[1]);
99       app.alert("    " + actual.colors[2]);
100     }
101   }
102 }
103
104 dump_global("Initial State");
105
106 // Check that they all exist.
107 setup_global();
108 dump_global("After Setup");
109
110 // Test deletion.
111 delete_global();
112 dump_global("After Deletion");
113
114 // setPersistent() should be a no-op for pdfium.
115 setup_global();
116 persist_global(false);
117 dump_global("After Setup and Persist false");
118
119 // Test setting deleted variables as persistent.
120 delete_global();
121 persist_global(true);
122 dump_global("After Delete and Persist");
123
124 // Exit with variables marked as persistent to test whatever path
125 // may exist to persist them (should be igonored on pdfium).
126 setup_global();
127 persist_global(true);
128 dump_global("After Setup and Persist true");
129
130 endstream
131 endobj
132 {{xref}}
133 trailer <<
134   /Root 1 0 R
135 >>
136 {{startxref}}
137 %%EOF