octo-deno/utils/script.js

100 lines
3.2 KiB
JavaScript

utils.script = {
methodHead: function (list, numOptional) {
if (isNaN(numOptional)) {
numOptional = 0;
}
var arity = list.length - Random.number(numOptional);
var params = [];
for (var i = 0; i < arity; i++) {
params.push(Random.pick([list[i]]));
}
return "(" + params.join(", ") + ")";
},
methodCall: function (objectName, methodHash) {
if(!Utils.getKeysFromHash(methodHash).length || !objectName) {
return "";
}
var methodName = Random.key(methodHash);
var methodArgs = methodHash[methodName];
if (typeof(methodArgs) == "function") { // Todo: Hmmmm..
return methodArgs();
}
return objectName + "." + methodName + JS.methodHead(methodArgs);
},
setAttribute: function (objectName, attributeHash) {
if(!Utils.getKeysFromHash(attributeHash).length || !objectName) {
return "";
}
var attributeName = Random.key(attributeHash);
var attributeValue = Random.pick(attributeHash[attributeName]);
var operator = " = ";
/*
if (typeof(attributeValue) == "number" && Random.chance(8)) {
operator = " " + Make.randomAssignmentOperator() + " ";
}
if (typeof(attributeValue) == "string") {
attributeValue = "'" + attributeValue + "'";
}
*/
return objectName + "." + attributeName + operator + attributeValue + ";";
},
makeConstraint: function (keys, values) {
var o = {};
var n = Random.range(0, keys.length);
while (n--) {
o[Random.pick(keys)] = Random.pick(values);
}
return o;
},
makeRandomOptions: function (base_o) {
var o = {}, unique = Random.some(Object.keys(base_o));
for (var i = 0; i < unique.length; i++) {
o[unique[i]] = Random.pick(base_o[unique[i]]);
}
return JSON.stringify(o);
},
safely: function (s) {
if (window.debug) {
return "try { " + s + " } catch(e) { Logger.JSError(e); }";
}
return "try { " + s + " } catch(e) { }";
},
makeLoop: function (s, max) {
return "for (var i = 0; i < " + (max || Make.rangeNumber()) + "; i++) {" + s + "}";
},
makeArray: function (type, arrayLength, cb) {
if (type == null || type === undefined) {
type = Random.index(["Uint8", "Float32"]);
}
switch (Random.number(8)) {
case 0:
var src = "function() { var buffer = new " + type + "Array(" + arrayLength + ");";
src += JS.makeLoop("buffer[i] = " + cb() + ";", arrayLength);
src += "return buffer;}()";
return src;
case 1:
return "new " + type + "Array([" + Make.filledArray(cb, arrayLength) + "])";
default:
return "new " + type + "Array(" + arrayLength + ")";
}
},
randListIndex: function (objName) {
return Random.number() + ' % ' + o.pick(objName) + '.length';
},
addElementToBody: function (name) {
return "(document.body || document.documentElement).appendChild" + JS.methodHead([name]);
},
forceGC: function () {
if (Platform.isMozilla) {}
if (Platform.isChrome) {
if (window.GCController)
return GCController.collect();
}
if (Platform.isSafari) {}
if (Platform.isIE) {}
},
getRandomElement: function() {
return "document.getElementsByTagName('*')[" + Random.number(document.getElementsByTagName("*").length) + "]";
}
};