Merge branch 'jasmine:main' into main

This commit is contained in:
Nito Buendia
2022-03-16 20:09:19 +08:00
committed by GitHub
10 changed files with 163 additions and 14 deletions

View File

@@ -3,25 +3,22 @@
version: 2.1 version: 2.1
orbs:
node: circleci/node@3.0.0
executors: executors:
node16: node16:
docker: docker:
- image: cimg/node:16.1.0-browsers - image: cimg/node:16.14.0 # Latest 16.x
working_directory: ~/workspace working_directory: ~/workspace
node14: node14:
docker: docker:
- image: circleci/node:14 - image: cimg/node:14.17.4 # Latest 14.x
working_directory: ~/workspace working_directory: ~/workspace
node12_latest: node12_latest:
docker: docker:
- image: circleci/node:12 - image: cimg/node:12.22.10 # Latest 12.x
working_directory: ~/workspace working_directory: ~/workspace
node12_17: node12_17:
docker: docker:
- image: circleci/node:12.17 - image: cimg/node:12.17.0 # Oldest version supported by Jasmine
working_directory: ~/workspace working_directory: ~/workspace
jobs: jobs:

View File

@@ -36,7 +36,7 @@ When ready to release - specs are all green and the stories are done:
### Commit and push core changes ### Commit and push core changes
1. Run the browser tests using `scripts/run-all-browsers`. 1. Run the browser tests using `scripts/run-all-browsers`.
1. Commit release notes and version changes (jasmine.js, version.rb, package.json) 1. Commit release notes and version changes (jasmine.js, package.json)
1. Push 1. Push
1. Wait for Circle CI to go green 1. Wait for Circle CI to go green

View File

@@ -7492,7 +7492,7 @@ getJasmineRequireObj().makePrettyPrinter = function(j$) {
this.emitScalar('<global>'); this.emitScalar('<global>');
} else if (value.jasmineToString) { } else if (value.jasmineToString) {
this.emitScalar(value.jasmineToString(this.pp_)); this.emitScalar(value.jasmineToString(this.pp_));
} else if (typeof value === 'string') { } else if (j$.isString_(value)) {
this.emitString(value); this.emitString(value);
} else if (j$.isSpy(value)) { } else if (j$.isSpy(value)) {
this.emitScalar('spy on ' + value.and.identity); this.emitScalar('spy on ' + value.and.identity);
@@ -8035,7 +8035,10 @@ getJasmineRequireObj().QueueRunner = function(j$) {
maybeThenable = queueableFn.fn.call(self.userContext); maybeThenable = queueableFn.fn.call(self.userContext);
if (maybeThenable && j$.isFunction_(maybeThenable.then)) { if (maybeThenable && j$.isFunction_(maybeThenable.then)) {
maybeThenable.then(next, onPromiseRejection); maybeThenable.then(
wrapInPromiseResolutionHandler(next),
onPromiseRejection
);
completedSynchronously = false; completedSynchronously = false;
return { completedSynchronously: false }; return { completedSynchronously: false };
} }
@@ -8134,6 +8137,16 @@ getJasmineRequireObj().QueueRunner = function(j$) {
} }
}; };
function wrapInPromiseResolutionHandler(fn) {
return function(maybeArg) {
if (j$.isError_(maybeArg)) {
fn(maybeArg);
} else {
fn();
}
};
}
return QueueRunner; return QueueRunner;
}; };
@@ -10190,5 +10203,5 @@ getJasmineRequireObj().UserContext = function(j$) {
}; };
getJasmineRequireObj().version = function() { getJasmineRequireObj().version = function() {
return '4.0.0'; return '4.0.1';
}; };

View File

@@ -1,7 +1,7 @@
{ {
"name": "jasmine-core", "name": "jasmine-core",
"license": "MIT", "license": "MIT",
"version": "4.0.0", "version": "4.0.1",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/jasmine/jasmine.git" "url": "https://github.com/jasmine/jasmine.git"

22
release_notes/3.99.1.md Normal file
View File

@@ -0,0 +1,22 @@
# Jasmine Core 3.99.1 Release Notes
This release fixes a bug in 3.99.0, which incorrectly reported a deprecation
warning when a promise returned from a function passed to `it`, `beforeEach`,
etc was resolved to a value.
## Supported environments
jasmine-core 3.99.1 has been tested in the following environments.
| Environment | Supported versions |
|-------------------|--------------------|
| Node | 10, 12, 14, 16 |
| Safari | 10-14 |
| Chrome | 98 |
| Firefox | 97, 78, 68 |
| Edge | 98 |
| Internet Explorer | 10, 11 |
------
_Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_

21
release_notes/4.0.1.md Normal file
View File

@@ -0,0 +1,21 @@
# Jasmine Core 4.0.1 Release Notes
This release fixes a bug in 4.0.0, which incorrectly reported a failure
when a promise returned from a function passed to `it`, `beforeEach`,
etc was resolved to a value.
## Supported environments
jasmine-core 4.0.1 has been tested in the following environments.
| Environment | Supported versions |
|-------------------|--------------------|
| Node | 12.17+, 14, 16 |
| Safari | 14-15 |
| Chrome | 98 |
| Firefox | 91, 97 |
| Edge | 98 |
------
_Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_

View File

@@ -5,6 +5,14 @@ describe('PrettyPrinter', function() {
expect(pp("som' string")).toEqual("'som' string'"); expect(pp("som' string")).toEqual("'som' string'");
}); });
it('stringifies empty string primitives and objects recognizably', function() {
const pp = jasmineUnderTest.makePrettyPrinter();
expect(pp(new String(''))).toEqual(pp(''));
expect(pp(new String(''))).toEqual("''");
expect(pp([new String('')])).toEqual(pp(['']));
expect(pp([new String('')])).toEqual("[ '' ]");
});
it('should stringify primitives properly', function() { it('should stringify primitives properly', function() {
var pp = jasmineUnderTest.makePrettyPrinter(); var pp = jasmineUnderTest.makePrettyPrinter();
expect(pp(true)).toEqual('true'); expect(pp(true)).toEqual('true');

View File

@@ -156,6 +156,81 @@ describe('QueueRunner', function() {
expect(failFn).toHaveBeenCalledWith(err); expect(failFn).toHaveBeenCalledWith(err);
expect(queueableFn2.fn).toHaveBeenCalled(); expect(queueableFn2.fn).toHaveBeenCalled();
}); });
describe('as a result of a promise', function() {
describe('and the argument is an Error', function() {
// Since promise support was added, Jasmine has failed specs that
// return a promise that resolves to an error. That's probably not
// the desired behavior but it's also not something we should change
// except on a major release and with a deprecation warning in
// advance.
it('explicitly fails and moves to the next function', function(done) {
var err = new Error('foo'),
queueableFn1 = {
fn: function() {
return Promise.resolve(err);
}
},
queueableFn2 = { fn: jasmine.createSpy('fn2') },
failFn = jasmine.createSpy('fail'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1, queueableFn2],
fail: failFn,
onComplete: function() {
expect(failFn).toHaveBeenCalledWith(err);
expect(queueableFn2.fn).toHaveBeenCalled();
done();
}
});
queueRunner.execute();
});
it('does not log a deprecation', function(done) {
var err = new Error('foo'),
queueableFn1 = {
fn: function() {
return Promise.resolve(err);
}
},
deprecated = jasmine.createSpy('deprecated'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1],
deprecated: deprecated,
onComplete: function() {
expect(deprecated).not.toHaveBeenCalled();
done();
}
});
queueRunner.execute();
});
});
describe('and the argument is not an Error', function() {
it('does not log a deprecation or report a failure', function(done) {
var queueableFn1 = {
fn: function() {
return Promise.resolve('not an error');
}
},
failFn = jasmine.createSpy('fail'),
deprecated = jasmine.createSpy('deprecated'),
queueRunner = new jasmineUnderTest.QueueRunner({
queueableFns: [queueableFn1],
deprecated: deprecated,
fail: failFn,
onComplete: function() {
expect(deprecated).not.toHaveBeenCalled();
expect(failFn).not.toHaveBeenCalled();
done();
}
});
queueRunner.execute();
});
});
});
}); });
it('does not cause an explicit fail if execution is being stopped', function() { it('does not cause an explicit fail if execution is being stopped', function() {

View File

@@ -40,7 +40,7 @@ getJasmineRequireObj().makePrettyPrinter = function(j$) {
this.emitScalar('<global>'); this.emitScalar('<global>');
} else if (value.jasmineToString) { } else if (value.jasmineToString) {
this.emitScalar(value.jasmineToString(this.pp_)); this.emitScalar(value.jasmineToString(this.pp_));
} else if (typeof value === 'string') { } else if (j$.isString_(value)) {
this.emitString(value); this.emitString(value);
} else if (j$.isSpy(value)) { } else if (j$.isSpy(value)) {
this.emitScalar('spy on ' + value.and.identity); this.emitScalar('spy on ' + value.and.identity);

View File

@@ -177,7 +177,10 @@ getJasmineRequireObj().QueueRunner = function(j$) {
maybeThenable = queueableFn.fn.call(self.userContext); maybeThenable = queueableFn.fn.call(self.userContext);
if (maybeThenable && j$.isFunction_(maybeThenable.then)) { if (maybeThenable && j$.isFunction_(maybeThenable.then)) {
maybeThenable.then(next, onPromiseRejection); maybeThenable.then(
wrapInPromiseResolutionHandler(next),
onPromiseRejection
);
completedSynchronously = false; completedSynchronously = false;
return { completedSynchronously: false }; return { completedSynchronously: false };
} }
@@ -276,5 +279,15 @@ getJasmineRequireObj().QueueRunner = function(j$) {
} }
}; };
function wrapInPromiseResolutionHandler(fn) {
return function(maybeArg) {
if (j$.isError_(maybeArg)) {
fn(maybeArg);
} else {
fn();
}
};
}
return QueueRunner; return QueueRunner;
}; };