| // Copyright 2019 PDFium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| // Treat two distinct objects with the same members as equal, e.g. in JS | |
| // ([0, 1] == [0, 1]) evaluates to false. Without this function, we can't | |
| // supply an expected result of object/array type for our tests. | |
| function kindaSortaEqual(arg1, arg2) { | |
| if (arg1 == arg2) { | |
| return true; | |
| } | |
| if (typeof arg1 != "object") { | |
| return false; | |
| } | |
| if (typeof arg2 != "object") { | |
| return false; | |
| } | |
| return arg1.toString() == arg2.toString(); | |
| } | |
| function testReadProperty(that, prop, expected) { | |
| try { | |
| var actual = that[prop]; | |
| if (kindaSortaEqual(actual, expected)) { | |
| app.alert('PASS: ' + prop + ' = ' + actual); | |
| } else { | |
| app.alert('FAIL: ' + prop + ' = ' + actual + ', expected = ' + expected); | |
| } | |
| } catch (e) { | |
| app.alert('ERROR: ' + e.toString()); | |
| } | |
| } | |
| function testUnreadableProperty(that, prop) { | |
| try { | |
| var value = that[prop]; | |
| app.alert('FAIL: ' + prop + ', expected to throw'); | |
| } catch (e) { | |
| app.alert('PASS: ' + prop + ' threw ' + e.toString()); | |
| } | |
| } | |
| function testWriteProperty(that, prop, newValue) { | |
| try { | |
| that[prop] = newValue; | |
| var actual = that[prop]; | |
| if (kindaSortaEqual(actual, newValue)) { | |
| app.alert('PASS: ' + prop + ' = ' + actual); | |
| } else { | |
| app.alert('FAIL: ' + prop + ' = ' + actual + ', expected = ' + newValue); | |
| } | |
| } catch (e) { | |
| app.alert('ERROR: ' + e.toString()); | |
| } | |
| } | |
| function testWriteIgnoredProperty(that, prop, expected, newValue) { | |
| try { | |
| that[prop] = newValue; | |
| var actual = that[prop]; | |
| if (kindaSortaEqual(actual, expected)) { | |
| app.alert('PASS: ' + prop + ' = ' + actual); | |
| } else { | |
| app.alert('FAIL: ' + prop + ' = ' + actual + ', expected = ' + expected); | |
| } | |
| } catch (e) { | |
| app.alert('ERROR: ' + e.toString()); | |
| } | |
| } | |
| function testUnwritableProperty(that, prop, newValue) { | |
| try { | |
| that[prop] = newValue; | |
| app.alert('FAIL: ' + prop + ' = ' + newValue + ', expected to throw'); | |
| } catch (e) { | |
| app.alert('PASS: ' + prop + ' threw ' + e.toString()); | |
| } | |
| } | |
| function testRWProperty(that, prop, expected, newValue) { | |
| testReadProperty(that, prop, expected); | |
| testWriteProperty(that, prop, newValue); | |
| } | |
| function testRIProperty(that, prop, expected, newValue) { | |
| testReadProperty(that, prop, expected); | |
| testWriteIgnoredProperty(that, prop, expected, newValue); | |
| } | |
| function testROProperty(that, prop, expected) { | |
| testReadProperty(that, prop, expected); | |
| testUnwritableProperty(that, prop, 42); | |
| } | |
| function testXXProperty(that, prop) { | |
| testUnreadableProperty(that, prop); | |
| testUnwritableProperty(that, prop, 42); | |
| } |