qt6-bb10/qtdeclarative/tests/auto/qml/qqmlengine/data/lockedRootObject.qml

109 lines
3.0 KiB
QML

import QtQml
QtObject {
property string myErrorName: {
var e = new Error;
try {
e.name = "MyError1";
} finally {
return e.name;
}
}
property string errorName: {
var e = new Error;
try {
Error.prototype.name = "MyError2";
} finally {
return e.name
}
}
property int mathMax: {
// Cannot change methods of builtins
try {
Math.max = function(a, b) { return 10 };
} finally {
return Math.max(3, 4)
}
}
property int extendGlobal: {
// Can add new methods to globals
try {
Array.prototype.myMethod = function() { return 32 }
} finally {
return (new Array).myMethod()
}
}
property string prototypeTrick: {
// Cannot change prototypes of locked objects
try {
SyntaxError.prototype.setPrototypeOf({
toLocaleString : function() { return "not a SyntaxError"}
});
} finally {
return (new SyntaxError).toLocaleString();
}
}
property string shadowMethod1: {
// Can override Object.prototype methods meant to be changed
try {
TypeError.prototype.toLocaleString = function() { return "not a TypeError"};
} finally {
return (new TypeError).toLocaleString();
}
}
property bool shadowMethod2: {
// Cannot override Object.prototype methods not meant to be changed
try {
TypeError.prototype.hasOwnProperty = function() { return true };
} finally {
return (new TypeError).hasOwnProperty("foobar");
}
}
property string changeObjectProto1: {
// Can change Object.prototype methods meant to be changed
try {
Object.prototype.toLocaleString = function() { return "not an Object"};
} finally {
return (new Object).toLocaleString();
}
}
property bool changeObjectProto2: {
// Cannot change Object.prototype methods not meant to be changed
try {
Object.prototype.hasOwnProperty = function() { return true };
} finally {
return (new Object).hasOwnProperty("foobar");
}
}
property string defineProperty1: {
// Can define a property that shadows an existing one meant to be changed
try {
Object.defineProperty(URIError.prototype, "toLocaleString", {
value: function() { return "not a URIError" }
})
} finally {
return (new URIError).toLocaleString();
}
}
property bool defineProperty2: {
// Cannot define a property that shadows an existing one not meant to be changed
try {
Object.defineProperty(URIError.prototype, "hasOwnProperty", {
value: function() { return true }
})
} finally {
return (new URIError).hasOwnProperty("foobar");
}
}
}