relay-test-utils-internal 14.1.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Matchers.js.flow +1 -0
- package/consoleError.js.flow +1 -1
- package/consoleErrorsAndWarnings.js.flow +1 -1
- package/consoleWarning.js.flow +1 -1
- package/describeWithFeatureFlags.js.flow +2 -1
- package/generateTestsFromFixtures.js.flow +1 -0
- package/getOutputForFixture.js.flow +1 -0
- package/index.js +1 -1
- package/index.js.flow +1 -0
- package/lib/Matchers.js +7 -17
- package/lib/consoleError.js +8 -12
- package/lib/consoleErrorsAndWarnings.js +3 -21
- package/lib/consoleWarning.js +8 -12
- package/lib/describeWithFeatureFlags.js +5 -8
- package/lib/generateTestsFromFixtures.js +4 -11
- package/lib/getOutputForFixture.js +2 -4
- package/lib/index.js +21 -29
- package/lib/printAST.js +10 -26
- package/lib/simpleClone.js +5 -6
- package/lib/testschema.graphql +1 -1
- package/lib/trackRetentionForEnvironment.js +6 -10
- package/lib/warnings.js +8 -13
- package/package.json +2 -2
- package/printAST.js.flow +1 -0
- package/relay-test-utils-internal.js +1 -1
- package/relay-test-utils-internal.min.js +1 -1
- package/simpleClone.js.flow +1 -0
- package/trackRetentionForEnvironment.js.flow +4 -2
- package/warnings.js.flow +1 -1
package/Matchers.js.flow
CHANGED
package/consoleError.js.flow
CHANGED
package/consoleWarning.js.flow
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
*
|
7
7
|
* @flow
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
10
11
|
|
11
12
|
/**
|
@@ -46,7 +47,7 @@ declare var describe: {
|
|
46
47
|
};
|
47
48
|
|
48
49
|
function describeWithFeatureFlags(
|
49
|
-
flagSets: Array
|
50
|
+
flagSets: Array<Partial<FeatureFlags>>,
|
50
51
|
description: string,
|
51
52
|
body: () => void,
|
52
53
|
): void {
|
package/index.js
CHANGED
package/index.js.flow
CHANGED
package/lib/Matchers.js
CHANGED
@@ -5,14 +5,15 @@
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
7
|
* @format
|
8
|
+
* @oncall relay
|
8
9
|
*/
|
10
|
+
|
9
11
|
'use strict';
|
10
|
-
/* global expect */
|
11
12
|
|
13
|
+
/* global expect */
|
12
14
|
function toBeDeeplyFrozen(actual) {
|
13
15
|
function check(value) {
|
14
16
|
expect(Object.isFrozen(value)).toBe(true);
|
15
|
-
|
16
17
|
if (Array.isArray(value)) {
|
17
18
|
value.forEach(function (item) {
|
18
19
|
return check(item);
|
@@ -23,28 +24,22 @@ function toBeDeeplyFrozen(actual) {
|
|
23
24
|
}
|
24
25
|
}
|
25
26
|
}
|
26
|
-
|
27
27
|
check(actual);
|
28
28
|
return {
|
29
29
|
pass: true
|
30
30
|
};
|
31
31
|
}
|
32
|
-
|
33
32
|
function toWarn(actual, expected) {
|
34
33
|
var negative = this.isNot;
|
35
|
-
|
36
34
|
function formatItem(item) {
|
37
35
|
return item instanceof RegExp ? item.toString() : JSON.stringify(item);
|
38
36
|
}
|
39
|
-
|
40
37
|
function formatArray(array) {
|
41
38
|
return '[' + array.map(formatItem).join(', ') + ']';
|
42
39
|
}
|
43
|
-
|
44
40
|
function formatExpected(args) {
|
45
41
|
return formatArray([false].concat(args));
|
46
42
|
}
|
47
|
-
|
48
43
|
function formatActual(calls) {
|
49
44
|
if (calls.length) {
|
50
45
|
return calls.map(function (args) {
|
@@ -54,17 +49,15 @@ function toWarn(actual, expected) {
|
|
54
49
|
return '[]';
|
55
50
|
}
|
56
51
|
}
|
57
|
-
|
58
52
|
var warning = require("fbjs/lib/warning");
|
59
|
-
|
60
53
|
if (!warning.mock) {
|
61
54
|
throw new Error("toWarn(): Requires `jest.mock('warning')`.");
|
62
55
|
}
|
63
|
-
|
64
56
|
var callsCount = warning.mock.calls.length;
|
65
57
|
actual();
|
66
|
-
var calls = warning.mock.calls.slice(callsCount);
|
58
|
+
var calls = warning.mock.calls.slice(callsCount);
|
67
59
|
|
60
|
+
// Simple case: no explicit expectation.
|
68
61
|
if (!expected) {
|
69
62
|
var warned = calls.filter(function (args) {
|
70
63
|
return !args[0];
|
@@ -75,19 +68,17 @@ function toWarn(actual, expected) {
|
|
75
68
|
return "Expected ".concat(negative ? 'not ' : '', "to warn but ") + '`warning` received the following calls: ' + "".concat(formatActual(calls), ".");
|
76
69
|
}
|
77
70
|
};
|
78
|
-
}
|
79
|
-
|
71
|
+
}
|
80
72
|
|
73
|
+
// Custom case: explicit expectation.
|
81
74
|
if (!Array.isArray(expected)) {
|
82
75
|
expected = [expected];
|
83
76
|
}
|
84
|
-
|
85
77
|
var call = calls.find(function (args) {
|
86
78
|
return args.length === expected.length + 1 && args.every(function (arg, index) {
|
87
79
|
if (!index) {
|
88
80
|
return !arg;
|
89
81
|
}
|
90
|
-
|
91
82
|
var other = expected[index - 1];
|
92
83
|
return other instanceof RegExp ? other.test(arg) : arg === other;
|
93
84
|
});
|
@@ -99,7 +90,6 @@ function toWarn(actual, expected) {
|
|
99
90
|
}
|
100
91
|
};
|
101
92
|
}
|
102
|
-
|
103
93
|
module.exports = {
|
104
94
|
toBeDeeplyFrozen: toBeDeeplyFrozen,
|
105
95
|
toWarn: toWarn
|
package/lib/consoleError.js
CHANGED
@@ -4,19 +4,20 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @emails oncall+relay
|
8
7
|
*
|
9
8
|
* @format
|
9
|
+
* @oncall relay
|
10
10
|
*/
|
11
|
+
|
11
12
|
'use strict';
|
12
|
-
/* global jest */
|
13
13
|
|
14
|
+
/* global jest */
|
14
15
|
var _require = require('./consoleErrorsAndWarnings'),
|
15
|
-
|
16
|
-
|
16
|
+
createConsoleInterceptionSystem = _require.createConsoleInterceptionSystem;
|
17
17
|
var consoleErrorsSystem = createConsoleInterceptionSystem('error', 'expectConsoleError', function (impl) {
|
18
18
|
jest.spyOn(console, 'error').mockImplementation(impl);
|
19
19
|
});
|
20
|
+
|
20
21
|
/**
|
21
22
|
* Mocks console.error so that errors printed to the console are instead thrown.
|
22
23
|
* Any expected errors need to be explicitly expected with `expectConsoleErrorWillFire(message)`.
|
@@ -24,37 +25,32 @@ var consoleErrorsSystem = createConsoleInterceptionSystem('error', 'expectConsol
|
|
24
25
|
* NOTE: This should be called on top of a test file. The test should NOT
|
25
26
|
* use `jest.resetModules()` or manually mock `console`.
|
26
27
|
*/
|
27
|
-
|
28
28
|
function disallowConsoleErrors() {
|
29
29
|
consoleErrorsSystem.disallowMessages();
|
30
30
|
}
|
31
|
+
|
31
32
|
/**
|
32
33
|
* Expect an error with the given message. If the message isn't fired in the
|
33
34
|
* current test, the test will fail.
|
34
35
|
*/
|
35
|
-
|
36
|
-
|
37
36
|
function expectConsoleErrorWillFire(message, options) {
|
38
37
|
consoleErrorsSystem.expectMessageWillFire(message, options);
|
39
38
|
}
|
39
|
+
|
40
40
|
/**
|
41
41
|
* Expect the callback `fn` to print an error with the message, and otherwise fail.
|
42
42
|
*/
|
43
|
-
|
44
|
-
|
45
43
|
function expectConsoleError(message, fn) {
|
46
44
|
return consoleErrorsSystem.expectMessage(message, fn);
|
47
45
|
}
|
46
|
+
|
48
47
|
/**
|
49
48
|
* Expect the callback `fn` to trigger all console errors (in sequence),
|
50
49
|
* and otherwise fail.
|
51
50
|
*/
|
52
|
-
|
53
|
-
|
54
51
|
function expectConsoleErrorsMany(messages, fn) {
|
55
52
|
return consoleErrorsSystem.expectMessageMany(messages, fn);
|
56
53
|
}
|
57
|
-
|
58
54
|
module.exports = {
|
59
55
|
disallowConsoleErrors: disallowConsoleErrors,
|
60
56
|
expectConsoleErrorWillFire: expectConsoleErrorWillFire,
|
@@ -4,19 +4,17 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @emails oncall+relay
|
8
7
|
*
|
9
8
|
* @format
|
9
|
+
* @oncall relay
|
10
10
|
*/
|
11
|
+
|
11
12
|
'use strict';
|
12
|
-
/* global afterEach */
|
13
13
|
|
14
|
+
/* global afterEach */
|
14
15
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
15
|
-
|
16
16
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
17
|
-
|
18
17
|
var originalConsoleError = console.error;
|
19
|
-
|
20
18
|
function createConsoleInterceptionSystem(typename, expectFunctionName, setUpMock) {
|
21
19
|
var installed = false;
|
22
20
|
var expectedMessages = [];
|
@@ -25,7 +23,6 @@ function createConsoleInterceptionSystem(typename, expectFunctionName, setUpMock
|
|
25
23
|
var typenameCap = typename.charAt(0).toUpperCase() + typename.slice(1);
|
26
24
|
var typenameCapPlural = typenameCap + 's';
|
27
25
|
var installerName = "disallow".concat(typenameCap, "s");
|
28
|
-
|
29
26
|
function handleMessage(message) {
|
30
27
|
var index = expectedMessages.findIndex(function (expected) {
|
31
28
|
return message.startsWith(expected);
|
@@ -33,7 +30,6 @@ function createConsoleInterceptionSystem(typename, expectFunctionName, setUpMock
|
|
33
30
|
var optionalIndex = optionalMessages.findIndex(function (expected) {
|
34
31
|
return message.startsWith(expected);
|
35
32
|
});
|
36
|
-
|
37
33
|
if (contextualExpectedMessage.length > 0 && message.startsWith(contextualExpectedMessage[0])) {
|
38
34
|
contextualExpectedMessage.shift();
|
39
35
|
} else if (index >= 0) {
|
@@ -46,18 +42,15 @@ function createConsoleInterceptionSystem(typename, expectFunctionName, setUpMock
|
|
46
42
|
throw new Error("".concat(typenameCap, ": ") + message);
|
47
43
|
}
|
48
44
|
}
|
49
|
-
|
50
45
|
function disallowMessages() {
|
51
46
|
if (installed) {
|
52
47
|
throw new Error("".concat(installerName, " should be called only once."));
|
53
48
|
}
|
54
|
-
|
55
49
|
installed = true;
|
56
50
|
setUpMock(handleMessage);
|
57
51
|
afterEach(function () {
|
58
52
|
optionalMessages.length = 0;
|
59
53
|
contextualExpectedMessage.length = 0;
|
60
|
-
|
61
54
|
if (expectedMessages.length > 0) {
|
62
55
|
var error = new Error("Some ".concat(expectedMessages.length, " expected ").concat(typename, "s where not triggered:\n\n") + Array.from(expectedMessages, function (message) {
|
63
56
|
return " * ".concat(message);
|
@@ -67,42 +60,32 @@ function createConsoleInterceptionSystem(typename, expectFunctionName, setUpMock
|
|
67
60
|
}
|
68
61
|
});
|
69
62
|
}
|
70
|
-
|
71
63
|
function expectMessageWillFire(message, options) {
|
72
64
|
if (!installed) {
|
73
65
|
throw new Error("".concat(installerName, " needs to be called before expect").concat(typenameCapPlural, "WillFire"));
|
74
66
|
}
|
75
|
-
|
76
67
|
var optional = (options === null || options === void 0 ? void 0 : options.optional) === true; // avoid "sketchy null check"
|
77
|
-
|
78
68
|
for (var i = 0; i < ((_options$count = options === null || options === void 0 ? void 0 : options.count) !== null && _options$count !== void 0 ? _options$count : 1); i++) {
|
79
69
|
var _options$count;
|
80
|
-
|
81
70
|
(optional ? optionalMessages : expectedMessages).push(message);
|
82
71
|
}
|
83
72
|
}
|
84
|
-
|
85
73
|
function expectMessage(message, fn) {
|
86
74
|
return expectMessageMany([message], fn);
|
87
75
|
}
|
88
|
-
|
89
76
|
function expectMessageMany(messages, fn) {
|
90
77
|
if (contextualExpectedMessage.length > 0) {
|
91
78
|
throw new Error("Cannot nest ".concat(expectFunctionName, "() calls."));
|
92
79
|
}
|
93
|
-
|
94
80
|
contextualExpectedMessage.push.apply(contextualExpectedMessage, (0, _toConsumableArray2["default"])(messages));
|
95
81
|
var result = fn();
|
96
|
-
|
97
82
|
if (contextualExpectedMessage.length > 0) {
|
98
83
|
var notFired = contextualExpectedMessage.toString();
|
99
84
|
contextualExpectedMessage.length = 0;
|
100
85
|
throw new Error("Expected ".concat(typename, " in callback: ").concat(notFired));
|
101
86
|
}
|
102
|
-
|
103
87
|
return result;
|
104
88
|
}
|
105
|
-
|
106
89
|
return {
|
107
90
|
disallowMessages: disallowMessages,
|
108
91
|
expectMessageWillFire: expectMessageWillFire,
|
@@ -110,7 +93,6 @@ function createConsoleInterceptionSystem(typename, expectFunctionName, setUpMock
|
|
110
93
|
expectMessageMany: expectMessageMany
|
111
94
|
};
|
112
95
|
}
|
113
|
-
|
114
96
|
module.exports = {
|
115
97
|
createConsoleInterceptionSystem: createConsoleInterceptionSystem
|
116
98
|
};
|
package/lib/consoleWarning.js
CHANGED
@@ -4,19 +4,20 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @emails oncall+relay
|
8
7
|
*
|
9
8
|
* @format
|
9
|
+
* @oncall relay
|
10
10
|
*/
|
11
|
+
|
11
12
|
'use strict';
|
12
|
-
/* global jest */
|
13
13
|
|
14
|
+
/* global jest */
|
14
15
|
var _require = require('./consoleErrorsAndWarnings'),
|
15
|
-
|
16
|
-
|
16
|
+
createConsoleInterceptionSystem = _require.createConsoleInterceptionSystem;
|
17
17
|
var consoleWarningsSystem = createConsoleInterceptionSystem('warning', 'expectConsoleWarning', function (impl) {
|
18
18
|
jest.spyOn(console, 'warn').mockImplementation(impl);
|
19
19
|
});
|
20
|
+
|
20
21
|
/**
|
21
22
|
* Mocks console.warn so that warnings printed to the console are instead thrown.
|
22
23
|
* Any expected warnings need to be explicitly expected with `expectConsoleWarningWillFire(message)`.
|
@@ -24,37 +25,32 @@ var consoleWarningsSystem = createConsoleInterceptionSystem('warning', 'expectCo
|
|
24
25
|
* NOTE: This should be called on top of a test file. The test should NOT
|
25
26
|
* use `jest.resetModules()` or manually mock `console`.
|
26
27
|
*/
|
27
|
-
|
28
28
|
function disallowConsoleWarnings() {
|
29
29
|
consoleWarningsSystem.disallowMessages();
|
30
30
|
}
|
31
|
+
|
31
32
|
/**
|
32
33
|
* Expect a warning with the given message. If the message isn't fired in the
|
33
34
|
* current test, the test will fail.
|
34
35
|
*/
|
35
|
-
|
36
|
-
|
37
36
|
function expectConsoleWarningWillFire(message, options) {
|
38
37
|
consoleWarningsSystem.expectMessageWillFire(message, options);
|
39
38
|
}
|
39
|
+
|
40
40
|
/**
|
41
41
|
* Expect the callback `fn` to print a warning with the message, and otherwise fail.
|
42
42
|
*/
|
43
|
-
|
44
|
-
|
45
43
|
function expectConsoleWarning(message, fn) {
|
46
44
|
return consoleWarningsSystem.expectMessage(message, fn);
|
47
45
|
}
|
46
|
+
|
48
47
|
/**
|
49
48
|
* Expect the callback `fn` to trigger all console warnings (in sequence),
|
50
49
|
* and otherwise fail.
|
51
50
|
*/
|
52
|
-
|
53
|
-
|
54
51
|
function expectConsoleWarningsMany(messages, fn) {
|
55
52
|
return consoleWarningsSystem.expectMessageMany(messages, fn);
|
56
53
|
}
|
57
|
-
|
58
54
|
module.exports = {
|
59
55
|
disallowConsoleWarnings: disallowConsoleWarnings,
|
60
56
|
expectConsoleWarningWillFire: expectConsoleWarningWillFire,
|
@@ -6,40 +6,37 @@
|
|
6
6
|
*
|
7
7
|
*
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
10
11
|
|
11
12
|
/**
|
12
13
|
* Run a test suite under multiple sets of feature flags.
|
13
14
|
* Beware that calling jest.resetModules() within the suite may break this.
|
14
15
|
*/
|
16
|
+
|
15
17
|
'use strict';
|
16
18
|
|
17
19
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
18
|
-
|
19
20
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
20
|
-
|
21
21
|
// This function is for running within a test environment, so we use globals
|
22
22
|
// available within tests -- taken from:
|
23
23
|
// i code/www/[5ee5e1d71a05e9f58ded3c1c22b810666383164f]/flow/shared/libdefs/jest.js
|
24
|
+
|
24
25
|
function describeWithFeatureFlags(flagSets, description, body) {
|
25
26
|
describe.each(flagSets)("".concat(description, " - Feature flags: %o"), function (flags) {
|
26
27
|
var originalFlags;
|
27
28
|
beforeEach(function () {
|
28
29
|
var _require = require('relay-runtime'),
|
29
|
-
|
30
|
-
|
30
|
+
RelayFeatureFlags = _require.RelayFeatureFlags;
|
31
31
|
originalFlags = (0, _objectSpread2["default"])({}, RelayFeatureFlags);
|
32
32
|
Object.assign(RelayFeatureFlags, flags);
|
33
33
|
});
|
34
34
|
afterEach(function () {
|
35
35
|
var _require2 = require('relay-runtime'),
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
RelayFeatureFlags = _require2.RelayFeatureFlags; // re-import in case of jest module resets
|
39
37
|
Object.assign(RelayFeatureFlags, originalFlags);
|
40
38
|
});
|
41
39
|
body();
|
42
40
|
});
|
43
41
|
}
|
44
|
-
|
45
42
|
module.exports = describeWithFeatureFlags;
|
@@ -5,26 +5,23 @@
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
7
|
* @format
|
8
|
+
* @oncall relay
|
8
9
|
*/
|
10
|
+
|
9
11
|
'use strict';
|
10
12
|
|
11
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
12
|
-
|
13
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
14
|
-
|
15
15
|
var getOutputForFixture = require('./getOutputForFixture');
|
16
|
-
|
17
16
|
var fs = require('fs');
|
18
|
-
|
19
17
|
var path = require('path');
|
18
|
+
|
20
19
|
/* global expect,test */
|
21
20
|
|
22
21
|
/**
|
23
22
|
* Extend Jest with a custom snapshot serializer to provide additional context
|
24
23
|
* and reduce the amount of escaping that occurs.
|
25
24
|
*/
|
26
|
-
|
27
|
-
|
28
25
|
var FIXTURE_TAG = Symbol["for"]('FIXTURE_TAG');
|
29
26
|
expect.addSnapshotSerializer({
|
30
27
|
print: function print(value) {
|
@@ -36,13 +33,13 @@ expect.addSnapshotSerializer({
|
|
36
33
|
return value && value[FIXTURE_TAG] === true;
|
37
34
|
}
|
38
35
|
});
|
36
|
+
|
39
37
|
/**
|
40
38
|
* Generates a set of jest snapshot tests that compare the output of the
|
41
39
|
* provided `operation` to each of the matching files in the `fixturesPath`.
|
42
40
|
* The fixture should have '# expected-to-throw' on its first line
|
43
41
|
* if it is expected to fail
|
44
42
|
*/
|
45
|
-
|
46
43
|
function generateTestsFromFixtures(fixturesPath, operation) {
|
47
44
|
var fixtures = fs.readdirSync(fixturesPath);
|
48
45
|
test("has fixtures in ".concat(fixturesPath), function () {
|
@@ -51,23 +48,19 @@ function generateTestsFromFixtures(fixturesPath, operation) {
|
|
51
48
|
var onlyFixtures = fixtures.filter(function (name) {
|
52
49
|
return name.startsWith('only.');
|
53
50
|
});
|
54
|
-
|
55
51
|
if (onlyFixtures.length) {
|
56
52
|
test.skip.each(fixtures.filter(function (name) {
|
57
53
|
return !name.startsWith('only.');
|
58
54
|
}))('matches expected output: %s', function () {});
|
59
55
|
fixtures = onlyFixtures;
|
60
56
|
}
|
61
|
-
|
62
57
|
test.each(fixtures)('matches expected output: %s', function (file) {
|
63
58
|
var _expect;
|
64
|
-
|
65
59
|
var input = fs.readFileSync(path.join(fixturesPath, file), 'utf8');
|
66
60
|
var output = getOutputForFixture(input, operation, file);
|
67
61
|
expect((_expect = {}, (0, _defineProperty2["default"])(_expect, FIXTURE_TAG, true), (0, _defineProperty2["default"])(_expect, "input", input), (0, _defineProperty2["default"])(_expect, "output", output), _expect)).toMatchSnapshot();
|
68
62
|
});
|
69
63
|
}
|
70
|
-
|
71
64
|
module.exports = {
|
72
65
|
generateTestsFromFixtures: generateTestsFromFixtures,
|
73
66
|
FIXTURE_TAG: FIXTURE_TAG
|
@@ -6,25 +6,23 @@
|
|
6
6
|
*
|
7
7
|
*
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
11
|
+
|
10
12
|
'use strict';
|
11
13
|
|
12
14
|
function getOutputForFixture(input, operation, file) {
|
13
15
|
var shouldThrow = /^# *expected-to-throw/.test(input) || /\.error\.\w+$/.test(file);
|
14
|
-
|
15
16
|
if (shouldThrow) {
|
16
17
|
var result;
|
17
|
-
|
18
18
|
try {
|
19
19
|
result = operation(input);
|
20
20
|
} catch (e) {
|
21
21
|
return "THROWN EXCEPTION:\n\n".concat(e.toString());
|
22
22
|
}
|
23
|
-
|
24
23
|
throw new Error("Expected test file '".concat(file, "' to throw, but it passed:\n").concat(result));
|
25
24
|
} else {
|
26
25
|
return operation(input);
|
27
26
|
}
|
28
27
|
}
|
29
|
-
|
30
28
|
module.exports = getOutputForFixture;
|
package/lib/index.js
CHANGED
@@ -6,50 +6,43 @@
|
|
6
6
|
*
|
7
7
|
*
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
11
|
+
|
10
12
|
'use strict';
|
11
13
|
|
12
14
|
var _require = require('./consoleError'),
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
disallowConsoleErrors = _require.disallowConsoleErrors,
|
16
|
+
expectConsoleError = _require.expectConsoleError,
|
17
|
+
expectConsoleErrorsMany = _require.expectConsoleErrorsMany,
|
18
|
+
expectConsoleErrorWillFire = _require.expectConsoleErrorWillFire;
|
18
19
|
var _require2 = require('./consoleWarning'),
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
disallowConsoleWarnings = _require2.disallowConsoleWarnings,
|
21
|
+
expectConsoleWarning = _require2.expectConsoleWarning,
|
22
|
+
expectConsoleWarningsMany = _require2.expectConsoleWarningsMany,
|
23
|
+
expectConsoleWarningWillFire = _require2.expectConsoleWarningWillFire;
|
24
24
|
var describeWithFeatureFlags = require('./describeWithFeatureFlags');
|
25
|
-
|
26
25
|
var _require3 = require('./generateTestsFromFixtures'),
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
FIXTURE_TAG = _require3.FIXTURE_TAG,
|
27
|
+
generateTestsFromFixtures = _require3.generateTestsFromFixtures;
|
30
28
|
var Matchers = require('./Matchers');
|
31
|
-
|
32
29
|
var printAST = require('./printAST');
|
33
|
-
|
34
30
|
var simpleClone = require('./simpleClone');
|
35
|
-
|
36
31
|
var trackRetentionForEnvironment = require('./trackRetentionForEnvironment');
|
37
|
-
|
38
32
|
var _require4 = require('./warnings'),
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
33
|
+
disallowWarnings = _require4.disallowWarnings,
|
34
|
+
expectToWarn = _require4.expectToWarn,
|
35
|
+
expectToWarnMany = _require4.expectToWarnMany,
|
36
|
+
expectWarningWillFire = _require4.expectWarningWillFire;
|
44
37
|
var _require5 = require('relay-test-utils'),
|
45
|
-
|
46
|
-
|
38
|
+
createMockEnvironment = _require5.createMockEnvironment,
|
39
|
+
unwrapContainer = _require5.unwrapContainer;
|
40
|
+
|
41
|
+
// Apparently, in node v16 (because now they are using V8 V9.something)
|
47
42
|
// the content of the TypeError has changed, and now some of our tests
|
48
43
|
// stated to fail.
|
49
44
|
// This is a temporary work-around to make test pass, but we need to
|
50
45
|
// figure out a cleaner way of testing this.
|
51
|
-
|
52
|
-
|
53
46
|
function cannotReadPropertyOfUndefined__DEPRECATED(propertyName) {
|
54
47
|
if (process.version.match(/^v16\.(.+)$/)) {
|
55
48
|
return "Cannot read properties of undefined (reading '".concat(propertyName, "')");
|
@@ -57,11 +50,10 @@ function cannotReadPropertyOfUndefined__DEPRECATED(propertyName) {
|
|
57
50
|
return "Cannot read property '".concat(propertyName, "' of undefined");
|
58
51
|
}
|
59
52
|
}
|
53
|
+
|
60
54
|
/**
|
61
55
|
* The public interface to Relay Test Utils.
|
62
56
|
*/
|
63
|
-
|
64
|
-
|
65
57
|
module.exports = {
|
66
58
|
cannotReadPropertyOfUndefined__DEPRECATED: cannotReadPropertyOfUndefined__DEPRECATED,
|
67
59
|
createMockEnvironment: createMockEnvironment,
|
package/lib/printAST.js
CHANGED
@@ -6,8 +6,11 @@
|
|
6
6
|
*
|
7
7
|
*
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
11
|
+
|
10
12
|
'use strict';
|
13
|
+
|
11
14
|
/**
|
12
15
|
* Prints a JSON AST similar to JSON.stringify(ast, null, 2) with some changes:
|
13
16
|
* - Adds trailing commas to simplify diffs.
|
@@ -18,20 +21,15 @@
|
|
18
21
|
* prop: value,
|
19
22
|
* }
|
20
23
|
*/
|
21
|
-
|
22
24
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
23
|
-
|
24
25
|
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
25
|
-
|
26
26
|
function printAST(ast) {
|
27
27
|
return printASTImpl(ast, '');
|
28
28
|
}
|
29
|
-
|
30
29
|
function printASTImpl(ast, indent) {
|
31
30
|
switch (typeof ast) {
|
32
31
|
case 'undefined':
|
33
32
|
return 'undefined';
|
34
|
-
|
35
33
|
case 'object':
|
36
34
|
{
|
37
35
|
if (ast === null) {
|
@@ -40,13 +38,10 @@ function printASTImpl(ast, indent) {
|
|
40
38
|
if (ast.length === 0) {
|
41
39
|
return '[]';
|
42
40
|
}
|
43
|
-
|
44
41
|
var result = '[\n';
|
45
42
|
var itemIndent = indent + ' ';
|
46
|
-
|
47
43
|
var _iterator = (0, _createForOfIteratorHelper2["default"])(ast),
|
48
|
-
|
49
|
-
|
44
|
+
_step;
|
50
45
|
try {
|
51
46
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
52
47
|
var item = _step.value;
|
@@ -57,56 +52,45 @@ function printASTImpl(ast, indent) {
|
|
57
52
|
} finally {
|
58
53
|
_iterator.f();
|
59
54
|
}
|
60
|
-
|
61
55
|
result += indent + ']';
|
62
56
|
return result;
|
63
57
|
} else if (typeof ast.kind === 'string') {
|
64
58
|
var _result = "".concat(ast.kind, " {\n");
|
65
|
-
|
66
59
|
var keyIndent = indent + ' ';
|
67
|
-
|
68
60
|
for (var _i = 0, _Object$entries = Object.entries(ast); _i < _Object$entries.length; _i++) {
|
69
61
|
var _Object$entries$_i = _Object$entries[_i],
|
70
|
-
|
71
|
-
|
72
|
-
|
62
|
+
key = _Object$entries$_i[0],
|
63
|
+
value = _Object$entries$_i[1];
|
73
64
|
if (key === 'kind') {
|
74
65
|
continue;
|
75
66
|
}
|
76
|
-
|
77
67
|
_result += "".concat(keyIndent).concat(key, ": ").concat(printASTImpl(value, keyIndent), ",\n");
|
78
68
|
}
|
79
|
-
|
80
69
|
_result += indent + '}';
|
81
70
|
return _result;
|
82
71
|
} else if (typeof ast.toJSON === 'function') {
|
83
|
-
return printASTImpl(
|
72
|
+
return printASTImpl(
|
73
|
+
// $FlowFixMe[incompatible-use] - we have to unsafely assume no arguments here
|
84
74
|
ast.toJSON(), indent);
|
85
75
|
} else {
|
86
76
|
var _result2 = '{\n';
|
87
|
-
|
88
77
|
var _keyIndent = indent + ' ';
|
89
|
-
|
90
78
|
for (var _i2 = 0, _Object$entries2 = Object.entries(ast); _i2 < _Object$entries2.length; _i2++) {
|
91
79
|
var _Object$entries2$_i = _Object$entries2[_i2],
|
92
|
-
|
93
|
-
|
80
|
+
_key = _Object$entries2$_i[0],
|
81
|
+
_value = _Object$entries2$_i[1];
|
94
82
|
_result2 += "".concat(_keyIndent).concat(JSON.stringify(_key), ": ").concat(printASTImpl(_value, _keyIndent), ",\n");
|
95
83
|
}
|
96
|
-
|
97
84
|
_result2 += indent + '}';
|
98
85
|
return _result2;
|
99
86
|
}
|
100
87
|
}
|
101
|
-
|
102
88
|
case 'string':
|
103
89
|
case 'number':
|
104
90
|
case 'boolean':
|
105
91
|
return JSON.stringify(ast, null, 2).replace('\n', '\n' + indent);
|
106
|
-
|
107
92
|
default:
|
108
93
|
throw new Error("printAST doesn't handle values where " + "typeof value === '".concat(typeof ast, "'."));
|
109
94
|
}
|
110
95
|
}
|
111
|
-
|
112
96
|
module.exports = printAST;
|
package/lib/simpleClone.js
CHANGED
@@ -6,30 +6,29 @@
|
|
6
6
|
*
|
7
7
|
*
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
11
|
+
|
10
12
|
'use strict';
|
13
|
+
|
11
14
|
/**
|
12
15
|
* A helper to create a deep clone of a value, plain Object, or array of such.
|
13
16
|
*
|
14
17
|
* Does not support RegExp, Date, other classes, or self-referential values.
|
15
18
|
*/
|
16
|
-
|
17
19
|
function simpleClone(value) {
|
18
20
|
if (Array.isArray(value)) {
|
19
21
|
// $FlowFixMe[incompatible-return]
|
20
22
|
return value.map(simpleClone);
|
21
23
|
} else if (value != null && typeof value === 'object') {
|
22
24
|
var result = {};
|
23
|
-
|
24
25
|
for (var key in value) {
|
25
26
|
result[key] = simpleClone(value[key]);
|
26
|
-
}
|
27
|
-
|
28
|
-
|
27
|
+
}
|
28
|
+
// $FlowFixMe[incompatible-return]
|
29
29
|
return result;
|
30
30
|
} else {
|
31
31
|
return value;
|
32
32
|
}
|
33
33
|
}
|
34
|
-
|
35
34
|
module.exports = simpleClone;
|
package/lib/testschema.graphql
CHANGED
@@ -6,10 +6,12 @@
|
|
6
6
|
*
|
7
7
|
*
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
11
|
+
|
10
12
|
'use strict';
|
11
|
-
/* global jest */
|
12
13
|
|
14
|
+
/* global jest */
|
13
15
|
/**
|
14
16
|
* Takes an environment and augments it with a mock implementation of `retain`
|
15
17
|
* that tracks what operations are currently retained. Also returns the Jest mock
|
@@ -20,19 +22,18 @@ function trackRetentionForEnvironment(environment) {
|
|
20
22
|
var retainCountsByOperation = new Map();
|
21
23
|
var release = jest.fn(function (id) {
|
22
24
|
var _retainCountsByOperat;
|
23
|
-
|
24
25
|
var existing = (_retainCountsByOperat = retainCountsByOperation.get(id)) !== null && _retainCountsByOperat !== void 0 ? _retainCountsByOperat : NaN;
|
25
|
-
|
26
26
|
if (existing === 1) {
|
27
27
|
retainCountsByOperation["delete"](id);
|
28
28
|
} else {
|
29
29
|
retainCountsByOperation.set(id, existing - 1);
|
30
30
|
}
|
31
|
-
});
|
31
|
+
});
|
32
32
|
|
33
|
+
// $FlowFixMe[cannot-write] safe to do for mocking
|
34
|
+
// $FlowFixMe[missing-local-annot] error found when enabling Flow LTI mode
|
33
35
|
environment.retain = jest.fn(function (operation) {
|
34
36
|
var _retainCountsByOperat2;
|
35
|
-
|
36
37
|
var id = operation.request.identifier;
|
37
38
|
var existing = (_retainCountsByOperat2 = retainCountsByOperation.get(id)) !== null && _retainCountsByOperat2 !== void 0 ? _retainCountsByOperat2 : 0;
|
38
39
|
retainCountsByOperation.set(id, existing + 1);
|
@@ -42,23 +43,18 @@ function trackRetentionForEnvironment(environment) {
|
|
42
43
|
if (!released) {
|
43
44
|
release(id);
|
44
45
|
}
|
45
|
-
|
46
46
|
released = true;
|
47
47
|
}
|
48
48
|
};
|
49
49
|
});
|
50
|
-
|
51
50
|
function isOperationRetained(operation) {
|
52
51
|
var _retainCountsByOperat3;
|
53
|
-
|
54
52
|
var id = operation.request.identifier;
|
55
53
|
return ((_retainCountsByOperat3 = retainCountsByOperation.get(id)) !== null && _retainCountsByOperat3 !== void 0 ? _retainCountsByOperat3 : 0) > 0;
|
56
54
|
}
|
57
|
-
|
58
55
|
return {
|
59
56
|
release_DEPRECATED: release,
|
60
57
|
isOperationRetained: isOperationRetained
|
61
58
|
};
|
62
59
|
}
|
63
|
-
|
64
60
|
module.exports = trackRetentionForEnvironment;
|
package/lib/warnings.js
CHANGED
@@ -4,23 +4,22 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @emails oncall+relay
|
8
7
|
*
|
9
8
|
* @format
|
9
|
+
* @oncall relay
|
10
10
|
*/
|
11
|
+
|
11
12
|
'use strict';
|
12
|
-
/* global jest */
|
13
13
|
|
14
|
+
/* global jest */
|
14
15
|
var _require = require('./consoleErrorsAndWarnings'),
|
15
|
-
|
16
|
-
|
16
|
+
createConsoleInterceptionSystem = _require.createConsoleInterceptionSystem;
|
17
17
|
var warningsSystem = createConsoleInterceptionSystem('warning', 'expectToWarn', function (impl) {
|
18
18
|
jest.mock("fbjs/lib/warning", function () {
|
19
19
|
return jest.fn(function (condition, format) {
|
20
20
|
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
21
21
|
args[_key - 2] = arguments[_key];
|
22
22
|
}
|
23
|
-
|
24
23
|
if (!condition) {
|
25
24
|
var argIndex = 0;
|
26
25
|
var message = format.replace(/%s/g, function () {
|
@@ -31,6 +30,7 @@ var warningsSystem = createConsoleInterceptionSystem('warning', 'expectToWarn',
|
|
31
30
|
});
|
32
31
|
});
|
33
32
|
});
|
33
|
+
|
34
34
|
/**
|
35
35
|
* Mocks the `warning` module to turn warnings into errors. Any expected
|
36
36
|
* warnings need to be explicitly expected with `expectWarningWillFire(message)`.
|
@@ -38,37 +38,32 @@ var warningsSystem = createConsoleInterceptionSystem('warning', 'expectToWarn',
|
|
38
38
|
* NOTE: This should be called on top of a test file. The test should NOT
|
39
39
|
* use `jest.resetModules()` or manually mock `warning`.
|
40
40
|
*/
|
41
|
-
|
42
41
|
function disallowWarnings() {
|
43
42
|
warningsSystem.disallowMessages();
|
44
43
|
}
|
44
|
+
|
45
45
|
/**
|
46
46
|
* Expect a warning with the given message. If the message isn't fired in the
|
47
47
|
* current test, the test will fail.
|
48
48
|
*/
|
49
|
-
|
50
|
-
|
51
49
|
function expectWarningWillFire(message, options) {
|
52
50
|
warningsSystem.expectMessageWillFire(message, options);
|
53
51
|
}
|
52
|
+
|
54
53
|
/**
|
55
54
|
* Expect the callback `fn` to trigger the warning message and otherwise fail.
|
56
55
|
*/
|
57
|
-
|
58
|
-
|
59
56
|
function expectToWarn(message, fn) {
|
60
57
|
return warningsSystem.expectMessage(message, fn);
|
61
58
|
}
|
59
|
+
|
62
60
|
/**
|
63
61
|
* Expect the callback `fn` to trigger all warning messages (in sequence)
|
64
62
|
* or otherwise fail.
|
65
63
|
*/
|
66
|
-
|
67
|
-
|
68
64
|
function expectToWarnMany(messages, fn) {
|
69
65
|
return warningsSystem.expectMessageMany(messages, fn);
|
70
66
|
}
|
71
|
-
|
72
67
|
module.exports = {
|
73
68
|
disallowWarnings: disallowWarnings,
|
74
69
|
expectWarningWillFire: expectWarningWillFire,
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "relay-test-utils-internal",
|
3
3
|
"description": "Internal utilities for testing Relay.",
|
4
|
-
"version": "
|
4
|
+
"version": "15.0.0",
|
5
5
|
"keywords": [
|
6
6
|
"graphql",
|
7
7
|
"relay"
|
@@ -17,7 +17,7 @@
|
|
17
17
|
"dependencies": {
|
18
18
|
"@babel/runtime": "^7.0.0",
|
19
19
|
"fbjs": "^3.0.2",
|
20
|
-
"relay-runtime": "
|
20
|
+
"relay-runtime": "15.0.0"
|
21
21
|
},
|
22
22
|
"directories": {
|
23
23
|
"": "./"
|
package/printAST.js.flow
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
/**
|
2
|
-
* Relay
|
2
|
+
* Relay v15.0.0
|
3
3
|
*/
|
4
4
|
module.exports=function(e){var n={};function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)t.d(r,o,function(n){return e[n]}.bind(null,o));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=3)}([function(e,n){e.exports=require("@babel/runtime/helpers/interopRequireDefault")},function(e,n,t){"use strict";var r=(0,t(0).default)(t(5)),o=console.error;e.exports={createConsoleInterceptionSystem:function(e,n,t){var i=!1,c=[],a=[],s=[],u=e.charAt(0).toUpperCase()+e.slice(1),l=u+"s",f="disallow".concat(u,"s");function p(e){var n=c.findIndex((function(n){return e.startsWith(n)})),t=a.findIndex((function(n){return e.startsWith(n)}));if(s.length>0&&e.startsWith(s[0]))s.shift();else if(n>=0)c.splice(n,1);else{if(!(t>=0))throw o("Unexpected ".concat(u,": ")+e),new Error("".concat(u,": ")+e);a.splice(t,1)}}function d(t,o){if(s.length>0)throw new Error("Cannot nest ".concat(n,"() calls."));s.push.apply(s,(0,r.default)(t));var i=o();if(s.length>0){var c=s.toString();throw s.length=0,new Error("Expected ".concat(e," in callback: ").concat(c))}return i}return{disallowMessages:function(){if(i)throw new Error("".concat(f," should be called only once."));i=!0,t(p),afterEach((function(){if(a.length=0,s.length=0,c.length>0){var n=new Error("Some ".concat(c.length," expected ").concat(e,"s where not triggered:\n\n")+Array.from(c,(function(e){return" * ".concat(e)})).join("\n")+"\n");throw c.length=0,n}}))},expectMessageWillFire:function(e,n){if(!i)throw new Error("".concat(f," needs to be called before expect").concat(l,"WillFire"));for(var t=!0===(null==n?void 0:n.optional),r=0;r<(null!==(o=null==n?void 0:n.count)&&void 0!==o?o:1);r++){var o;(t?a:c).push(e)}},expectMessage:function(e,n){return d([e],n)},expectMessageMany:d}}}},function(e,n){e.exports=require("relay-runtime")},function(e,n,t){"use strict";var r=t(4),o=r.disallowConsoleErrors,i=r.expectConsoleError,c=r.expectConsoleErrorsMany,a=r.expectConsoleErrorWillFire,s=t(6),u=s.disallowConsoleWarnings,l=s.expectConsoleWarning,f=s.expectConsoleWarningsMany,p=s.expectConsoleWarningWillFire,d=t(7),g=t(9),x=g.FIXTURE_TAG,h=g.generateTestsFromFixtures,y=t(14),v=t(16),w=t(18),b=t(19),m=t(20),W=m.disallowWarnings,E=m.expectToWarn,C=m.expectToWarnMany,M=m.expectWarningWillFire,F=t(21),j=F.createMockEnvironment,S=F.unwrapContainer;e.exports={cannotReadPropertyOfUndefined__DEPRECATED:function(e){return process.version.match(/^v16\.(.+)$/)?"Cannot read properties of undefined (reading '".concat(e,"')"):"Cannot read property '".concat(e,"' of undefined")},createMockEnvironment:j,describeWithFeatureFlags:d,disallowConsoleErrors:o,disallowConsoleWarnings:u,disallowWarnings:W,expectConsoleError:i,expectConsoleErrorsMany:c,expectConsoleErrorWillFire:a,expectConsoleWarningWillFire:p,expectConsoleWarning:l,expectConsoleWarningsMany:f,expectToWarn:E,expectToWarnMany:C,expectWarningWillFire:M,FIXTURE_TAG:x,generateTestsFromFixtures:h,matchers:y,printAST:v,simpleClone:w,trackRetentionForEnvironment:b,unwrapContainer:S}},function(e,n,t){"use strict";var r=(0,t(1).createConsoleInterceptionSystem)("error","expectConsoleError",(function(e){jest.spyOn(console,"error").mockImplementation(e)}));e.exports={disallowConsoleErrors:function(){r.disallowMessages()},expectConsoleErrorWillFire:function(e,n){r.expectMessageWillFire(e,n)},expectConsoleError:function(e,n){return r.expectMessage(e,n)},expectConsoleErrorsMany:function(e,n){return r.expectMessageMany(e,n)}}},function(e,n){e.exports=require("@babel/runtime/helpers/toConsumableArray")},function(e,n,t){"use strict";var r=(0,t(1).createConsoleInterceptionSystem)("warning","expectConsoleWarning",(function(e){jest.spyOn(console,"warn").mockImplementation(e)}));e.exports={disallowConsoleWarnings:function(){r.disallowMessages()},expectConsoleWarningWillFire:function(e,n){r.expectMessageWillFire(e,n)},expectConsoleWarning:function(e,n){return r.expectMessage(e,n)},expectConsoleWarningsMany:function(e,n){return r.expectMessageMany(e,n)}}},function(e,n,t){"use strict";var r=(0,t(0).default)(t(8));e.exports=function(e,n,o){describe.each(e)("".concat(n," - Feature flags: %o"),(function(e){var n;beforeEach((function(){var o=t(2).RelayFeatureFlags;n=(0,r.default)({},o),Object.assign(o,e)})),afterEach((function(){var e=t(2).RelayFeatureFlags;Object.assign(e,n)})),o()}))}},function(e,n){e.exports=require("@babel/runtime/helpers/objectSpread2")},function(e,n,t){"use strict";var r=(0,t(0).default)(t(10)),o=t(11),i=t(12),c=t(13),a=Symbol.for("FIXTURE_TAG");expect.addSnapshotSerializer({print:function(e){return Object.keys(e).map((function(n){return"~~~~~~~~~~ ".concat(n.toUpperCase()," ~~~~~~~~~~\n").concat(e[n])})).join("\n")},test:function(e){return e&&!0===e[a]}}),e.exports={generateTestsFromFixtures:function(e,n){var t=i.readdirSync(e);test("has fixtures in ".concat(e),(function(){expect(t.length>0).toBe(!0)}));var s=t.filter((function(e){return e.startsWith("only.")}));s.length&&(test.skip.each(t.filter((function(e){return!e.startsWith("only.")})))("matches expected output: %s",(function(){})),t=s),test.each(t)("matches expected output: %s",(function(t){var s,u=i.readFileSync(c.join(e,t),"utf8"),l=o(u,n,t);expect((s={},(0,r.default)(s,a,!0),(0,r.default)(s,"input",u),(0,r.default)(s,"output",l),s)).toMatchSnapshot()}))},FIXTURE_TAG:a}},function(e,n){e.exports=require("@babel/runtime/helpers/defineProperty")},function(e,n,t){"use strict";e.exports=function(e,n,t){if(/^# *expected-to-throw/.test(e)||/\.error\.\w+$/.test(t)){var r;try{r=n(e)}catch(e){return"THROWN EXCEPTION:\n\n".concat(e.toString())}throw new Error("Expected test file '".concat(t,"' to throw, but it passed:\n").concat(r))}return n(e)}},function(e,n){e.exports=require("fs")},function(e,n){e.exports=require("path")},function(e,n,t){"use strict";e.exports={toBeDeeplyFrozen:function(e){return function e(n){if(expect(Object.isFrozen(n)).toBe(!0),Array.isArray(n))n.forEach((function(n){return e(n)}));else if("object"==typeof n&&null!==n)for(var t in n)e(n[t])}(e),{pass:!0}},toWarn:function(e,n){var r=this.isNot;function o(e){return e instanceof RegExp?e.toString():JSON.stringify(e)}function i(e){return"["+e.map(o).join(", ")+"]"}function c(e){return e.length?e.map((function(e){return i([!!e[0]].concat(e.slice(1)))})).join(", "):"[]"}var a=t(15);if(!a.mock)throw new Error("toWarn(): Requires `jest.mock('warning')`.");var s=a.mock.calls.length;e();var u=a.mock.calls.slice(s);return n?(Array.isArray(n)||(n=[n]),{pass:!!u.find((function(e){return e.length===n.length+1&&e.every((function(e,t){if(!t)return!e;var r=n[t-1];return r instanceof RegExp?r.test(e):e===r}))})),message:function(){return"Expected ".concat(r?"not ":"","to warn: ")+"".concat(i([!1].concat(n))," but ")+"`warning` received the following calls: "+"".concat(c(u),".")}}):{pass:!!u.filter((function(e){return!e[0]})).length,message:function(){return"Expected ".concat(r?"not ":"","to warn but ")+"`warning` received the following calls: "+"".concat(c(u),".")}}}}},function(e,n){e.exports=require("fbjs/lib/warning")},function(e,n,t){"use strict";var r=(0,t(0).default)(t(17));e.exports=function(e){return function e(n,t){switch(typeof n){case"undefined":return"undefined";case"object":if(null===n)return"null";if(Array.isArray(n)){if(0===n.length)return"[]";var o,i="[\n",c=t+" ",a=(0,r.default)(n);try{for(a.s();!(o=a.n()).done;){var s=o.value;i+=c+e(s,c)+",\n"}}catch(e){a.e(e)}finally{a.f()}return i+=t+"]"}if("string"==typeof n.kind){for(var u="".concat(n.kind," {\n"),l=t+" ",f=0,p=Object.entries(n);f<p.length;f++){var d=p[f],g=d[0],x=d[1];"kind"!==g&&(u+="".concat(l).concat(g,": ").concat(e(x,l),",\n"))}return u+=t+"}"}if("function"==typeof n.toJSON)return e(n.toJSON(),t);for(var h="{\n",y=t+" ",v=0,w=Object.entries(n);v<w.length;v++){var b=w[v],m=b[0],W=b[1];h+="".concat(y).concat(JSON.stringify(m),": ").concat(e(W,y),",\n")}return h+=t+"}";case"string":case"number":case"boolean":return JSON.stringify(n,null,2).replace("\n","\n"+t);default:throw new Error("printAST doesn't handle values where "+"typeof value === '".concat(typeof n,"'."))}}(e,"")}},function(e,n){e.exports=require("@babel/runtime/helpers/createForOfIteratorHelper")},function(e,n,t){"use strict";e.exports=function e(n){if(Array.isArray(n))return n.map(e);if(null!=n&&"object"==typeof n){var t={};for(var r in n)t[r]=e(n[r]);return t}return n}},function(e,n,t){"use strict";e.exports=function(e){var n=new Map,t=jest.fn((function(e){var t,r=null!==(t=n.get(e))&&void 0!==t?t:NaN;1===r?n.delete(e):n.set(e,r-1)}));return e.retain=jest.fn((function(e){var r,o=e.request.identifier,i=null!==(r=n.get(o))&&void 0!==r?r:0;n.set(o,i+1);var c=!1;return{dispose:function(){c||t(o),c=!0}}})),{release_DEPRECATED:t,isOperationRetained:function(e){var t,r=e.request.identifier;return(null!==(t=n.get(r))&&void 0!==t?t:0)>0}}}},function(e,n,t){"use strict";var r=(0,t(1).createConsoleInterceptionSystem)("warning","expectToWarn",(function(e){jest.mock("fbjs/lib/warning",(function(){return jest.fn((function(n,t){for(var r=arguments.length,o=new Array(r>2?r-2:0),i=2;i<r;i++)o[i-2]=arguments[i];if(!n){var c=0,a=t.replace(/%s/g,(function(){return String(o[c++])}));e(a)}}))}))}));e.exports={disallowWarnings:function(){r.disallowMessages()},expectWarningWillFire:function(e,n){r.expectMessageWillFire(e,n)},expectToWarn:function(e,n){return r.expectMessage(e,n)},expectToWarnMany:function(e,n){return r.expectMessageMany(e,n)}}},function(e,n){e.exports=require("relay-test-utils")}]);
|
package/simpleClone.js.flow
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
*
|
7
7
|
* @flow
|
8
8
|
* @format
|
9
|
+
* @oncall relay
|
9
10
|
*/
|
10
11
|
|
11
12
|
'use strict';
|
@@ -25,9 +26,9 @@ function trackRetentionForEnvironment(environment: IEnvironment): {
|
|
25
26
|
release_DEPRECATED: JestMockFn<[mixed], void>,
|
26
27
|
isOperationRetained: OperationDescriptor => boolean,
|
27
28
|
} {
|
28
|
-
const retainCountsByOperation = new Map();
|
29
|
+
const retainCountsByOperation = new Map<mixed, number>();
|
29
30
|
|
30
|
-
const release = jest.fn(id => {
|
31
|
+
const release = jest.fn((id: mixed) => {
|
31
32
|
const existing = retainCountsByOperation.get(id) ?? NaN;
|
32
33
|
if (existing === 1) {
|
33
34
|
retainCountsByOperation.delete(id);
|
@@ -37,6 +38,7 @@ function trackRetentionForEnvironment(environment: IEnvironment): {
|
|
37
38
|
});
|
38
39
|
|
39
40
|
// $FlowFixMe[cannot-write] safe to do for mocking
|
41
|
+
// $FlowFixMe[missing-local-annot] error found when enabling Flow LTI mode
|
40
42
|
environment.retain = jest.fn(operation => {
|
41
43
|
const id = operation.request.identifier;
|
42
44
|
const existing = retainCountsByOperation.get(id) ?? 0;
|
package/warnings.js.flow
CHANGED