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