Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TIMOB-4790] Android: Worker API #10752

Closed
wants to merge 18 commits into from
Closed

Conversation

drauggres
Copy link
Contributor

@drauggres drauggres commented Mar 5, 2019

JIRA: https://jira.appcelerator.org/browse/TIMOB-4790

This PR also includes changes for TIMOB-24549 and TIMOB-26239.

const TAG = 'app.js';

let task = Ti.Worker.createWorker('worker.js', {name: `Worker Thread`});

task.addEventListener('message', function onMessage(event) {
    console.log(TAG, event.type, JSON.stringify(event.data));
});

task.postMessage({string: 'string', array: [1, 'abc', 2, {a: 'b'}]});
// echo.js 
// `appcelerator-modules/ti.worker` API
worker.addEventListener('message', function(e) {
    console.log('worker.addEventListener', JSON.stringify(e.data));
    worker.postMessage(e.data)
});

// also works
worker.onmessage = function(e) {
    console.log('worker.onmessage', JSON.stringify(e.data));
    worker.postMessage(e.data)
};

or

// echo.js Web Workers API
onmessage = function(e) {
    console.log('onmessage', JSON.stringify(e.data));
    postMessage(e.data)
};

// also works
addEventListener('message', function(e) {
    console.log('addEventListener', JSON.stringify(e.data));
    postMessage(e.data)
});

How it works:

  • Added v8::Locker for v8::Isolate
  • All Isolate specific templates/objects/functions/etc stored in map by thread id as a key (or Isolate itself, where appropriate).
  • After WorkerProxy creation it creates V8Worker instance which spawns a new thread.
  • In the new thread V8Worker creates new Isolate (and Locker), context and does "bootstrap", almost as if it was original V8Runtime
  • V8Worker reads scripts content (file name passed as parameter to WorkerProxy constructor/factory) and executes it in newly created "environment" (and of course in the new thread)

WorkerProxy

method postMessage

The postMessage() method of the Worker interface sends a message to the worker's inner scope. This accepts a single parameter, which is the data to send to the worker.

worker.postMessage(message);

message - The object to deliver to the worker; this will be in the data field in the event delivered to the onmessage handler (and listener added with addEventListener method). This may be any value or JavaScript object handled (WITHOUT CYCLES).

method terminate

The terminate() method of the Worker interface immediately terminates the Worker. This does not offer the worker an opportunity to finish its operations; it is simply stopped at once.

property onmessage

NOT IMPLEMENTED use worker.addEventListener('message', function(e) {...});

event message

Fired after call to postMessage inside worker. Field data contains data sended from worker.

event error

Fired when file specified at WorkerProxy creation can't be found or when it's empty.

Worker Global Scope

method postMessage

The postMessage() method of the WorkerGlobalScope interface sends a message to the main thread that spawned it.

method close

Discards any tasks queued in the WorkerGlobalScope's event loop, effectively closing this particular scope.

methods addEventListener and removeEventListener

Use them with event type message

property onmessage

The onmessage property of the WorkerGlobalScope interface represents an EventHandlerfunction to be called when the message event occurs and bubbles through the Worker — i.e. when a message is sent to the worker using the Worker.postMessage method.

event message

Fired after call to postMessage on WorkerProxy. Field data contains data sended from main thread.

Module appcelerator-modules/ti.worker partly API compliance

  • WorkerGlobalScope exposed as worker object on itself
  • method postMessage
  • method terminate
  • method nextTick (Not implemented. I would recommend to use Promise.resolve().then(...))
  • method addEventListener('message', ...)
  • event message
  • event terminated (Not implemented)

TODO:

  • EventTarget interface on WorkerGlobalScope (addEventListener/removeEventListener...)

Next steps (maybe some time later):

@build build added this to the 8.1.0 milestone Mar 5, 2019
@build build requested a review from a team March 5, 2019 12:53
@build
Copy link
Contributor

build commented Mar 5, 2019

Fails
🚫 Tests have failed, see below for more information.
Messages
📖

💾 Here's the generated SDK zipfile.

📖 🎉 Another contribution from our awesome community member, drauggres! Thanks again for helping us make Titanium SDK better. 👍
📖 ❌ 576 tests have failed There are 576 tests failing and 455 skipped out of 3539 total tests.

Tests:

Classname Name Time Error
android.emulator.require() should handle directory with package.json main pointing at directory with index.js 0.001 Requested module not found: ./package_with_main_dir
android.emulator.assert #ifError() throws for falsy number 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #ifError() does not throw undefined 0 Cannot read property 'ifError' of undefined
android.emulator.assert #ifError() does not throw null 0 Cannot read property 'ifError' of undefined
android.emulator.assert #ifError() is a function 0 Cannot read property 'ifError' of undefined
android.emulator.assert #deepEqual() does not throw for comparing Map with values 1 and '1' 0.001 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing Map with keys 1 and '1' 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing Set with 1 and '1' 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing true with 1 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing 4 with '4' 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing -0 with -0 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing 0 with -0 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepEqual() does not throw for comparing 1 with '1' as values of same key on objects 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepEqual() is a function 0 Cannot read property 'deepEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for Maps with differing key/value pairs 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing Maps with same key/value pairs in different order 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing Maps with same key/value pairs 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing two empty Maps 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing two Sets with same values in different order 0.001 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for Sets with differing objects as values 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() throws for Sets with different sizes 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing two Sets with same values 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing two empty Sets 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for circular structure that is equivalent 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for inconsistent circular structures 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() throws for sparse Arrays with different holes 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for sparse Array with same values 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for RegExp with different flags 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for Regexp with same value and flags 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for Regexp with same value 0.001 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for Array with different lengths 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() throws for Array with same values in differing order 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() throws for Array with differing values 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for Array with same values 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for Dates with same getTime() values 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does throw for Dates with differing getTime() values 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does throw for objects with differing type tags 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does throw for objects with differing prototypes 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for wrapped strings with same underlying values 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does throw for wrapped numbers with different underlying values 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does throw for objects with different symbol property keys 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for object with same symbol key 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for comparing true with 1 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() throws for comparing 4 with '4' 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() throws for comparing 0 with -0 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing -0 to -0 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() does not throw for comparing NaN to NaN 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #deepStrictEqual() throws for comparing 1 with '1' as values of same key on objects 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #deepStrictEqual() is a function 0 Cannot read property 'deepStrictEqual' of undefined
android.emulator.assert #doesNotReject() resolves when given a Promise that resolves 0 Cannot read property 'doesNotReject' of undefined
android.emulator.assert #doesNotReject() rejects with actual Error when given a Promise that rejects unexpected Error type 0 Cannot read property 'doesNotReject' of undefined
android.emulator.assert #doesNotReject() rejects with AssertionError when given a Promise that rejects expected Error type 0 Cannot read property 'doesNotReject' of undefined
android.emulator.assert #doesNotReject() rejects with actual Error when given a Promise that rejects 0 Cannot read property 'doesNotReject' of undefined
android.emulator.assert #doesNotReject() is a function 0 Cannot read property 'doesNotReject' of undefined
android.emulator.assert #rejects() rejects with AssertionError when given a Promise that resolves 0 Cannot read property 'rejects' of undefined
android.emulator.assert #rejects() rejects with actual Error when given a Promise that rejects unexpected Error type 0 Cannot read property 'rejects' of undefined
android.emulator.assert #rejects() resolves when given a Promise that rejects expected Error type 0 Cannot read property 'rejects' of undefined
android.emulator.assert #rejects() resolves when given a Promise that rejects 0.001 Cannot read property 'rejects' of undefined
android.emulator.assert #rejects() is a function 0 Cannot read property 'rejects' of undefined
android.emulator.assert #doesNotThrow() throws AssertionError with custom message when does match 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #doesNotThrow() throws AssertionError when matching function returns true 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #doesNotThrow() throws underlying Error when matching function returns false 0 Cannot read property 'doesNotThrow' of undefined
android.emulator.assert #doesNotThrow() throws AssertionError when RegExp matches 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #doesNotThrow() throws underlying Error when RegExp does not match 0 Cannot read property 'doesNotThrow' of undefined
android.emulator.assert #doesNotThrow() throws AssertionError when expected type does match 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #doesNotThrow() throws underlying Error when expected type does not match 0 Cannot read property 'doesNotThrow' of undefined
android.emulator.assert #doesNotThrow() is a function 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when fails match against RegExp 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() does not throw when matches RegExp 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when fails match against Error type 0.001 Cannot read property 'throws' of undefined
android.emulator.assert #throws() does not throw when matches Error type 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when fails match against Error instance with differing name or message properties 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #throws() does not throw when matches Error instance 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when fails match against Object 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #throws() does not throw when matches Object deeply 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() does not throw when matches Object 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when validation function returns false 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() does not throw when validation function is an arrow function and returns true 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() does not throw when validation function returns true 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when first argument is not a function 0 Cannot read property 'throws' of undefined
android.emulator.assert #throws() throws when function does not throw an Error 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #throws() is a function 0 Cannot read property 'throws' of undefined
android.emulator.assert #fail() throws supplied Error 0 Cannot read property 'fail' of undefined
android.emulator.assert #fail() throws AssertionError with given message string 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #fail() throws with default error message with no arguments 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #fail() is a function 0 Cannot read property 'fail' of undefined
android.emulator.assert #notStrictEqual() does not throw when comparing different strings 0 Cannot read property 'notStrictEqual' of undefined
android.emulator.assert #notStrictEqual() does not throw for comparing 1 with 2 0 Cannot read property 'notStrictEqual' of undefined
android.emulator.assert #notStrictEqual() does not throw for comparing 1 with '1' 0 Cannot read property 'notStrictEqual' of undefined
android.emulator.assert #notStrictEqual() throws for comparing 1 with 1 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #notStrictEqual() is a function 0 Cannot read property 'notStrictEqual' of undefined
android.emulator.assert #notEqual() does not throw for comparing 1 with 2 0 Cannot read property 'notEqual' of undefined
android.emulator.assert #notEqual() does throw for comparing 1 with '1' 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #notEqual() does throw for comparing 1 with 1 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #notEqual() is a function 0 Cannot read property 'notEqual' of undefined
android.emulator.assert #strictEqual() throws when comparing different strings 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #strictEqual() throws for comparing 1 with 2 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #strictEqual() throws for comparing 1 with '1' 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #strictEqual() does not throw for comparing 1 with 1 0 Cannot read property 'strictEqual' of undefined
android.emulator.assert #strictEqual() is a function 0 Cannot read property 'strictEqual' of undefined
android.emulator.assert #equal() throws for comparing 1 with 2 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #equal() does not throw for comparing 1 with '1' 0 Cannot read property 'equal' of undefined
android.emulator.assert #equal() does not throw for comparing 1 with 1 0 Cannot read property 'equal' of undefined
android.emulator.assert #equal() is a function 0 Cannot read property 'equal' of undefined
android.emulator.assert #ok() throws AssertionError with generated message for falsy number 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #ok() throws AssertionError with generated message for false 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #ok() throws AssertionError with generated message for falsy expression 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #ok() throws AssertionError with custom message if supplied 0 Cannot read property 'AssertionError' of undefined
android.emulator.assert #ok() throws AssertionError when no value argument is passed 0.001 Cannot read property 'AssertionError' of undefined
android.emulator.assert #ok() does not throw for 1 0 Cannot read property 'ok' of undefined
android.emulator.assert #ok() does not throw for true 0 Cannot read property 'ok' of undefined
android.emulator.assert #ok() is a function 0 Cannot read property 'ok' of undefined
android.emulator.assert should be required as core module 0.001 Requested module not found: assert
android.emulator.util .types #isRegexp() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isDate() returns true for Date instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isDate() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isMap() returns true for Map instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isMap() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isSet() returns true for Set instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isSet() is a function 0.001 Cannot read property 'types' of undefined
android.emulator.util .types #isBoxedPrimitive() returns true for boxed Symbol 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBoxedPrimitive() returns false for primitive Symbol 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBoxedPrimitive() returns true for boxed Boolean 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBoxedPrimitive() returns false for primitive Boolean 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBoxedPrimitive() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isSymbolObject() returns false for primitive Symbol 0 Cannot read property 'types' of undefined
android.emulator.util .types #isSymbolObject() returns true for boxed Symbol 0 Cannot read property 'types' of undefined
android.emulator.util .types #isSymbolObject() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBooleanObject() returns false for primitive Boolean 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBooleanObject() returns true for boxed Boolean 0 Cannot read property 'types' of undefined
android.emulator.util .types #isBooleanObject() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isStringObject() returns false for primitive String 0 Cannot read property 'types' of undefined
android.emulator.util .types #isStringObject() returns true for boxed String 0 Cannot read property 'types' of undefined
android.emulator.util .types #isStringObject() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNumberObject() returns false for primitive Number 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNumberObject() returns true for boxed Number 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNumberObject() is a function 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns false for custom Error subclass 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for URIError instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for TypeError instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for SyntaxError instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for ReferenceError instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for RangeError instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for EvalError instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() returns true for Error instance 0 Cannot read property 'types' of undefined
android.emulator.util .types #isNativeError() is a function 0 Cannot read property 'types' of undefined
android.emulator.util #error() concatenates with newline join 0 Cannot read property 'error' of undefined
android.emulator.util #error() is a function 0 Cannot read property 'error' of undefined
android.emulator.util #debug() concatenates with newline join 0 Cannot read property 'debug' of undefined
android.emulator.util #debug() is a function 0 Cannot read property 'debug' of undefined
android.emulator.util #puts() concatenates with newline join 0 Cannot read property 'puts' of undefined
android.emulator.util #puts() is a function 0 Cannot read property 'puts' of undefined
android.emulator.util #print() concatenates with no join 0 Cannot read property 'print' of undefined
android.emulator.util #print() is a function 0 Cannot read property 'print' of undefined
android.emulator.util #log() prepends timestamp to message 0 Cannot read property 'log' of undefined
android.emulator.util #log() is a function 0 Cannot read property 'log' of undefined
android.emulator.util #deprecate() wraps function to emit warning 0.001 Cannot read property 'deprecate' of undefined
android.emulator.util #deprecate() is a function 0 Cannot read property 'deprecate' of undefined
android.emulator.util #callbackify() handles special case of falsy rejection 0 Cannot read property 'callbackify' of undefined
android.emulator.util #callbackify() wraps function returning Promise to return function accepting callback (with error) 0 Cannot read property 'callbackify' of undefined
android.emulator.util #callbackify() wraps function returning Promise to return function accepting callback (with success) 0 Cannot read property 'callbackify' of undefined
android.emulator.util #callbackify() is a function 0 Cannot read property 'callbackify' of undefined
android.emulator.util #promisify() wraps callback function to return promise with rejection 0 Cannot read property 'promisify' of undefined
android.emulator.util #promisify() wraps callback function to return promise with resolve 0 Cannot read property 'promisify' of undefined
android.emulator.util #promisify() is a function 0 Cannot read property 'promisify' of undefined
android.emulator.util #inherits() hooks subclass to super constructor 0.001 Cannot read property 'inherits' of undefined
android.emulator.util #inherits() is a function 0 Cannot read property 'inherits' of undefined
android.emulator.util #inspect() with default breakLength just below break point 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with default breakLength at exact break point 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with nested object and empty options 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with toplevel and nested objects that break 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with toplevel object that breaks and nested object that doesn't break 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with nested object and infinite depth 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with object 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with same object repeated in an array 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() with simple object 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles object with property holding explicit undefined value 0.001 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles object with getter/setter property 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles object with setter property 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles object with getter property 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles function with custom property 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles arrow function 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles named function 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles empty function 0.001 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles class instance with custom type tag 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles class instance 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles object with custom type tag 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles Set instance with number values 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles empty Set instance 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles Map instance with key/value pair 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles Map instance 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles new Object 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles object primitive literal 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles new Regexp instance 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles Regexp literal with flags 0.001 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles Regexp literal 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles sparse array with length > options.maxArrayLength counting gaps as one item for length 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles array with length > options.maxArrayLength and is sparse 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles array with length > options.maxArrayLength 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles sparse array with multiple separate gaps 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles sparse array with multiple items missing in a row 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles sparse array 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles array with mixed values 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles array with number values 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles empty array 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles number literal 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() handles string literal 0 Cannot read property 'inspect' of undefined
android.emulator.util #inspect() is a function 0 Cannot read property 'inspect' of undefined
android.emulator.util #format() %o - object placeholder with simple object 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with floats 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with string 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with null 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() %o - object placeholder with int 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with same object twice 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with nested object 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with object 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with simple object 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with floats 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with string 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with null 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() %O - object placeholder with int 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with object throwing Error in toJSON() re-throws Error 0.001 expected Function { name: '' } to throw exception with a message matching 'Failed!', but got 'Cannot read property 'format' of undefined'
android.emulator.util #format() JSON placeholder with object having circular reference 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with null 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with empty string 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with string holding float value 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with ints 0 Cannot read property 'format' of undefined
android.emulator.util #format() JSON placeholder with floats 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with null 0.001 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with empty string 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with string holding float value 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with floats 0 Cannot read property 'format' of undefined
android.emulator.util #format() Integer placeholder with ints 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with null 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with empty string 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with string holding float value 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with ints 0 Cannot read property 'format' of undefined
android.emulator.util #format() Float placeholder with floats 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with null 0.001 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with empty string 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with string holding float value 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with ints 0 Cannot read property 'format' of undefined
android.emulator.util #format() Number placeholder with floats 0 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with Symbol 0 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with floats 0.001 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with string holding int value 0 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with string 0 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with null 0 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with undefined 0 Cannot read property 'format' of undefined
android.emulator.util #format() String placeholder with int 0 Cannot read property 'format' of undefined
android.emulator.util #format() if only one arg, returned as-is 0 Cannot read property 'format' of undefined
android.emulator.util #format() if first arg is not string, concat all args separated by spaces 0 Cannot read property 'format' of undefined
android.emulator.util #format() extra arguments are coerced into strings and concatenated delimited by space 0 Cannot read property 'format' of undefined
android.emulator.util #format() if placeholder has no corresponding argument, don't replace placeholder 0.001 Cannot read property 'format' of undefined
android.emulator.util #format() is a function 0 Cannot read property 'format' of undefined
android.emulator.util should be required as core module 0 Requested module not found: util
android.emulator.Titanium.UI.TabbedBar Index update - before window.open() 0 Attempt to invoke virtual method 'void ti.modules.titanium.ui.widget.TiUITabbedBar.setSelectedIndex(int)' on a null object reference
android.emulator.Titanium.UI.TabbedBar Labels update - before window.open() 0.001 Attempt to invoke virtual method 'void ti.modules.titanium.ui.widget.TiUITabbedBar.setNewLabels()' on a null object reference
android.emulator.Titanium.UI.TabGroup #set_activeTab_in_creation_dictionary 0.201 expected 'Tab A' to equal 'Tab B'
android.emulator.Titanium.UI.TabGroup #change_activeTab_property_before_open 0.24 expected 'Tab A' to equal 'Tab B'
android.emulator.Titanium.UI.TabGroup #setActiveTab()_before_open 0.254 expected 'Tab A' to equal 'Tab B'
android.emulator.Titanium.UI.TableView SearchView persistence 0.177 Attempt to invoke virtual method 'java.lang.Object org.appcelerator.kroll.KrollDict.get(java.lang.Object)' on a null object reference
ios.require() should handle directory with package.json main pointing at directory with index.js 0.056 the string "Couldn't find module: ./package_with_main_dir for architecture: x86_64" was thrown, throw an Error :)
ios.assert .strict #equal() does throw for comparing 1 with '1' 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert .strict #notDeepStrictEqual is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #deepStrictEqual is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #notStrictEqual is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #strictEqual is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #doesNotReject is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #rejects is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #doesNotThrow is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #throws is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #deepEqual is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #fail is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #ifError is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict #ok is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict is available off of itself 0 undefined is not an object (evaluating 'assert.strict')
ios.assert .strict is a function 0 undefined is not an object (evaluating 'assert.strict')
ios.assert #ifError() throws for Error instance with correct stack frames 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ifError() throws for Error instance 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ifError() throws for string 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ifError() throws for falsy number 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ifError() does not throw undefined 0 undefined is not an object (evaluating 'assert.ifError')
ios.assert #ifError() does not throw null 0 undefined is not an object (evaluating 'assert.ifError')
ios.assert #ifError() is a function 0 undefined is not an object (evaluating 'assert.ifError')
ios.assert #deepEqual() does not throw for comparing Map with values 1 and '1' 0 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing Map with keys 1 and '1' 0.001 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing Set with 1 and '1' 0.001 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing true with 1 0 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing 4 with '4' 0 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing -0 with -0 0 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing 0 with -0 0.001 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepEqual() does not throw for comparing 1 with '1' as values of same key on objects 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepEqual() is a function 0 undefined is not an object (evaluating 'assert.deepEqual')
ios.assert #deepStrictEqual() throws for Maps with differing key/value pairs 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for comparing Maps with same key/value pairs in different order 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for comparing Maps with same key/value pairs 0.001 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for comparing two empty Maps 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for comparing two Sets with same values in different order 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() throws for Sets with differing objects as values 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() throws for Sets with different sizes 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for comparing two Sets with same values 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for comparing two empty Sets 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for circular structure that is equivalent 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() throws for inconsistent circular structures 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() throws for sparse Arrays with different holes 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for sparse Array with same values 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() throws for RegExp with different flags 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for Regexp with same value and flags 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for Regexp with same value 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() throws for Array with different lengths 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() throws for Array with same values in differing order 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() throws for Array with differing values 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for Array with same values 0.001 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for Dates with same getTime() values 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does throw for Dates with differing getTime() values 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does throw for objects with differing type tags 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does throw for objects with differing prototypes 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for wrapped strings with same underlying values 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does throw for wrapped numbers with different underlying values 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does throw for objects with different symbol property keys 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for object with same symbol key 0.001 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() throws for comparing true with 1 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() throws for comparing 4 with '4' 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() throws for comparing 0 with -0 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() does not throw for comparing -0 to -0 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() does not throw for comparing NaN to NaN 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #deepStrictEqual() throws for comparing 1 with '1' as values of same key on objects 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #deepStrictEqual() is a function 0 undefined is not an object (evaluating 'assert.deepStrictEqual')
ios.assert #doesNotReject() resolves when given a Promise that resolves 0 undefined is not an object (evaluating 'assert.doesNotReject')
ios.assert #doesNotReject() rejects with actual Error when given a Promise that rejects unexpected Error type 0 undefined is not an object (evaluating 'assert.doesNotReject')
ios.assert #doesNotReject() rejects with AssertionError when given a Promise that rejects expected Error type 0 undefined is not an object (evaluating 'assert.doesNotReject')
ios.assert #doesNotReject() rejects with actual Error when given a Promise that rejects 0 undefined is not an object (evaluating 'assert.doesNotReject')
ios.assert #doesNotReject() is a function 0 undefined is not an object (evaluating 'assert.doesNotReject')
ios.assert #rejects() rejects with AssertionError when given a Promise that resolves 0 undefined is not an object (evaluating 'assert.rejects')
ios.assert #rejects() rejects with actual Error when given a Promise that rejects unexpected Error type 0 undefined is not an object (evaluating 'assert.rejects')
ios.assert #rejects() resolves when given a Promise that rejects expected Error type 0.001 undefined is not an object (evaluating 'assert.rejects')
ios.assert #rejects() resolves when given a Promise that rejects 0.001 undefined is not an object (evaluating 'assert.rejects')
ios.assert #rejects() is a function 0 undefined is not an object (evaluating 'assert.rejects')
ios.assert #doesNotThrow() throws AssertionError with custom message when does match 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #doesNotThrow() throws AssertionError when matching function returns true 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #doesNotThrow() throws underlying Error when matching function returns false 0 undefined is not an object (evaluating 'assert.doesNotThrow')
ios.assert #doesNotThrow() throws AssertionError when RegExp matches 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #doesNotThrow() throws underlying Error when RegExp does not match 0 undefined is not an object (evaluating 'assert.doesNotThrow')
ios.assert #doesNotThrow() throws AssertionError when expected type does match 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #doesNotThrow() throws underlying Error when expected type does not match 0.001 undefined is not an object (evaluating 'assert.doesNotThrow')
ios.assert #doesNotThrow() is a function 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when fails match against RegExp 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() does not throw when matches RegExp 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when fails match against Error type 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() does not throw when matches Error type 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when fails match against Error instance with differing name or message properties 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #throws() does not throw when matches Error instance 0.001 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when fails match against Object 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #throws() does not throw when matches Object deeply 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() does not throw when matches Object 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when validation function returns false 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() does not throw when validation function is an arrow function and returns true 0.001 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() does not throw when validation function returns true 0.001 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when first argument is not a function 0.001 undefined is not an object (evaluating 'assert.throws')
ios.assert #throws() throws when function does not throw an Error 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #throws() is a function 0 undefined is not an object (evaluating 'assert.throws')
ios.assert #fail() throws supplied Error 0 undefined is not an object (evaluating 'assert.fail')
ios.assert #fail() throws AssertionError with given message string 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #fail() throws with default error message with no arguments 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #fail() is a function 0 undefined is not an object (evaluating 'assert.fail')
ios.assert #notStrictEqual() does not throw when comparing different strings 0.001 undefined is not an object (evaluating 'assert.notStrictEqual')
ios.assert #notStrictEqual() does not throw for comparing 1 with 2 0 undefined is not an object (evaluating 'assert.notStrictEqual')
ios.assert #notStrictEqual() does not throw for comparing 1 with '1' 0 undefined is not an object (evaluating 'assert.notStrictEqual')
ios.assert #notStrictEqual() throws for comparing 1 with 1 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #notStrictEqual() is a function 0 undefined is not an object (evaluating 'assert.notStrictEqual')
ios.assert #notEqual() does not throw for comparing 1 with 2 0.001 undefined is not an object (evaluating 'assert.notEqual')
ios.assert #notEqual() does throw for comparing 1 with '1' 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #notEqual() does throw for comparing 1 with 1 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #notEqual() is a function 0 undefined is not an object (evaluating 'assert.notEqual')
ios.assert #strictEqual() throws when comparing different strings 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #strictEqual() throws for comparing 1 with 2 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #strictEqual() throws for comparing 1 with '1' 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #strictEqual() does not throw for comparing 1 with 1 0 undefined is not an object (evaluating 'assert.strictEqual')
ios.assert #strictEqual() is a function 0.001 undefined is not an object (evaluating 'assert.strictEqual')
ios.assert #equal() throws for comparing 1 with 2 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #equal() does not throw for comparing 1 with '1' 0 undefined is not an object (evaluating 'assert.equal')
ios.assert #equal() does not throw for comparing 1 with 1 0 undefined is not an object (evaluating 'assert.equal')
ios.assert #equal() is a function 0 undefined is not an object (evaluating 'assert.equal')
ios.assert #ok() throws AssertionError with generated message for falsy number 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ok() throws AssertionError with generated message for false 0 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ok() throws AssertionError with generated message for falsy expression 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ok() throws AssertionError with custom message if supplied 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ok() throws AssertionError when no value argument is passed 0.001 undefined is not an object (evaluating 'assert.AssertionError')
ios.assert #ok() does not throw for 1 0 undefined is not an object (evaluating 'assert.ok')
ios.assert #ok() does not throw for true 0 undefined is not an object (evaluating 'assert.ok')
ios.assert #ok() is a function 0 undefined is not an object (evaluating 'assert.ok')
ios.assert should be required as core module 0 the string "Couldn't find module: assert for architecture: x86_64" was thrown, throw an Error :)
ios.util .types #isRegexp() returns true for Regexp primitive 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isRegexp() returns true for Regexp instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isRegexp() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isDate() returns true for Date instance 0.001 undefined is not an object (evaluating 'util.types')
ios.util .types #isDate() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isMap() returns true for Map instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isMap() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isSet() returns true for Set instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isSet() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isBoxedPrimitive() returns true for boxed Symbol 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isBoxedPrimitive() returns false for primitive Symbol 0.001 undefined is not an object (evaluating 'util.types')
ios.util .types #isBoxedPrimitive() returns true for boxed Boolean 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isBoxedPrimitive() returns false for primitive Boolean 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isBoxedPrimitive() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isSymbolObject() returns false for primitive Symbol 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isSymbolObject() returns true for boxed Symbol 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isSymbolObject() is a function 0.001 undefined is not an object (evaluating 'util.types')
ios.util .types #isBooleanObject() returns false for primitive Boolean 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isBooleanObject() returns true for boxed Boolean 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isBooleanObject() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isStringObject() returns false for primitive String 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isStringObject() returns true for boxed String 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isStringObject() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNumberObject() returns false for primitive Number 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNumberObject() returns true for boxed Number 0.001 undefined is not an object (evaluating 'util.types')
ios.util .types #isNumberObject() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns false for custom Error subclass 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for URIError instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for TypeError instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for SyntaxError instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for ReferenceError instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for RangeError instance 0 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for EvalError instance 0.001 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() returns true for Error instance 0.001 undefined is not an object (evaluating 'util.types')
ios.util .types #isNativeError() is a function 0 undefined is not an object (evaluating 'util.types')
ios.util #error() concatenates with newline join 0.001 undefined is not an object (evaluating 'util.error')
ios.util #error() is a function 0.001 undefined is not an object (evaluating 'util.error')
ios.util #debug() concatenates with newline join 0 undefined is not an object (evaluating 'util.debug')
ios.util #debug() is a function 0 undefined is not an object (evaluating 'util.debug')
ios.util #puts() concatenates with newline join 0 undefined is not an object (evaluating 'util.puts')
ios.util #puts() is a function 0 undefined is not an object (evaluating 'util.puts')
ios.util #print() concatenates with no join 0.001 undefined is not an object (evaluating 'util.print')
ios.util #print() is a function 0.001 undefined is not an object (evaluating 'util.print')
ios.util #log() prepends timestamp to message 0.001 undefined is not an object (evaluating 'util.log')
ios.util #log() is a function 0 undefined is not an object (evaluating 'util.log')
ios.util #deprecate() wraps function to emit warning 0 undefined is not an object (evaluating 'util.deprecate')
ios.util #deprecate() is a function 0 undefined is not an object (evaluating 'util.deprecate')
ios.util #callbackify() handles special case of falsy rejection 0 undefined is not an object (evaluating 'util.callbackify')
ios.util #callbackify() wraps function returning Promise to return function accepting callback (with error) 0 undefined is not an object (evaluating 'util.callbackify')
ios.util #callbackify() wraps function returning Promise to return function accepting callback (with success) 0 undefined is not an object (evaluating 'util.callbackify')
ios.util #callbackify() is a function 0 undefined is not an object (evaluating 'util.callbackify')
ios.util #promisify() wraps callback function to return promise with rejection 0 undefined is not an object (evaluating 'util.promisify')
ios.util #promisify() wraps callback function to return promise with resolve 0.001 undefined is not an object (evaluating 'util.promisify')
ios.util #promisify() is a function 0.001 undefined is not an object (evaluating 'util.promisify')
ios.util #inherits() hooks subclass to super constructor 0.001 undefined is not an object (evaluating 'util.inherits')
ios.util #inherits() is a function 0 undefined is not an object (evaluating 'util.inherits')
ios.util #inspect() with default breakLength just below break point 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with default breakLength at exact break point 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with nested object and empty options 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with toplevel and nested objects that break 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with toplevel object that breaks and nested object that doesn't break 0.001 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with nested object and infinite depth 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with object 0.001 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with same object repeated in an array 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() with simple object 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles object with property holding explicit undefined value 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles object with getter/setter property 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles object with setter property 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles object with getter property 0.001 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles function with custom property 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles arrow function 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles named function 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles empty function 0.001 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles class instance with custom type tag 0.001 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles class instance 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles object with custom type tag 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles Set instance with number values 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles empty Set instance 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles Map instance with key/value pair 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles Map instance 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles new Object 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles object primitive literal 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles new Regexp instance 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles Regexp literal with flags 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles Regexp literal 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles sparse array with length > options.maxArrayLength counting gaps as one item for length 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles array with length > options.maxArrayLength and is sparse 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles array with length > options.maxArrayLength 0.001 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles sparse array with multiple separate gaps 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles sparse array with multiple items missing in a row 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles sparse array 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles array with mixed values 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles array with number values 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles empty array 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles number literal 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() handles string literal 0 undefined is not an object (evaluating 'util.inspect')
ios.util #inspect() is a function 0 undefined is not an object (evaluating 'util.inspect')
ios.util #format() %o - object placeholder with simple object 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with Symbol 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with floats 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with string holding int value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with string 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with undefined 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %o - object placeholder with int 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with same object twice 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with nested object 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with object 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with simple object 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with Symbol 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with floats 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with string holding int value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with string 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with undefined 0 undefined is not an object (evaluating 'util.format')
ios.util #format() %O - object placeholder with int 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with object throwing Error in toJSON() re-throws Error 0 expected Function { name: '' } to throw exception with a message matching 'Failed!', but got 'undefined is not an object (evaluating 'util.format')'
ios.util #format() JSON placeholder with object having circular reference 0 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with undefined 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with Symbol 0 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with empty string 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with string holding float value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with string holding int value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with ints 0 undefined is not an object (evaluating 'util.format')
ios.util #format() JSON placeholder with floats 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with undefined 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with Symbol 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with empty string 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with string holding float value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with string holding int value 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with floats 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Integer placeholder with ints 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with undefined 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with Symbol 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with empty string 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with string holding float value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with string holding int value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with ints 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Float placeholder with floats 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with undefined 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with Symbol 0.001 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with empty string 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with string holding float value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with string holding int value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with ints 0 undefined is not an object (evaluating 'util.format')
ios.util #format() Number placeholder with floats 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with Symbol 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with floats 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with string holding int value 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with string 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with null 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with undefined 0 undefined is not an object (evaluating 'util.format')
ios.util #format() String placeholder with int 0 undefined is not an object (evaluating 'util.format')
ios.util #format() if only one arg, returned as-is 0 undefined is not an object (evaluating 'util.format')
ios.util #format() if first arg is not string, concat all args separated by spaces 0 undefined is not an object (evaluating 'util.format')
ios.util #format() extra arguments are coerced into strings and concatenated delimited by space 0 undefined is not an object (evaluating 'util.format')
ios.util #format() if placeholder has no corresponding argument, don't replace placeholder 0 undefined is not an object (evaluating 'util.format')
ios.util #format() is a function 0 undefined is not an object (evaluating 'util.format')
ios.util should be required as core module 0 the string "Couldn't find module: util for architecture: x86_64" was thrown, throw an Error :)
ios.Titanium.Media.AudioPlayer .duration 1.005 expected -2147483648 to be within 45250..45500
ios.Titanium.UI.Matrix2D apiName 0.001 expected 'Ti.UI.2DMatrix' to equal 'Ti.UI.Matrix2D'

Generated by 🚫 dangerJS against 0bf5475

@garymathews
Copy link
Contributor

Thanks for this contribution, this is nice!

We will take a look once you have finished.

- Lock isolates for multithreading
- Group static cache and templates by isolate
- Run module code in separate thread using newly created isolate
- Web Workers API: "postMessage" and "onmessage" functions on WorkerGlobalScope
- ti.worker API: "worker" object on WorkerGlobalScope (with "postMessage" and
"onmessage" methods on it)
- Implement `EventTarget` interface on WorkerGlobalScope
@drauggres drauggres changed the title [WIP] [TIMOB-4790] Android: Worker API [TIMOB-4790] Android: Worker API Mar 7, 2019
- fix double "onmessage" handler call
- don't export global "Worker"
- export WorkerProxy "apiName"
@drauggres
Copy link
Contributor Author

It's turned out that we can't create worker with new Worker('file.js'), because when there is no Ti.Worker string in the application code, build system will not include "worker module" classes in the apk (for "production" builds). So for now Ti.Worker.createWorker is the only way to create new worker.

Also fixed onmessage handler (was called twice)
Added tests.

@ffMathy
Copy link
Contributor

ffMathy commented May 27, 2019

What is the status on this?

@drauggres
Copy link
Contributor Author

@ffMathy If you mean the code: I know at least one person (except me) who uses it. Everything should work as described in the first message. You can build it yourself or grab prebuilt SDK from here.
Let me know if you'll have any problems with it.

@sgtcoolguy sgtcoolguy modified the milestones: 8.1.0, 8.2.0 Jun 3, 2019
@sgtcoolguy sgtcoolguy removed this from the 8.2.0 milestone Sep 5, 2019
@sgtcoolguy sgtcoolguy added this to the 8.3.0 milestone Sep 5, 2019
@build
Copy link
Contributor

build commented Sep 10, 2019

Warnings
⚠️

Commit f3b58319b3a499cb188dd73e14d9da053dd77153 has a message "[TIMOB-24549] Android: Promise API" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit d6bf5d1f03342edfed4bf4e8e91134f8d765be0e has a message "[TIMOB-24549] Android: fix promise fulfillment" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit 4f7b9fe1be0c16d41864f3dac194fe497f010322 has a message "[TIMOB-24549] Android: update Geolocation methods

Geolocation #forwardGeocoder() and #reverseGeocoder() return Promise" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit 59999d2e63322eca2b48d4bfbc29f64d8cef61a8 has a message "[TIMOB-24549] Update Geolocation tests" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit 550b41a4fad7a989b6966025777dccd7f0175e78 has a message "[TIMOB-24549] Android: "requestPermissions" returns Promise" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit 8b1e6760b12cafd5ce51abcc186f4053300c850b has a message "[TIMOB-4790] Android: Worker API

  • Lock isolates for multithreading
  • Group static cache and templates by isolate
  • Run module code in separate thread using newly created isolate
  • Web Workers API: "postMessage" and "onmessage" functions on WorkerGlobalScope
  • ti.worker API: "worker" object on WorkerGlobalScope (with "postMessage" and
    "onmessage" methods on it)
  • Implement EventTarget interface on WorkerGlobalScope" giving 2 errors:
  • subject may not be empty
  • type may not be empty
⚠️

Commit e9829698f49a70a9573064c2715189e62017d692 has a message "[TIMOB-4790] Android: Worker API fixes

  • fix double "onmessage" handler call
  • don't export global "Worker"
  • export WorkerProxy "apiName"" giving 2 errors:
  • subject may not be empty
  • type may not be empty
⚠️

Commit 0bf547587370b70c1aaca6657f760f1f18e2f0f0 has a message "[TIMOB-4790] Android: Worker API. Add tests" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit d05d4626704fbad1f3548767b3d8e878f720ed13 has a message "[TIMOB-24549] Fix Geolocation tests" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit 48626e2bc560772af446313f17752fa44f7dd031 has a message "[TIMOB-4790] Android: Worker API. Fix tests" giving 2 errors:

  • subject may not be empty
  • type may not be empty
⚠️

Commit 35f5eee980c2159bd25e3b0dac850688dc92d714 has a message "[TIMOB-26239] Android: remove Ti.UI.currentWindow" giving 2 errors:

  • subject may not be empty
  • type may not be empty
Messages
📖

💾 Here's the generated SDK zipfile.

📖 🎉 Another contribution from our awesome community member, drauggres! Thanks again for helping us make Titanium SDK better. 👍
📖

✅ All tests are passing
Nice one! All 4350 tests are passing.
(There are 471 tests skipped)

📖

🚨 This PR has one or more commits with warnings/errors for commit messages not matching our configuration. You may want to squash merge this PR and edit the message to match our conventions, or ask the original developer to modify their history.

Generated by 🚫 dangerJS against 48626e2

@sgtcoolguy sgtcoolguy removed this from the 8.3.0 milestone Dec 10, 2019
@drauggres drauggres closed this Feb 18, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants