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

Cleanup Ember.Test, Ember.testing, Ember.onerror #13440

Merged
merged 1 commit into from
May 5, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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