Skip to content

Commit

Permalink
Cleanup Ember.Test, Ember.testing, Ember.onerror
Browse files Browse the repository at this point in the history
  • Loading branch information
krisselden committed May 4, 2016
1 parent 8a94054 commit d9f57e8
Show file tree
Hide file tree
Showing 49 changed files with 1,374 additions and 1,155 deletions.
5 changes: 0 additions & 5 deletions .jshintrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,6 @@
"QUnit",
"define",
"console",
"DS",
"Handlebars",
"RSVP",
"require",
"requireModule",
"equal",
"notEqual",
"notStrictEqual",
Expand Down
9 changes: 5 additions & 4 deletions packages/ember-application/lib/system/application.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@
@module ember
@submodule ember-application
*/
import Ember from 'ember-metal'; // Ember.libraries, Ember.testing
import { ENV } from 'ember-environment';
import { assert, debug, warn, deprecate } from 'ember-metal/debug';
import libraries from 'ember-metal/libraries';
import { isTesting } from 'ember-metal/testing';
import { get } from 'ember-metal/property_get';
import Namespace, {
setSearchDisabled as setNamespaceSearchDisabled
Expand Down Expand Up @@ -737,7 +738,7 @@ const Application = Engine.extend({
didBecomeReady() {
try {
// TODO: Is this still needed for _globalsMode = false?
if (!Ember.testing) {
if (!isTesting()) {
// Eagerly name all classes that are already loaded
Namespace.processAll();
setNamespaceSearchDisabled(true);
Expand Down Expand Up @@ -1172,7 +1173,7 @@ function registerLibraries() {
librariesRegistered = true;

if (environment.hasDOM) {
Ember.libraries.registerCoreLibrary('jQuery', jQuery().jquery);
libraries.registerCoreLibrary('jQuery', jQuery().jquery);
}
}
}
Expand All @@ -1181,7 +1182,7 @@ function logLibraryVersions() {
if (ENV.LOG_VERSION) {
// we only need to see this once per Application#init
ENV.LOG_VERSION = false;
var libs = Ember.libraries._registry;
var libs = libraries._registry;

var nameLengths = libs.map(function(item) {
return get(item, 'name.length');
Expand Down
7 changes: 3 additions & 4 deletions packages/ember-application/tests/system/application_test.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
/*globals EmberDev */

import Ember from 'ember-metal/core'; // Ember.libraries
import VERSION from 'ember/version';
import { ENV, context } from 'ember-environment';
import run from 'ember-metal/run_loop';
import libraries from 'ember-metal/libraries';
import Application, { _resetLegacyAddonWarnings } from 'ember-application/system/application';
import DefaultResolver from 'ember-application/system/resolver';
import Router from 'ember-routing/system/router';
Expand Down Expand Up @@ -278,7 +277,7 @@ QUnit.test('enable log of libraries with an ENV var', function() {
messages.push(message);
});

Ember.libraries.register('my-lib', '2.0.0a');
libraries.register('my-lib', '2.0.0a');

run(function() {
app = Application.create({
Expand All @@ -290,7 +289,7 @@ QUnit.test('enable log of libraries with an ENV var', function() {
equal(messages[2], 'jQuery : ' + jQuery().jquery);
equal(messages[3], 'my-lib : ' + '2.0.0a');

Ember.libraries.deRegister('my-lib');
libraries.deRegister('my-lib');
});

QUnit.test('disable log version of libraries with an ENV var', function() {
Expand Down
3 changes: 2 additions & 1 deletion packages/ember-debug/lib/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import Ember from 'ember-metal/core'; // reexports
import { ENV } from 'ember-environment';
import { isTesting } from 'ember-metal/testing';
import {
warn,
deprecate,
Expand Down Expand Up @@ -182,7 +183,7 @@ export function _warnIfUsingStrippedFeatureFlags(FEATURES, knownFeatures, featur
}
}

if (!Ember.testing) {
if (!isTesting()) {
// Complain if they're using FEATURE flags in builds other than canary
FEATURES['features-stripped-test'] = true;
var featuresWereStripped = true;
Expand Down
12 changes: 0 additions & 12 deletions packages/ember-metal/lib/core.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import require from 'require';

import { context } from 'ember-environment';

/**
Expand Down Expand Up @@ -29,16 +27,6 @@ Ember.isNamespace = true;

Ember.toString = function() { return 'Ember'; };

// The debug functions are exported to globals with `require` to
// prevent babel-plugin-filter-imports from removing them.
let debugModule = require('ember-metal/debug');
Ember.assert = debugModule.assert;
Ember.warn = debugModule.warn;
Ember.debug = debugModule.debug;
Ember.deprecate = debugModule.deprecate;
Ember.deprecateFunc = debugModule.deprecateFunc;
Ember.runInDebug = debugModule.runInDebug;

// ..........................................................
// BOOTSTRAP
//
Expand Down
38 changes: 38 additions & 0 deletions packages/ember-metal/lib/error_handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import Logger from 'ember-console';
import { isTesting } from './testing';

let onerror;
// Ember.onerror getter
export function getOnerror() {
return onerror;
}
// Ember.onerror setter
export function setOnerror(handler) {
onerror = handler;
}

let dispatchOverride;
// dispatch error
export function dispatchError(error) {
if (dispatchOverride) {
dispatchOverride(error);
} else {
defaultDispatch(error);
}
}

// allows testing adapter to override dispatch
export function setDispatchOverride(handler) {
dispatchOverride = handler;
}

function defaultDispatch(error) {
if (isTesting()) {
throw error;
}
if (onerror) {
onerror(error);
} else {
Logger.error(error.stack);
}
}
38 changes: 34 additions & 4 deletions packages/ember-metal/lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,8 +141,17 @@ import {
isGlobalPath
} from 'ember-metal/path_cache';

import {
isTesting,
setTesting
} from 'ember-metal/testing';
import {
getOnerror,
setOnerror
} from 'ember-metal/error_handler';

import run from 'ember-metal/run_loop';
import Libraries from 'ember-metal/libraries';
import libraries from 'ember-metal/libraries';
import isNone from 'ember-metal/is_none';
import isEmpty from 'ember-metal/is_empty';
import isBlank from 'ember-metal/is_blank';
Expand Down Expand Up @@ -300,8 +309,9 @@ Ember._Backburner = Backburner;
*/
Ember.VERSION = VERSION;

Ember.libraries = new Libraries();
Ember.libraries.registerCoreLibrary('Ember', VERSION);
Ember.libraries = libraries;

libraries.registerCoreLibrary('Ember', Ember.VERSION);

Ember.isNone = isNone;
Ember.isEmpty = isEmpty;
Expand Down Expand Up @@ -361,6 +371,12 @@ Object.defineProperty(Ember, 'lookup', {
enumerable: false
});

Object.defineProperty(Ember, 'testing', {
get: isTesting,
set: setTesting,
enumerable: false
});

/**
A function may be assigned to `Ember.onerror` to be called when Ember
internals encounter an error. This is useful for specialized error handling
Expand All @@ -382,7 +398,11 @@ Object.defineProperty(Ember, 'lookup', {
@param {Exception} error the error object
@public
*/
Ember.onerror = null;
Object.defineProperty(Ember, 'onerror', {
get: getOnerror,
set: setOnerror,
enumerable: false
});

/**
An empty function useful for some operations. Always returns `this`.
Expand All @@ -392,6 +412,16 @@ Ember.onerror = null;
@public
*/
Ember.K = function K() { return this; };

// The debug functions are exported to globals with `require` to
// prevent babel-plugin-filter-imports from removing them.
let debugModule = require('ember-metal/debug');
Ember.assert = debugModule.assert;
Ember.warn = debugModule.warn;
Ember.debug = debugModule.debug;
Ember.deprecate = debugModule.deprecate;
Ember.deprecateFunc = debugModule.deprecateFunc;
Ember.runInDebug = debugModule.runInDebug;
// END EXPORTS

// do this for side-effects of updating Ember.assert, warn, etc when
Expand Down
4 changes: 2 additions & 2 deletions packages/ember-metal/lib/libraries.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import isEnabled from 'ember-metal/features';
@constructor
@private
*/
function Libraries() {
export function Libraries() {
this._registry = [];
this._coreLibIndex = 0;
}
Expand Down Expand Up @@ -63,4 +63,4 @@ if (isEnabled('ember-libraries-isregistered')) {
};
}

export default Libraries;
export default new Libraries();
24 changes: 18 additions & 6 deletions packages/ember-metal/lib/run_loop.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import Ember from 'ember-metal/core'; // onErrorTarget and Ember.testing
import { assert } from 'ember-metal/debug';
import { isTesting } from 'ember-metal/testing';
import {
getOnerror,
setOnerror
} from 'ember-metal/error_handler';
import {
GUID_KEY
} from 'ember-metal/utils';
Expand All @@ -17,7 +21,15 @@ function onEnd(current, next) {
run.currentRunLoop = next;
}

// ES6TODO: should Backburner become es6?
const onErrorTarget = {
get onerror() {
return getOnerror();
},
set onerror(handler) {
return setOnerror(handler);
}
};

var backburner = new Backburner(['sync', 'actions', 'destroy'], {
GUID_KEY: GUID_KEY,
sync: {
Expand All @@ -27,7 +39,7 @@ var backburner = new Backburner(['sync', 'actions', 'destroy'], {
defaultQueue: 'actions',
onBegin: onBegin,
onEnd: onEnd,
onErrorTarget: Ember,
onErrorTarget: onErrorTarget,
onErrorMethod: 'onerror'
});

Expand Down Expand Up @@ -261,7 +273,7 @@ run.schedule = function(/* queue, target, method */) {
assert(
`You have turned on testing mode, which disabled the run-loop's autorun. ` +
`You will need to wrap any code with asynchronous side-effects in a run`,
run.currentRunLoop || !Ember.testing
run.currentRunLoop || !isTesting()
);
backburner.schedule(...arguments);
};
Expand Down Expand Up @@ -346,7 +358,7 @@ run.once = function(...args) {
assert(
`You have turned on testing mode, which disabled the run-loop's autorun. ` +
`You will need to wrap any code with asynchronous side-effects in a run`,
run.currentRunLoop || !Ember.testing
run.currentRunLoop || !isTesting()
);
args.unshift('actions');
return backburner.scheduleOnce(...args);
Expand Down Expand Up @@ -408,7 +420,7 @@ run.scheduleOnce = function(/*queue, target, method*/) {
assert(
`You have turned on testing mode, which disabled the run-loop's autorun. ` +
`You will need to wrap any code with asynchronous side-effects in a run`,
run.currentRunLoop || !Ember.testing
run.currentRunLoop || !isTesting()
);
return backburner.scheduleOnce(...arguments);
};
Expand Down
9 changes: 9 additions & 0 deletions packages/ember-metal/lib/testing.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
let testing = false;

export function isTesting() {
return testing;
}

export function setTesting(value) {
testing = !!value;
}
2 changes: 1 addition & 1 deletion packages/ember-metal/tests/libraries_test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* globals EmberDev */
import { getDebugFunction, setDebugFunction } from 'ember-metal/debug';
import isEnabled from 'ember-metal/features';
import Libraries from 'ember-metal/libraries';
import { Libraries } from 'ember-metal/libraries';

var libs, registry;
let originalWarn = getDebugFunction('warn');
Expand Down
28 changes: 17 additions & 11 deletions packages/ember-metal/tests/run_loop/onerror_test.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,36 @@
import Ember from 'ember-metal'; // Ember.onerror
import run from 'ember-metal/run_loop';
import { setOnerror, getOnerror } from 'ember-metal/error_handler';

QUnit.module('system/run_loop/onerror_test');

QUnit.test('With Ember.onerror undefined, errors in Ember.run are thrown', function () {
var thrown = new Error('Boom!');
var caught;
let thrown = new Error('Boom!');
let original = getOnerror();

let caught;
setOnerror(undefined);
try {
run(function() { throw thrown; });
run(() => { throw thrown; });
} catch (error) {
caught = error;
} finally {
setOnerror(original);
}

deepEqual(caught, thrown);
});

QUnit.test('With Ember.onerror set, errors in Ember.run are caught', function () {
var thrown = new Error('Boom!');
var caught;
let thrown = new Error('Boom!');
let original = getOnerror();

Ember.onerror = function(error) { caught = error; };

run(function() { throw thrown; });
let caught;
setOnerror(error => { caught = error; });
try {
run(() => { throw thrown; });
} finally {
setOnerror(original);
}

deepEqual(caught, thrown);

Ember.onerror = undefined;
});
4 changes: 2 additions & 2 deletions packages/ember-routing/lib/system/route.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Ember from 'ember-metal/core'; // FEATURES, A, deprecate, assert, Logger
import { assert, deprecate, info } from 'ember-metal/debug';
import { isTesting } from 'ember-metal/testing';
import isEnabled from 'ember-metal/features';
import EmberError from 'ember-metal/error';
import { get } from 'ember-metal/property_get';
Expand Down Expand Up @@ -1185,7 +1185,7 @@ var Route = EmberObject.extend(ActionHandler, Evented, {
@public
*/
send(...args) {
if ((this.router && this.router.router) || !Ember.testing) {
if ((this.router && this.router.router) || !isTesting()) {
this.router.send(...args);
} else {
var name = args[0];
Expand Down
Loading

0 comments on commit d9f57e8

Please sign in to comment.