diff --git a/.travis.yml b/.travis.yml index e36b3fef12f..1877ea33fea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,16 +10,17 @@ before_install: - "npm config set spin false" - "npm install -g npm@^2" install: -- "npm install" + - "npm install" + script: - - npm run-script test - - npm run-script test:beta - - npm run-script test:canary + - npm test + after_success: -- npm run-script publish-build -- "./bin/bower-ember-data-build" + - "npm run-script build && ./bin/publish_to_s3.js" + - "./bin/bower-ember-data-build" env: global: + - CI="true" - BROCCOLI_ENV="production" - S3_BUILD_CACHE_BUCKET=emberjs-build-cache - S3_BUCKET_NAME=builds.emberjs.com @@ -35,3 +36,7 @@ env: kLwKiKgRNhindV3WvbUcoiIrmrgBMCiBRRd4eyVBlhbZ8RTo1Ig=' - secure: "hJZXijsot2wMiMsxbDImH+nB5v77a7O7lQ7bicOQEQxmnTtXSvqfa4X4vQ/d4o7NNYYYHUuOpyILgRV+arqI6UOi7XEVGka/7M5q58R5exS6bk0cY0jnpUhUVW/8mpKEUgcVeE6mIDWaR090l3uaT2JhU/WSLkzbj45e38HaF/4=" + matrix: + - EMBER_CHANNEL=release + - EMBER_CHANNEL=beta + - EMBER_CHANNEL=canary diff --git a/Brocfile.js b/Brocfile.js index d53229fa017..9eb47aa3615 100644 --- a/Brocfile.js +++ b/Brocfile.js @@ -1,199 +1,28 @@ /* jshint node: true */ -var es6 = require('broccoli-es6-module-transpiler'); -var PackageResolver = require('es6-module-transpiler-package-resolver'); -var concat = require('broccoli-concat'); -var uglify = require('broccoli-uglify-js'); -var es3SafeRecast = require('broccoli-es3-safe-recast'); -var env = process.env.EMBER_ENV; -var amdBuild = require('./lib/amd-build'); -var pickFiles = require('broccoli-static-compiler'); -var merge = require('broccoli-merge-trees'); -var moveFile = require('broccoli-file-mover'); -var wrap = require('broccoli-wrap'); -var jshint = require('broccoli-jshint'); -var defeatureify = require('broccoli-defeatureify'); -var version = require('git-repo-version')(10); -var yuidoc = require('broccoli-yuidoc'); -var replace = require('broccoli-replace'); -var stew = require('broccoli-stew'); -var path = require('path'); -var fs = require('fs'); -var jscsTree = require('broccoli-jscs'); - -function minify(tree, name){ - var config = require('./config/ember-defeatureify'); - tree = defeatureify(tree, { - debugStatements: config.options.debugStatements, - enableStripDebug: config.stripDebug - }); - tree = moveFile(tree, { - srcFile: name + '.js', - destFile: '/' + name + '.prod.js' - }); - tree = removeSourceMappingURL(tree); - var uglified = moveFile(uglify(tree, {mangle: true}),{ - srcFile: name + '.prod.js', - destFile: '/' + name + '.min.js' - }); - return merge([uglified, tree], {overwrite: true}); -} - -function testTree(packageName){ - var test = pickFiles('packages/' + packageName + '/tests', { - srcDir: '/', - files: [ '**/*.js' ], - destDir: '/' + packageName - }); - var jshinted = jshint('packages/' + packageName + '/', { - jshintrcPath: path.join(__dirname, '.jshintrc') - }); - jshinted = wrap(jshinted, { - wrapper: [ "if (!QUnit.urlParams.nojshint) {\n", "\n}"], - }); - jshinted = pickFiles(jshinted, { - files: ['{lib,tests}/**/*.js'], - srcDir: '/', - destDir: '/' + packageName + '-jshint' - }); - return merge([jshinted, test]); -} - -var yuidocTree = yuidoc('packages', { - srcDir: '/', - destDir: 'docs', - yuidoc: { - "name": "The ember-data API", - "description": "The ember-data API: a data persistence library for Ember.js", - "version": version, - "logo": "http://f.cl.ly/items/1A1L432s022u1O1q1V3p/ember%20logo.png", - "url": "https://github.com/emberjs/data", - "options": { - "paths": [ - "packages/ember-data/lib", - "packages/activemodel-adapter/lib", - "packages/ember-inflector/addon" - ], - "exclude": "vendor", - "outdir": "docs/build" - } +// To create fast production builds (without ES3 support, minification, derequire, or JSHint) +// run the following: +// +// DISABLE_ES3=true DISABLE_JSCS=true DISABLE_JSHINT=true DISABLE_MIN=true DISABLE_DEREQUIRE=true ember serve --environment=production + +var EmberBuild = require('emberjs-build'); +var packages = require('./lib/packages'); +var vendoredPackage = require('emberjs-build/lib/vendored-package'); +var vendoredES6Package = require('emberjs-build/lib/es6-vendored-package'); + +var emberBuild = new EmberBuild({ + name: 'ember-data', + namespace: 'DS', + packages: packages, + skipTemplates: true, + skipRuntime: true, + vendoredPackages: { + 'loader': vendoredPackage('loader'), + 'ember-inflector': vendoredES6Package('ember-inflector', { + libPath: 'bower_components/ember-inflector/packages/ember-inflector/lib', + destDir: '/ember-inflector' + }) } }); -// Excludes tests files from package path -function package(packagePath, vendorPath) { - vendorPath = vendorPath || 'packages/'; - return pickFiles(vendorPath + packagePath, { - files: [ 'lib/**/*.js' ], - srcDir: '/', - destDir: '/' + packagePath - }); -} - -function packageAddon(packagePath, vendorPath) { - return stew.rename(pickFiles(vendorPath + packagePath, { - files: [ '**/*.js' ], - srcDir: '/addon', - destDir: '/' + packagePath + '/lib' - }), 'index.js', 'main.js'); -} - -var packages = merge([ - packageAddon('ember-inflector', 'node_modules/'), - package('ember-data'), - package('activemodel-adapter'), - package('ember') -]); - -var globalBuild; - -// Bundle formatter for smaller payload -if (env === 'production') { - globalBuild = es6(packages, { - inputFiles: ['ember-data'], - output: '/ember-data.js', - resolvers: [PackageResolver], - formatter: 'bundle' - }); -} else { -// Use AMD for faster rebuilds in dev - globalBuild = amdBuild(packages); -} - -var testFiles = merge([ - testTree('ember-data'), - testTree('activemodel-adapter') -]); - -if (env === 'production'){ - testFiles = es3SafeRecast(testFiles); -} - -testFiles = concat(testFiles, { - inputFiles: ['**/*.js'], - separator: '\n', - wrapInEval: true, - wrapInFunction: true, - outputFile: '/ember-data-tests.js' -}); - -var testRunner = pickFiles('tests', { - srcDir: '/', - files: [ '**/*' ], - destDir: '/' -}); - -var bower = pickFiles('bower_components', { - srcDir: '/', - destDir: '/bower_components' -}); - -var configurationFiles = pickFiles('config/package-manager-files', { - srcDir: '/', - destDir: '/', - files: [ '**/*.json' ] -}); - -function versionStamp(tree) { - return replace(tree, { - files: ['**/*'], - patterns: [{ - match: /VERSION_STRING_PLACEHOLDER/g, - replacement: version - }] - }); -} - -function removeSourceMappingURL(tree) { - return replace(tree, { - files: ['**/*'], - patterns: [{ - match: /\/\/(.*)sourceMappingURL=(.*)/g, - replacement: '' - }] - }); -} - -configurationFiles = versionStamp(configurationFiles); - -var jscsFiles = jscsTree("packages"); - -var trees = [ - testFiles, - testRunner, - bower, - configurationFiles, - jscsFiles -]; - -if (env === 'production') { - globalBuild = versionStamp(globalBuild); - globalBuild = es3SafeRecast(globalBuild); - var minifiedGlobals = minify(globalBuild, 'ember-data'); - trees.push(yuidocTree); - trees.push(minifiedGlobals); -} - -trees.push(globalBuild); - -module.exports = merge(trees, {overwrite: true}); +module.exports = emberBuild.getDistTrees(); diff --git a/appveyor.yml b/appveyor.yml index 9ffb28ec91d..d20a8c070f9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,6 +7,7 @@ init: # Test against these versions of Node.js. environment: matrix: + - nodejs_version: "0.10" - nodejs_version: "0.12" # Install scripts. (runs after repo cloning) diff --git a/bin/run-tests.js b/bin/run-tests.js new file mode 100755 index 00000000000..b955d757427 --- /dev/null +++ b/bin/run-tests.js @@ -0,0 +1,97 @@ +#!/usr/bin/env node + +var RSVP = require('rsvp'); +var spawn = require('child_process').spawn; +var chalk = require('chalk'); +var packages = require('../lib/packages'); +var runInSequence = require('../lib/run-in-sequence'); + +function shouldPrint(inputString) { + var skipStrings = [ + "*** WARNING: Method userSpaceScaleFactor", + "CoreText performance note:", + ]; + + for (var i = 0; i < skipStrings.length; i++) { + if (inputString.indexOf(skipStrings[i])) { + return false; + } + } + + return true; +} + +function run(queryString) { + return new RSVP.Promise(function(resolve, reject) { + var args = [ + 'bower_components/qunit-phantom-runner/runner.js', + './dist/tests/index.html?' + queryString + ]; + + console.log('Running: phantomjs ' + args.join(' ')); + + var child = spawn('phantomjs', args); + var result = {output: [], errors: [], code: null}; + + child.stdout.on('data', function (data) { + var string = data.toString(); + var lines = string.split('\n'); + + lines.forEach(function(line) { + if (line.indexOf('0 failed.') > -1) { + console.log(chalk.green(line)); + } else { + console.log(line); + } + }); + result.output.push(string); + }); + + child.stderr.on('data', function (data) { + var string = data.toString(); + + if (shouldPrint(string)) { + result.errors.push(string); + console.error(chalk.red(string)); + } + }); + + child.on('close', function (code) { + result.code = code; + + if (code === 0) { + resolve(result); + } else { + reject(result); + } + }); + }); +} + +var testFunctions = []; +var emberChannel = process.env.EMBER_CHANNEL || 'release'; +var runnningInCI = process.env.CI || false; + +testFunctions.push(function() { + return run('emberchannel=' + emberChannel); +}); + +if (runnningInCI) { + testFunctions.push(function() { + return run('dist=min&emberchannel=' + emberChannel); + }); + testFunctions.push(function() { + return run('dist=prod&emberchannel=' + emberChannel); + }); +} + +runInSequence(testFunctions) + .then(function() { + console.log(chalk.green('Passed!')); + process.exit(0); + }) + .catch(function(e) { + console.error(e); + console.error(chalk.red('Failed!')); + process.exit(1); + }); diff --git a/bower.json b/bower.json index 1dc4ca9ce93..051e08086cd 100644 --- a/bower.json +++ b/bower.json @@ -5,9 +5,12 @@ "ember": "~1.11.1" }, "devDependencies": { - "qunit": "~1.17.0", - "jquery": "~1.10.x", + "ember-dev": "https://github.com/emberjs/ember-dev.git#1c30a1666273ab2a9b134a42bad28c774f9ecdfc", + "ember-inflector": "https://github.com/stefanpenner/ember-inflector.git#v1.2.0", + "es5-shim": "~4.0.3", + "jquery": "~1.11.x", "loader.js": "~1.0.0", - "es5-shim": "~4.0.3" + "qunit": "~1.12.0", + "qunit-phantom-runner": "jonkemp/qunit-phantomjs-runner#1.2.0" } } diff --git a/config/package-manager-files/.gitignore b/config/package_manager_files/.gitignore similarity index 100% rename from config/package-manager-files/.gitignore rename to config/package_manager_files/.gitignore diff --git a/config/package-manager-files/README.md b/config/package_manager_files/README.md similarity index 100% rename from config/package-manager-files/README.md rename to config/package_manager_files/README.md diff --git a/config/package-manager-files/bower.json b/config/package_manager_files/bower.json similarity index 100% rename from config/package-manager-files/bower.json rename to config/package_manager_files/bower.json diff --git a/config/package-manager-files/component.json b/config/package_manager_files/component.json similarity index 100% rename from config/package-manager-files/component.json rename to config/package_manager_files/component.json diff --git a/config/package-manager-files/composer.json b/config/package_manager_files/composer.json similarity index 100% rename from config/package-manager-files/composer.json rename to config/package_manager_files/composer.json diff --git a/config/package-manager-files/package.json b/config/package_manager_files/package.json similarity index 100% rename from config/package-manager-files/package.json rename to config/package_manager_files/package.json diff --git a/config/testem-beta.json b/config/testem-beta.json deleted file mode 100644 index b0f802263f9..00000000000 --- a/config/testem-beta.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "test_page": "dist/index.html?emberchannel=beta&nojshint=true", - "serve_files": [ - "dist/**/*.js", - "tests/**/*" - ], - "launch_in_ci": [ - "PhantomJS" - ], - "routes": { - "/ember-data.js": "dist/ember-data.js", - "/tests/ember-data-tests.js": "dist/ember-data-tests.js" - } -} diff --git a/config/testem-canary.json b/config/testem-canary.json deleted file mode 100644 index 94d7ac430ad..00000000000 --- a/config/testem-canary.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "test_page": "dist/index.html?emberchannel=canary&nojshint=true", - "serve_files": [ - "dist/**/*.js", - "tests/**/*" - ], - "launch_in_ci": [ - "PhantomJS" - ], - "routes": { - "/ember-data.js": "dist/ember-data.js", - "/tests/ember-data-tests.js": "dist/ember-data-tests.js" - } -} diff --git a/config/testem-stable.json b/config/testem-stable.json deleted file mode 100644 index a1460127be0..00000000000 --- a/config/testem-stable.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "test_page": "dist/index.html?emberchannel=stable&nojshint=true", - "serve_files": [ - "dist/**/*.js", - "tests/**/*" - ], - "launch_in_ci": [ - "PhantomJS" - ], - "routes": { - "/ember-data.js": "dist/ember-data.js", - "/tests/ember-data-tests.js": "dist/ember-data-tests.js" - } -} diff --git a/features.json b/features.json new file mode 100644 index 00000000000..ddd3e1d149a --- /dev/null +++ b/features.json @@ -0,0 +1,4 @@ +{ + "features": {}, + "debugStatements": [] +} diff --git a/lib/packages.js b/lib/packages.js new file mode 100644 index 00000000000..6eabd45440d --- /dev/null +++ b/lib/packages.js @@ -0,0 +1,4 @@ +module.exports = { + 'ember-data': { trees: null, vendorRequirements: ['ember-inflector'] }, + 'activemodel-adapter': { trees: null, requirements: ['ember-data'] } +}; diff --git a/lib/run-in-sequence.js b/lib/run-in-sequence.js new file mode 100644 index 00000000000..b38dd68fe81 --- /dev/null +++ b/lib/run-in-sequence.js @@ -0,0 +1,13 @@ +var RSVP = require('rsvp'); + +module.exports = function runInSequence(tasks) { + var length = tasks.length; + var current = RSVP.Promise.resolve(); + var results = new Array(length); + + for (var i = 0; i < length; ++i) { + current = results[i] = current.then(tasks[i]); + } + + return RSVP.Promise.all(results); +}; diff --git a/package.json b/package.json index 8d11b2fd98c..071d35ea4b3 100644 --- a/package.json +++ b/package.json @@ -15,50 +15,27 @@ "lib/ember-addon" ], "scripts": { - "build": "ember build", - "build:production": "ember build --environment=production", - "prepublish": "bower install && npm run-script build:production", + "build": "ember build --environment production", + "postinstall": "bower install", + "pretest": "ember build --environment production", + "test": "bin/run-tests.js", + "publish": "./bin/publish_to_s3.js", "start": "ember serve", - "test": "jscs packages && testem -R dot ci", - "publish-build": "npm run build:production && ./bin/publish-to-s3.js", - "test:local": "testem -R dot ci", - "test:beta": "testem -f config/testem-beta.json -R dot ci", - "test:canary": "testem -f config/testem-canary.json -R dot ci", - "test:stable": "testem -f config/testem-stable.json -R dot ci" + "docs": "ember yuidocs" }, "devDependencies": { "aws-sdk": "~2.0.0-rc8", "bower": "~1.3", - "broccoli-compile-modules": "^1.1.0", - "broccoli-concat": "0.0.12", - "broccoli-defeatureify": "^0.3.0", - "broccoli-env": "0.0.1", - "broccoli-es3-safe-recast": "0.0.8", - "broccoli-es6-module-transpiler": "^0.5.0", - "broccoli-es6-transpiler": "^0.1.0", - "broccoli-file-creator": "^0.1.0", - "broccoli-file-mover": "~0.2.0", - "broccoli-jscs": "0.0.14", - "broccoli-jshint": "^0.5.1", - "broccoli-merge-trees": "^0.1.4", - "broccoli-render-template": "0.0.3", - "broccoli-replace": "~0.2.0", - "broccoli-static-compiler": "^0.2.1", - "broccoli-stew": "^0.2.1", - "broccoli-uglify-js": "^0.1.3", - "broccoli-wrap": "0.0.2", - "broccoli-yuidoc": "^1.3.0", + "broccoli-jscs": "0.0.12", + "chalk": "~0.4.0", "defeatureify": "~0.1.4", "ejs": "^1.0.0", - "ember-cli": "^0.1.15", - "ember-inflector": "^1.5.0", - "ember-publisher": "0.0.7", - "es6-module-transpiler": "^0.9.5", - "es6-module-transpiler-amd-formatter": "^0.2.4", - "es6-module-transpiler-package-resolver": "^1.0.1", + "ember-cli": "^0.2.0", + "ember-publisher": "0.0.6", + "emberjs-build": "0.0.43", "git-repo-version": "0.0.2", "jscs": "^1.12.0", - "testem": "^0.6.19", + "rsvp": "~3.0.6", "yuidocjs": "~0.3.46" } } diff --git a/packages/ember-data/lib/serializers/rest-serializer.js b/packages/ember-data/lib/serializers/rest-serializer.js index 13ed513141c..ed99293cd02 100644 --- a/packages/ember-data/lib/serializers/rest-serializer.js +++ b/packages/ember-data/lib/serializers/rest-serializer.js @@ -3,13 +3,12 @@ */ import JSONSerializer from "ember-data/serializers/json-serializer"; +import { singularize } from "ember-inflector"; var forEach = Ember.ArrayPolyfills.forEach; var map = Ember.ArrayPolyfills.map; var camelize = Ember.String.camelize; -import { singularize } from "ember-inflector/lib/system/string"; - function coerceId(id) { return id == null ? null : id + ''; } diff --git a/packages/ember-data/lib/system/relationship-meta.js b/packages/ember-data/lib/system/relationship-meta.js index 715a6f9fea0..747988d467c 100644 --- a/packages/ember-data/lib/system/relationship-meta.js +++ b/packages/ember-data/lib/system/relationship-meta.js @@ -1,4 +1,4 @@ -import { singularize } from "ember-inflector/lib/system"; +import { singularize } from "ember-inflector"; export function typeForRelationshipMeta(store, meta) { var typeKey, type; diff --git a/packages/ember-data/lib/system/store.js b/packages/ember-data/lib/system/store.js index 0422d07358b..e30eceb4570 100644 --- a/packages/ember-data/lib/system/store.js +++ b/packages/ember-data/lib/system/store.js @@ -9,7 +9,7 @@ import { InvalidError, Adapter } from "ember-data/system/adapter"; -import { singularize } from "ember-inflector/lib/system/string"; +import { singularize } from "ember-inflector"; import { Map } from "ember-data/system/map"; diff --git a/packages/ember-data/tests/unit/store/serializer-for-test.js b/packages/ember-data/tests/unit/store/serializer-for-test.js index 54d2bcda40f..c80d8822812 100644 --- a/packages/ember-data/tests/unit/store/serializer-for-test.js +++ b/packages/ember-data/tests/unit/store/serializer-for-test.js @@ -11,13 +11,12 @@ module("unit/store/serializer_for - DS.Store#serializerFor", { teardown: function() { run(function() { - container.destroy(); store.destroy(); }); } }); -test("Calling serializerFor looks up 'serializer:' from the container", function() { +test("Calling serializerFor looks up 'serializer:' from the registry", function() { var PersonSerializer = DS.JSONSerializer.extend(); registry.register('serializer:person', PersonSerializer); diff --git a/packages/loader/lib/main.js b/packages/loader/lib/main.js new file mode 100644 index 00000000000..a56e74a6e7a --- /dev/null +++ b/packages/loader/lib/main.js @@ -0,0 +1,81 @@ +var define, requireModule, require, requirejs, Ember; + +(function() { + Ember = this.Ember = this.Ember || {}; + if (typeof Ember === 'undefined') { Ember = {}; }; + function UNDEFINED() { } + + if (typeof Ember.__loader === 'undefined') { + var registry = {}; + var seen = {}; + + define = function(name, deps, callback) { + registry[name] = { deps: deps, callback: callback }; + }; + + requirejs = require = requireModule = function(name) { + var s = seen[name]; + + if (s !== undefined) { return seen[name]; } + if (s === UNDEFINED) { return undefined; } + + seen[name] = {}; + + if (!registry[name]) { + throw new Error('Could not find module ' + name); + } + + var mod = registry[name]; + var deps = mod.deps; + var callback = mod.callback; + var reified = []; + var exports; + var length = deps.length; + + for (var i=0; i Ember Data - - + + + - + @@ -20,49 +21,113 @@ if (jQueryVersion) { loadScript('https://code.jquery.com/jquery-'+jQueryVersion+'.js'); } - // Close the script tag to make sure document.write happens - - - + + - - + + + + + + - - + // Tests should time out after 5 seconds + QUnit.config.testTimeout = 5000; + // Hide passed tests by default + QUnit.config.hidepassed = true; + })(); + + +
- diff --git a/tests/qunit-configuration.js b/tests/qunit-configuration.js index f0cfa53a705..2fc9648ce36 100644 --- a/tests/qunit-configuration.js +++ b/tests/qunit-configuration.js @@ -157,104 +157,6 @@ return str + "\n" + len + ' error' + ((len === 1) ? '' : 's'); }; - var o_create = Object.create || (function(){ - function F(){} - - return function(o) { - if (arguments.length !== 1) { - throw new Error('Object.create implementation only accepts one parameter.'); - } - F.prototype = o; - return new F(); - }; - }()); - - // A light class for stubbing - // - function MethodCallExpectation(target, property){ - this.target = target; - this.property = property; - }; - - MethodCallExpectation.prototype = { - handleCall: function(){ - this.sawCall = true; - return this.originalMethod.apply(this.target, arguments); - }, - stubMethod: function(fn){ - var context = this; - this.originalMethod = this.target[this.property]; - this.target[this.property] = function(){ - return context.handleCall.apply(context, arguments); - }; - }, - restoreMethod: function(){ - this.target[this.property] = this.originalMethod; - }, - runWithStub: function(fn){ - try { - this.stubMethod(); - fn(); - } finally { - this.restoreMethod(); - } - }, - assert: function(fn) { - this.runWithStub(); - ok(this.sawCall, "Expected "+this.property+" to be called."); - } - }; - - function AssertExpectation(message){ - MethodCallExpectation.call(this, Ember, 'assert'); - this.expectedMessage = message; - }; - AssertExpectation.Error = function(){}; - AssertExpectation.prototype = o_create(MethodCallExpectation.prototype); - AssertExpectation.prototype.handleCall = function(message, test){ - this.sawCall = true; - if (test) return; // Only get message for failures - this.actualMessage = message; - // Halt execution - throw new AssertExpectation.Error(); - }; - AssertExpectation.prototype.assert = function(fn){ - try { - this.runWithStub(fn); - } catch (e) { - if (!(e instanceof AssertExpectation.Error)) - throw e; - } - - // Run assertions in an order that is useful when debugging a test failure. - // - if (!this.sawCall) { - ok(false, "Expected Ember.assert to be called (Not called with any value)."); - } else if (!this.actualMessage) { - ok(false, 'Expected a failing Ember.assert (Ember.assert called, but without a failing test).'); - } else { - if (this.expectedMessage) { - if (this.expectedMessage instanceof RegExp) { - ok(this.expectedMessage.test(this.actualMessage), "Expected failing Ember.assert: '" + this.expectedMessage + "', but got '" + this.actualMessage + "'."); - } else { - equal(this.actualMessage, this.expectedMessage, "Expected failing Ember.assert: '" + this.expectedMessage + "', but got '" + this.actualMessage + "'."); - } - } else { - // Positive assertion that assert was called - ok(true, 'Expected a failing Ember.assert.'); - } - } - }; - - // Looks for an exception raised within the fn. - // - // expectAssertion(function(){ - // Ember.assert("Homie don't roll like that"); - // } /* , optionalMessageStringOrRegex */); - // - window.expectAssertion = function expectAssertion(fn, message){ - (new AssertExpectation(message)).assert(fn); - }; EmberDev.deprecations = { NONE: 99, // 99 problems and a deprecation ain't one