Merge branch '3.99' into 4.0
This commit is contained in:
@@ -7,6 +7,10 @@ orbs:
|
||||
node: circleci/node@3.0.0
|
||||
|
||||
executors:
|
||||
node16:
|
||||
docker:
|
||||
- image: cimg/node:16.1.0-browsers
|
||||
working_directory: ~/workspace
|
||||
node14:
|
||||
docker:
|
||||
- image: circleci/node:14
|
||||
@@ -61,8 +65,10 @@ jobs:
|
||||
environment:
|
||||
JASMINE_LONG_PROPERTY_TESTS: y
|
||||
|
||||
test_browsers:
|
||||
test_browsers: &test_browsers
|
||||
executor: node14
|
||||
environment:
|
||||
SKIP_JASMINE_BROWSER_FLAKES: "true"
|
||||
steps:
|
||||
- attach_workspace:
|
||||
at: .
|
||||
@@ -91,14 +97,16 @@ jobs:
|
||||
scripts/stop-sauce-connect $(cat sauce-pidfile)
|
||||
exit $exitcode
|
||||
|
||||
test_browser_flakes:
|
||||
<<: *test_browsers
|
||||
environment:
|
||||
SKIP_JASMINE_BROWSER_FLAKES: "false"
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
cron:
|
||||
triggers:
|
||||
- schedule:
|
||||
# The choice of hour is somewhat load-bearing. test_browser currently
|
||||
# tends to fail if there are other Sauce tunnels open. So we only
|
||||
# run it at a time when that's unlikely.
|
||||
# Times are UTC.
|
||||
cron: "0 10 * * *"
|
||||
filters:
|
||||
@@ -108,6 +116,9 @@ workflows:
|
||||
- "3.99"
|
||||
- "4.0"
|
||||
jobs:
|
||||
- build:
|
||||
executor: node16
|
||||
name: build_node_16
|
||||
- build:
|
||||
executor: node14
|
||||
name: build_node_14
|
||||
@@ -117,6 +128,11 @@ workflows:
|
||||
- build:
|
||||
executor: node10
|
||||
name: build_node_10
|
||||
- test_node:
|
||||
executor: node16
|
||||
name: test_node_16
|
||||
requires:
|
||||
- build_node_16
|
||||
- test_node_with_long_property_tests:
|
||||
executor: node14
|
||||
requires:
|
||||
@@ -137,8 +153,12 @@ workflows:
|
||||
filters:
|
||||
branches:
|
||||
ignore: /pull\/.*/ # Don't run on pull requests.
|
||||
|
||||
push:
|
||||
jobs:
|
||||
- build:
|
||||
executor: node16
|
||||
name: build_node_16
|
||||
- build:
|
||||
executor: node14
|
||||
name: build_node_14
|
||||
@@ -148,6 +168,11 @@ workflows:
|
||||
- build:
|
||||
executor: node10
|
||||
name: build_node_10
|
||||
- test_node:
|
||||
executor: node16
|
||||
name: test_node_16
|
||||
requires:
|
||||
- build_node_16
|
||||
- test_node:
|
||||
executor: node14
|
||||
name: test_node_14
|
||||
@@ -169,3 +194,23 @@ workflows:
|
||||
filters:
|
||||
branches:
|
||||
ignore: /pull\/.*/ # Don't run on pull requests.
|
||||
|
||||
browser-flakes:
|
||||
triggers:
|
||||
- schedule:
|
||||
# Times are UTC.
|
||||
cron: "0 11 * * *"
|
||||
filters:
|
||||
branches:
|
||||
only:
|
||||
- main
|
||||
jobs:
|
||||
- build:
|
||||
executor: node14
|
||||
name: build_node_14
|
||||
- test_browser_flakes:
|
||||
requires:
|
||||
- build_node_14
|
||||
filters:
|
||||
branches:
|
||||
ignore: /pull\/.*/ # Don't run on pull requests.
|
||||
|
||||
@@ -20,12 +20,12 @@ Please read the [contributors' guide](https://github.com/jasmine/jasmine/blob/ma
|
||||
For the Jasmine NPM module:<br>
|
||||
[https://github.com/jasmine/jasmine-npm](https://github.com/jasmine/jasmine-npm).
|
||||
|
||||
For the Jasmine browser runner:<br>
|
||||
[https://github.com/jasmine/jasmine-browser](https://github.com/jasmine/jasmine-browser).
|
||||
|
||||
For the Jasmine Ruby Gem:<br>
|
||||
[https://github.com/jasmine/jasmine-gem](https://github.com/jasmine/jasmine-gem).
|
||||
|
||||
For the Jasmine Python Egg:<br>
|
||||
[https://github.com/jasmine/jasmine-py](https://github.com/jasmine/jasmine-py).
|
||||
|
||||
For the Jasmine headless browser gulp plugin:<br>
|
||||
[https://github.com/jasmine/gulp-jasmine-browser](https://github.com/jasmine/gulp-jasmine-browser).
|
||||
|
||||
@@ -54,7 +54,7 @@ Jasmine tests itself across many browsers (Safari, Chrome, Firefox, Microsoft Ed
|
||||
|
||||
| Environment | Supported versions |
|
||||
|-------------------|--------------------|
|
||||
| Node | 10, 12, 14 |
|
||||
| Node | 10, 12, 14, 16 |
|
||||
| Safari | 9-14 |
|
||||
| Chrome | Evergreen |
|
||||
| Firefox | Evergreen, 68, 78 |
|
||||
|
||||
@@ -59,6 +59,7 @@ Install [twine](https://github.com/pypa/twine)
|
||||
|
||||
### Release the core NPM module
|
||||
|
||||
1. Run the tests on Windows. (CI only tests on Linux.)
|
||||
1. `npm adduser` to save your credentials locally
|
||||
1. `npm publish .` to publish what's in `package.json`
|
||||
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
const sass = require('node-sass');
|
||||
const sass = require('sass');
|
||||
|
||||
module.exports = {
|
||||
options: {
|
||||
implementation: sass,
|
||||
outputStyle: 'compact',
|
||||
sourceComments: false
|
||||
},
|
||||
dist: {
|
||||
|
||||
@@ -1,4 +1,33 @@
|
||||
import pkg_resources
|
||||
import os
|
||||
|
||||
if 'SUPPRESS_JASMINE_DEPRECATION' not in os.environ:
|
||||
print('DEPRECATION WARNING:\n' +
|
||||
'\n' +
|
||||
'The Jasmine packages for Python are deprecated. There will be no further\n' +
|
||||
'releases after the end of the Jasmine 3.x series. We recommend migrating to the\n' +
|
||||
'following options:\n' +
|
||||
'\n' +
|
||||
'* jasmine-browser-runner (<https://github.com/jasmine/jasmine-browser>,\n' +
|
||||
' `npm install jasmine-browser-runner`) to run specs in browsers, including\n' +
|
||||
' headless Chrome and Saucelabs. This is the most direct replacement for the\n' +
|
||||
' jasmine server` and `jasmine ci` commands provided by the `jasmine` Python\n' +
|
||||
' package.\n' +
|
||||
'* The jasmine npm package (<https://github.com/jasmine/jasmine-npm>,\n' +
|
||||
' `npm install jasmine`) to run specs under Node.js.\n' +
|
||||
'* The standalone distribution from the latest Jasmine release\n' +
|
||||
' <https://github.com/jasmine/jasmine/releases> to run specs in browsers with\n' +
|
||||
' no additional tools.\n' +
|
||||
'* The jasmine-core npm package (`npm install jasmine-core`) if all you need is\n' +
|
||||
' the Jasmine assets. This is the direct equivalent of the jasmine-core Python\n' +
|
||||
' package.\n' +
|
||||
'\n' +
|
||||
'Except for the standalone distribution, all of the above are distributed through\n' +
|
||||
'npm.\n' +
|
||||
'\n' +
|
||||
'To prevent this message from appearing, set the SUPPRESS_JASMINE_DEPRECATION\n' +
|
||||
'environment variable.\n')
|
||||
|
||||
|
||||
try:
|
||||
from collections import OrderedDict
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -3525,7 +3525,29 @@ getJasmineRequireObj().Expectation = function(j$) {
|
||||
});
|
||||
|
||||
/**
|
||||
* Asynchronous matchers.
|
||||
* Asynchronous matchers that operate on an actual value which is a promise,
|
||||
* and return a promise.
|
||||
*
|
||||
* Note: Specs must await the result of each async matcher, return the
|
||||
* promise returned by the matcher, or return a promise that's derived from
|
||||
* the one returned by the matcher. Otherwise the matcher will not be
|
||||
* evaluated before the spec completes.
|
||||
*
|
||||
* @example
|
||||
* // Good
|
||||
* await expectAsync(aPromise).toBeResolved();
|
||||
* @example
|
||||
* // Good
|
||||
* return expectAsync(aPromise).toBeResolved();
|
||||
* @example
|
||||
* // Good
|
||||
* return expectAsync(aPromise).toBeResolved()
|
||||
* .then(function() {
|
||||
* // more spec code
|
||||
* });
|
||||
* @example
|
||||
* // Bad
|
||||
* expectAsync(aPromise).toBeResolved();
|
||||
* @namespace async-matchers
|
||||
*/
|
||||
function AsyncExpectation(options) {
|
||||
@@ -8018,6 +8040,7 @@ getJasmineRequireObj().Spy = function(j$) {
|
||||
* @property {object} object - `this` context for the invocation.
|
||||
* @property {number} invocationOrder - Order of the invocation.
|
||||
* @property {Array} args - The arguments passed for this invocation.
|
||||
* @property returnValue - The value that was returned from this invocation.
|
||||
*/
|
||||
var callData = {
|
||||
object: context,
|
||||
|
||||
@@ -26,11 +26,9 @@
|
||||
"homepage": "https://jasmine.github.io",
|
||||
"main": "./lib/jasmine-core.js",
|
||||
"devDependencies": {
|
||||
"acorn": "^6.0.0",
|
||||
"ejs": "^2.5.5",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-plugin-compat": "^3.8.0",
|
||||
"express": "^4.16.4",
|
||||
"fast-check": "^1.21.0",
|
||||
"fast-glob": "^2.2.6",
|
||||
"grunt": "^1.0.4",
|
||||
@@ -43,9 +41,8 @@
|
||||
"jasmine-browser-runner": "github:jasmine/jasmine-browser#main",
|
||||
"jsdom": "^15.0.0",
|
||||
"load-grunt-tasks": "^4.0.0",
|
||||
"node-sass": "^4.11.0",
|
||||
"prettier": "1.17.1",
|
||||
"selenium-webdriver": "^3.6.0",
|
||||
"sass": "^1.32.12",
|
||||
"shelljs": "^0.8.3",
|
||||
"temp": "^0.9.0"
|
||||
},
|
||||
|
||||
@@ -24,16 +24,14 @@ run_browser() {
|
||||
passfile=`mktemp -t jasmine-results.XXXXXX` || exit 1
|
||||
failfile=`mktemp -t jasmine-results.XXXXXX` || exit 1
|
||||
run_browser "internet explorer" 11
|
||||
run_browser chrome latest
|
||||
run_browser firefox latest
|
||||
run_browser firefox 78
|
||||
run_browser firefox 68
|
||||
run_browser safari 14
|
||||
run_browser safari 13
|
||||
run_browser safari 12
|
||||
run_browser safari 11
|
||||
run_browser safari 10
|
||||
run_browser safari 9
|
||||
run_browser MicrosoftEdge latest
|
||||
run_browser firefox 68
|
||||
run_browser safari 14
|
||||
run_browser safari 13
|
||||
run_browser safari 9
|
||||
run_browser MicrosoftEdge latest
|
||||
|
||||
echo
|
||||
cat "$passfile" "$failfile"
|
||||
|
||||
32
setup.py
32
setup.py
@@ -4,15 +4,41 @@ import json
|
||||
with open('package.json') as packageFile:
|
||||
version = json.load(packageFile)['version']
|
||||
|
||||
short_description=('Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on '+
|
||||
'browsers, DOM, or any JavaScript framework. Thus it\'s suited for websites, '+
|
||||
'Node.js (http://nodejs.org) projects, or anywhere that JavaScript can run.')
|
||||
deprecation=('The Jasmine packages for Python are deprecated. There will be no further\n' +
|
||||
'releases after the end of the Jasmine 3.x series. We recommend migrating to the\n' +
|
||||
'following options:\n' +
|
||||
'\n' +
|
||||
'* jasmine-browser-runner (<https://github.com/jasmine/jasmine-browser>,\n' +
|
||||
' `npm install jasmine-browser-runner`) to run specs in browsers, including\n' +
|
||||
' headless Chrome and Saucelabs. This is the most direct replacement for the\n' +
|
||||
' jasmine server` and `jasmine ci` commands provided by the `jasmine` Python\n' +
|
||||
' package.\n' +
|
||||
'* The jasmine npm package (<https://github.com/jasmine/jasmine-npm>,\n' +
|
||||
' `npm install jasmine`) to run specs under Node.js.\n' +
|
||||
'* The standalone distribution from the latest Jasmine release\n' +
|
||||
' <https://github.com/jasmine/jasmine/releases> to run specs in browsers with\n' +
|
||||
' no additional tools.\n' +
|
||||
'* The jasmine-core npm package (`npm install jasmine-core`) if all you need is\n' +
|
||||
' the Jasmine assets. This is the direct equivalent of the jasmine-core Python\n' +
|
||||
' package.\n' +
|
||||
'\n' +
|
||||
'Except for the standalone distribution, all of the above are distributed through\n'
|
||||
'npm.\n')
|
||||
long_description = short_description + '\n\n' + deprecation
|
||||
|
||||
|
||||
setup(
|
||||
name="jasmine-core",
|
||||
version=version,
|
||||
url="http://jasmine.github.io",
|
||||
author="Pivotal Labs",
|
||||
author_email="jasmine-js@googlegroups.com",
|
||||
description=('Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on '+
|
||||
'browsers, DOM, or any JavaScript framework. Thus it\'s suited for websites, '+
|
||||
'Node.js (http://nodejs.org) projects, or anywhere that JavaScript can run.'),
|
||||
description=short_description,
|
||||
long_description=long_description,
|
||||
long_description_content_type='text/plain',
|
||||
license='MIT',
|
||||
classifiers=[
|
||||
'Development Status :: 5 - Production/Stable',
|
||||
|
||||
@@ -459,6 +459,10 @@ describe('Env integration', function() {
|
||||
});
|
||||
|
||||
it('copes with async failures after done has been called', function(done) {
|
||||
if (jasmine.getEnv().skipBrowserFlake) {
|
||||
jasmine.getEnv().skipBrowserFlake();
|
||||
}
|
||||
|
||||
var global = {
|
||||
setTimeout: function(fn, delay) {
|
||||
setTimeout(fn, delay);
|
||||
@@ -656,8 +660,8 @@ describe('Env integration', function() {
|
||||
});
|
||||
|
||||
env.execute(null, function() {
|
||||
// Expect >= 9 rather than >= 10 to compensate for clock imprecision
|
||||
expect(duration).toBeGreaterThanOrEqual(9);
|
||||
// Expect > 0 to compensate for clock imprecision
|
||||
expect(duration).toBeGreaterThan(0);
|
||||
done();
|
||||
});
|
||||
});
|
||||
@@ -1007,6 +1011,10 @@ describe('Env integration', function() {
|
||||
});
|
||||
|
||||
it('Mock clock can be installed and used in tests', function(done) {
|
||||
if (jasmine.getEnv().skipBrowserFlake) {
|
||||
jasmine.getEnv().skipBrowserFlake();
|
||||
}
|
||||
|
||||
var globalSetTimeout = jasmine
|
||||
.createSpy('globalSetTimeout')
|
||||
.and.callFake(function(cb, t) {
|
||||
@@ -1147,6 +1155,10 @@ describe('Env integration', function() {
|
||||
});
|
||||
|
||||
it('should not use the mock clock for asynchronous timeouts', function(done) {
|
||||
if (jasmine.getEnv().skipBrowserFlake) {
|
||||
jasmine.getEnv().skipBrowserFlake();
|
||||
}
|
||||
|
||||
createMockedEnv();
|
||||
var reporter = jasmine.createSpyObj('fakeReporter', ['specDone']),
|
||||
clock = env.clock;
|
||||
@@ -1185,6 +1197,10 @@ describe('Env integration', function() {
|
||||
});
|
||||
|
||||
it('should wait a custom interval before reporting async functions that fail to complete', function(done) {
|
||||
if (jasmine.getEnv().skipBrowserFlake) {
|
||||
jasmine.getEnv().skipBrowserFlake();
|
||||
}
|
||||
|
||||
createMockedEnv();
|
||||
var reporter = jasmine.createSpyObj('fakeReport', [
|
||||
'jasmineDone',
|
||||
@@ -2823,6 +2839,10 @@ describe('Env integration', function() {
|
||||
});
|
||||
|
||||
it('provides custom equality testers to async matchers', function(done) {
|
||||
if (jasmine.getEnv().skipBrowserFlake) {
|
||||
jasmine.getEnv().skipBrowserFlake();
|
||||
}
|
||||
|
||||
jasmine.getEnv().requirePromises();
|
||||
|
||||
var specDone = jasmine.createSpy('specDone');
|
||||
|
||||
7
spec/helpers/disableBrowserFlakes.js
Normal file
7
spec/helpers/disableBrowserFlakes.js
Normal file
@@ -0,0 +1,7 @@
|
||||
(function(env) {
|
||||
env.skipBrowserFlake = function() {
|
||||
pending(
|
||||
'Skipping specs that are known to be flaky in browsers in this run'
|
||||
);
|
||||
};
|
||||
})(jasmine.getEnv());
|
||||
@@ -47,3 +47,7 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (process.env.SKIP_JASMINE_BROWSER_FLAKES === 'true') {
|
||||
module.exports.helpers.push('helpers/disableBrowserFlakes.js');
|
||||
}
|
||||
|
||||
@@ -43,7 +43,29 @@ getJasmineRequireObj().Expectation = function(j$) {
|
||||
});
|
||||
|
||||
/**
|
||||
* Asynchronous matchers.
|
||||
* Asynchronous matchers that operate on an actual value which is a promise,
|
||||
* and return a promise.
|
||||
*
|
||||
* Note: Specs must await the result of each async matcher, return the
|
||||
* promise returned by the matcher, or return a promise that's derived from
|
||||
* the one returned by the matcher. Otherwise the matcher will not be
|
||||
* evaluated before the spec completes.
|
||||
*
|
||||
* @example
|
||||
* // Good
|
||||
* await expectAsync(aPromise).toBeResolved();
|
||||
* @example
|
||||
* // Good
|
||||
* return expectAsync(aPromise).toBeResolved();
|
||||
* @example
|
||||
* // Good
|
||||
* return expectAsync(aPromise).toBeResolved()
|
||||
* .then(function() {
|
||||
* // more spec code
|
||||
* });
|
||||
* @example
|
||||
* // Bad
|
||||
* expectAsync(aPromise).toBeResolved();
|
||||
* @namespace async-matchers
|
||||
*/
|
||||
function AsyncExpectation(options) {
|
||||
|
||||
@@ -44,6 +44,7 @@ getJasmineRequireObj().Spy = function(j$) {
|
||||
* @property {object} object - `this` context for the invocation.
|
||||
* @property {number} invocationOrder - Order of the invocation.
|
||||
* @property {Array} args - The arguments passed for this invocation.
|
||||
* @property returnValue - The value that was returned from this invocation.
|
||||
*/
|
||||
var callData = {
|
||||
object: context,
|
||||
|
||||
Reference in New Issue
Block a user