Merge branch 'jasmine:main' into main
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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';
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
22
release_notes/3.99.1.md
Normal 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
21
release_notes/4.0.1.md
Normal 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)_
|
||||||
@@ -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');
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user