Skip to content

Commit ba050ae

Browse files
authored
Move functions to non-deprecated library (#2120)
Closes #2111 The intention had been to deprecate only the import, not the members, but the semantics of a deprecated library is that all the members are deprecated. Move the definitions to a non-deprecated library under `src/` for conventional package privacy, and deprecate the exporting library instead of the library with definitions.
1 parent 96e1ed2 commit ba050ae

File tree

5 files changed

+294
-289
lines changed

5 files changed

+294
-289
lines changed

pkgs/test/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## 1.24.8
22

3-
* Support version `0.5.8` of `package:test_core`.
3+
* Remove spurious deprecation during autocomplete for `setUp` and `tearDown`.
44

55
## 1.24.7
66

pkgs/test/lib/scaffolding.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore: deprecated_member_use
6-
export 'package:test_core/scaffolding.dart';
5+
export 'package:test_core/src/scaffolding.dart';

pkgs/test_core/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
## 0.5.8
22

3+
* Move scaffolding definitions to a non-deprecated library.
34
* Allow omitting the `Compiler` argument to `currentPlatform`.
45

56
## 0.5.7

pkgs/test_core/lib/scaffolding.dart

Lines changed: 2 additions & 286 deletions
Original file line numberDiff line numberDiff line change
@@ -4,290 +4,6 @@
44

55
@Deprecated('package:test_core is not intended for general use. '
66
'Please use package:test.')
7-
library test_core.scaffolding;
7+
library;
88

9-
import 'dart:async';
10-
11-
import 'package:meta/meta.dart' show isTest, isTestGroup;
12-
import 'package:path/path.dart' as p;
13-
import 'package:test_api/backend.dart';
14-
import 'package:test_api/scaffolding.dart' show Timeout, pumpEventQueue;
15-
import 'package:test_api/src/backend/declarer.dart'; // ignore: implementation_imports
16-
import 'package:test_api/src/backend/invoker.dart'; // ignore: implementation_imports
17-
18-
import 'src/runner/engine.dart';
19-
import 'src/runner/plugin/environment.dart';
20-
import 'src/runner/reporter/expanded.dart';
21-
import 'src/runner/runner_suite.dart';
22-
import 'src/runner/suite.dart';
23-
import 'src/util/async.dart';
24-
import 'src/util/os.dart';
25-
import 'src/util/print_sink.dart';
26-
27-
// Hide implementations which don't support being run directly.
28-
// This file is an almost direct copy of import below, but with the global
29-
// declarer added.
30-
export 'package:test_api/scaffolding.dart'
31-
hide group, setUp, setUpAll, tearDown, tearDownAll, test;
32-
33-
/// The global declarer.
34-
///
35-
/// This is used if a test file is run directly, rather than through the runner.
36-
Declarer? _globalDeclarer;
37-
38-
/// Gets the declarer for the current scope.
39-
///
40-
/// When using the runner, this returns the [Zone]-scoped declarer that's set by
41-
/// [RemoteListener]. If the test file is run directly, this returns
42-
/// [_globalDeclarer] (and sets it up on the first call).
43-
Declarer get _declarer {
44-
var declarer = Declarer.current;
45-
if (declarer != null) return declarer;
46-
if (_globalDeclarer != null) return _globalDeclarer!;
47-
48-
// Since there's no Zone-scoped declarer, the test file is being run directly.
49-
// In order to run the tests, we set up our own Declarer via
50-
// [_globalDeclarer], and pump the event queue as a best effort to wait for
51-
// all tests to be defined before starting them.
52-
_globalDeclarer = Declarer();
53-
54-
() async {
55-
await pumpEventQueue();
56-
57-
var suite = RunnerSuite(
58-
const PluginEnvironment(),
59-
SuiteConfiguration.empty,
60-
_globalDeclarer!.build(),
61-
SuitePlatform(Runtime.vm, compiler: null, os: currentOSGuess),
62-
path: p.prettyUri(Uri.base));
63-
64-
var engine = Engine();
65-
engine.suiteSink.add(suite);
66-
engine.suiteSink.close();
67-
ExpandedReporter.watch(engine, PrintSink(),
68-
color: true, printPath: false, printPlatform: false);
69-
70-
var success = await runZoned(() => Invoker.guard(engine.run),
71-
zoneValues: {#test.declarer: _globalDeclarer});
72-
if (success == true) return null;
73-
print('');
74-
unawaited(Future.error('Dummy exception to set exit code.'));
75-
}();
76-
77-
return _globalDeclarer!;
78-
}
79-
80-
// TODO(nweiz): This and other top-level functions should throw exceptions if
81-
// they're called after the declarer has finished declaring.
82-
/// Creates a new test case with the given description (converted to a string)
83-
/// and body.
84-
///
85-
/// The description will be added to the descriptions of any surrounding
86-
/// [group]s. If [testOn] is passed, it's parsed as a [platform selector][]; the
87-
/// test will only be run on matching platforms.
88-
///
89-
/// [platform selector]: https://github.com/dart-lang/test/tree/master/pkgs/test#platform-selectors
90-
///
91-
/// If [timeout] is passed, it's used to modify or replace the default timeout
92-
/// of 30 seconds. Timeout modifications take precedence in suite-group-test
93-
/// order, so [timeout] will also modify any timeouts set on the group or suite.
94-
///
95-
/// If [skip] is a String or `true`, the test is skipped. If it's a String, it
96-
/// should explain why the test is skipped; this reason will be printed instead
97-
/// of running the test.
98-
///
99-
/// If [tags] is passed, it declares user-defined tags that are applied to the
100-
/// test. These tags can be used to select or skip the test on the command line,
101-
/// or to do bulk test configuration. All tags should be declared in the
102-
/// [package configuration file][configuring tags]. The parameter can be an
103-
/// [Iterable] of tag names, or a [String] representing a single tag.
104-
///
105-
/// If [retry] is passed, the test will be retried the provided number of times
106-
/// before being marked as a failure.
107-
///
108-
/// [configuring tags]: https://github.com/dart-lang/test/blob/master/pkgs/test/doc/configuration.md#configuring-tags
109-
///
110-
/// [onPlatform] allows tests to be configured on a platform-by-platform
111-
/// basis. It's a map from strings that are parsed as [PlatformSelector]s to
112-
/// annotation classes: [Timeout], [Skip], or lists of those. These
113-
/// annotations apply only on the given platforms. For example:
114-
///
115-
/// test('potentially slow test', () {
116-
/// // ...
117-
/// }, onPlatform: {
118-
/// // This test is especially slow on Windows.
119-
/// 'windows': Timeout.factor(2),
120-
/// 'browser': [
121-
/// Skip('TODO: add browser support'),
122-
/// // This will be slow on browsers once it works on them.
123-
/// Timeout.factor(2)
124-
/// ]
125-
/// });
126-
///
127-
/// If multiple platforms match, the annotations apply in order as through
128-
/// they were in nested groups.
129-
///
130-
/// If the `solo` flag is `true`, only tests and groups marked as
131-
/// "solo" will be be run. This only restricts tests *within this test
132-
/// suite*—tests in other suites will run as normal. We recommend that users
133-
/// avoid this flag if possible and instead use the test runner flag `-n` to
134-
/// filter tests by name.
135-
@isTest
136-
void test(Object? description, dynamic Function() body,
137-
{String? testOn,
138-
Timeout? timeout,
139-
Object? skip,
140-
Object? tags,
141-
Map<String, dynamic>? onPlatform,
142-
int? retry,
143-
@Deprecated('Debug only') bool solo = false}) {
144-
_declarer.test(description.toString(), body,
145-
testOn: testOn,
146-
timeout: timeout,
147-
skip: skip,
148-
onPlatform: onPlatform,
149-
tags: tags,
150-
retry: retry,
151-
solo: solo);
152-
153-
// Force dart2js not to inline this function. We need it to be separate from
154-
// `main()` in JS stack traces in order to properly determine the line and
155-
// column where the test was defined. See sdk#26705.
156-
return;
157-
return; // ignore: dead_code
158-
}
159-
160-
/// Creates a group of tests.
161-
///
162-
/// A group's description (converted to a string) is included in the descriptions
163-
/// of any tests or sub-groups it contains. [setUp] and [tearDown] are also scoped
164-
/// to the containing group.
165-
///
166-
/// If [testOn] is passed, it's parsed as a [platform selector][]; the test will
167-
/// only be run on matching platforms.
168-
///
169-
/// [platform selector]: https://github.com/dart-lang/test/tree/master/pkgs/test#platform-selectors
170-
///
171-
/// If [timeout] is passed, it's used to modify or replace the default timeout
172-
/// of 30 seconds. Timeout modifications take precedence in suite-group-test
173-
/// order, so [timeout] will also modify any timeouts set on the suite, and will
174-
/// be modified by any timeouts set on individual tests.
175-
///
176-
/// If [skip] is a String or `true`, the group is skipped. If it's a String, it
177-
/// should explain why the group is skipped; this reason will be printed instead
178-
/// of running the group's tests.
179-
///
180-
/// If [tags] is passed, it declares user-defined tags that are applied to the
181-
/// test. These tags can be used to select or skip the test on the command line,
182-
/// or to do bulk test configuration. All tags should be declared in the
183-
/// [package configuration file][configuring tags]. The parameter can be an
184-
/// [Iterable] of tag names, or a [String] representing a single tag.
185-
///
186-
/// [configuring tags]: https://github.com/dart-lang/test/blob/master/pkgs/test/doc/configuration.md#configuring-tags
187-
///
188-
/// [onPlatform] allows groups to be configured on a platform-by-platform
189-
/// basis. It's a map from strings that are parsed as [PlatformSelector]s to
190-
/// annotation classes: [Timeout], [Skip], or lists of those. These
191-
/// annotations apply only on the given platforms. For example:
192-
///
193-
/// group('potentially slow tests', () {
194-
/// // ...
195-
/// }, onPlatform: {
196-
/// // These tests are especially slow on Windows.
197-
/// 'windows': Timeout.factor(2),
198-
/// 'browser': [
199-
/// Skip('TODO: add browser support'),
200-
/// // They'll be slow on browsers once it works on them.
201-
/// Timeout.factor(2)
202-
/// ]
203-
/// });
204-
///
205-
/// If multiple platforms match, the annotations apply in order as through
206-
/// they were in nested groups.
207-
///
208-
/// If the `solo` flag is `true`, only tests and groups marked as
209-
/// "solo" will be be run. This only restricts tests *within this test
210-
/// suite*—tests in other suites will run as normal. We recommend that users
211-
/// avoid this flag if possible, and instead use the test runner flag `-n` to
212-
/// filter tests by name.
213-
@isTestGroup
214-
void group(Object? description, dynamic Function() body,
215-
{String? testOn,
216-
Timeout? timeout,
217-
Object? skip,
218-
Object? tags,
219-
Map<String, dynamic>? onPlatform,
220-
int? retry,
221-
@Deprecated('Debug only') bool solo = false}) {
222-
_declarer.group(description.toString(), body,
223-
testOn: testOn,
224-
timeout: timeout,
225-
skip: skip,
226-
tags: tags,
227-
onPlatform: onPlatform,
228-
retry: retry,
229-
solo: solo);
230-
231-
// Force dart2js not to inline this function. We need it to be separate from
232-
// `main()` in JS stack traces in order to properly determine the line and
233-
// column where the test was defined. See sdk#26705.
234-
return;
235-
return; // ignore: dead_code
236-
}
237-
238-
/// Registers a function to be run before tests.
239-
///
240-
/// This function will be called before each test is run. [callback] may be
241-
/// asynchronous; if so, it must return a [Future].
242-
///
243-
/// If this is called within a test group, it applies only to tests in that
244-
/// group. [callback] will be run after any set-up callbacks in parent groups or
245-
/// at the top level.
246-
///
247-
/// Each callback at the top level or in a given group will be run in the order
248-
/// they were declared.
249-
void setUp(dynamic Function() callback) => _declarer.setUp(callback);
250-
251-
/// Registers a function to be run after tests.
252-
///
253-
/// This function will be called after each test is run. [callback] may be
254-
/// asynchronous; if so, it must return a [Future].
255-
///
256-
/// If this is called within a test group, it applies only to tests in that
257-
/// group. [callback] will be run before any tear-down callbacks in parent
258-
/// groups or at the top level.
259-
///
260-
/// Each callback at the top level or in a given group will be run in the
261-
/// reverse of the order they were declared.
262-
///
263-
/// See also [addTearDown], which adds tear-downs to a running test.
264-
void tearDown(dynamic Function() callback) => _declarer.tearDown(callback);
265-
266-
/// Registers a function to be run once before all tests.
267-
///
268-
/// [callback] may be asynchronous; if so, it must return a [Future].
269-
///
270-
/// If this is called within a test group, [callback] will run before all tests
271-
/// in that group. It will be run after any [setUpAll] callbacks in parent
272-
/// groups or at the top level. It won't be run if none of the tests in the
273-
/// group are run.
274-
///
275-
/// **Note**: This function makes it very easy to accidentally introduce hidden
276-
/// dependencies between tests that should be isolated. In general, you should
277-
/// prefer [setUp], and only use [setUpAll] if the callback is prohibitively
278-
/// slow.
279-
void setUpAll(dynamic Function() callback) => _declarer.setUpAll(callback);
280-
281-
/// Registers a function to be run once after all tests.
282-
///
283-
/// If this is called within a test group, [callback] will run after all tests
284-
/// in that group. It will be run before any [tearDownAll] callbacks in parent
285-
/// groups or at the top level. It won't be run if none of the tests in the
286-
/// group are run.
287-
///
288-
/// **Note**: This function makes it very easy to accidentally introduce hidden
289-
/// dependencies between tests that should be isolated. In general, you should
290-
/// prefer [tearDown], and only use [tearDownAll] if the callback is
291-
/// prohibitively slow.
292-
void tearDownAll(dynamic Function() callback) =>
293-
_declarer.tearDownAll(callback);
9+
export 'src/scaffolding.dart';

0 commit comments

Comments
 (0)