Publish Vulpes Preview 15 sources for desktop, Android and Tundra

Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,125 @@
'use strict';
var EventEmitter = require('events').EventEmitter;
var MESSAGE_PREFIX = 'mocha-proxy';
// runnable events which need a runnable wrapper
var RUNNABLE_EVENTS = [
'pending',
'pass',
'fail',
'test',
'test end',
'suite',
'suite end'
];
function Runnable(event) {
for (var key in event) {
this[key] = event[key];
}
}
Runnable.prototype = {
slow: function() {
return this._slow;
},
fullTitle: function() {
var title = '';
if (this.parent) {
title = this.parent.fullTitle();
if (title) {
title += ' ';
}
}
title += this.title;
return title;
}
};
/**
* Consumer for a mocha runner process using the mocha-json-proxy reporter.
*
*
* var consumer = new Consumer(
* forkedMochaProcess // should use _mocha NOT mocha (which spawns another
* process)
* );
*
* // consumer is also an event emitter which emits standard mocha events.
* consumer.on('start', function() {
* });
*
* consumer.on('pass', function() {
* });
*
* @param {ChildProcess} child to listen to messages on.
*/
function Consumer(child) {
EventEmitter.call(this);
this._suiteStack = [];
this._objects = {};
child.on('message', function(content) {
if (Array.isArray(content) && content[0] === MESSAGE_PREFIX) {
this.transformEvent(content[1]);
}
}.bind(this));
}
Consumer.prototype = {
__proto__: EventEmitter.prototype,
referenceObject: function(event, object) {
// objects without the _id property don't need to be a single reference.
if (!object || !object._id) {
return object;
}
// find the original reference or create it.
var ref = this._objects[object._id];
if (!ref) {
// convert the object into an instanceof Runnable if its event is a suite
// or test.
if (RUNNABLE_EVENTS.indexOf(event) !== -1) {
object = new Runnable(object);
}
// when no reference is found this is the correct object.
ref = this._objects[object._id] = object;
} else {
// otherwise we need to update the reference
Object.keys(object).forEach(function(key) {
var value = object[key];
ref[key] = value;
});
}
// Re-create the parent based on the referenced ID.
if (ref._parentId) {
ref.parent = this.referenceObject('suite', { _id: ref._parentId });
delete ref._parentId;
}
return ref;
},
transformEvent: function(event) {
var name = event[0];
var runnable = event[1] = this.referenceObject(name, event[1]);
if (name === 'suite') {
this._suiteStack.push(runnable);
// add the root .suite
if (!this.suite) {
this.suite = runnable;
}
}
this.emit.apply(this, event);
}
};
module.exports = Consumer;