@@ -65,8 +65,8 @@ void main() {
6565 test ('Expect no error when multiple generators used on nonstandalone builder' ,
6666 () async {
6767 expect (
68- () =>
69- new PartBuilder ( [const CommentGenerator (), const _NoOpGenerator ()]),
68+ () => new PartBuilder (
69+ [const CommentGenerator (), const _LiteralGenerator ()]),
7070 returnsNormally);
7171 });
7272
@@ -103,9 +103,9 @@ void main() {
103103 const CommentGenerator (forClasses: true , forLibrary: true ),
104104 _testGenPartContentForClassesAndLibrary));
105105
106- test ('No-op generator produces no generated parts' , () async {
106+ test ('null result produces no generated parts' , () async {
107107 var srcs = _createPackageStub ();
108- var builder = new PartBuilder ([ const _NoOpGenerator ()] );
108+ var builder = _unformattedLiteral ( );
109109 await testBuilder (builder, srcs, outputs: {});
110110 });
111111
@@ -133,6 +133,38 @@ void main() {
133133 expect (logs, ['Missing "part \' test_lib.g.dart\' ;".' ]);
134134 });
135135
136+ test ('generator with an empty result creates no outputs' , () async {
137+ var srcs = _createPackageStub (testLibContent: _testLibContentNoPart);
138+ var builder = _unformattedLiteral ('' );
139+ await testBuilder (
140+ builder,
141+ srcs,
142+ outputs: {},
143+ );
144+ });
145+
146+ test ('generator with whitespace-only result has no outputs' , () async {
147+ var srcs = _createPackageStub (testLibContent: _testLibContentNoPart);
148+ var builder = _unformattedLiteral ('\n \n ' );
149+ await testBuilder (
150+ builder,
151+ srcs,
152+ outputs: {},
153+ );
154+ });
155+
156+ test ('generator result with wrapping whitespace is trimmed' , () async {
157+ var srcs = _createPackageStub (testLibContent: _testLibContent);
158+ var builder = _unformattedLiteral ('\n // hello\n ' );
159+ await testBuilder (
160+ builder,
161+ srcs,
162+ outputs: {
163+ '$_pkgName |lib/test_lib.g.dart' : _whitespaceTrimmed,
164+ },
165+ );
166+ });
167+
136168 test ('defaults to formatting generated code with the DartFormatter' ,
137169 () async {
138170 await testBuilder (new PartBuilder ([const UnformattedCodeGenerator ()]),
@@ -191,15 +223,15 @@ void main() {
191223 });
192224
193225 test ('Should have a readable toString() message for builders' , () {
194- final builder = new LibraryBuilder (const _NoOpGenerator ());
195- expect (builder.toString (), 'Generating .g.dart: _NoOpGenerator ' );
226+ final builder = new LibraryBuilder (const _LiteralGenerator ());
227+ expect (builder.toString (), 'Generating .g.dart: _LiteralGenerator ' );
196228
197229 final builders = new PartBuilder ([
198- const _NoOpGenerator (),
199- const _NoOpGenerator (),
230+ const _LiteralGenerator (),
231+ const _LiteralGenerator (),
200232 ]);
201233 expect (builders.toString (),
202- 'Generating .g.dart: _NoOpGenerator, _NoOpGenerator ' );
234+ 'Generating .g.dart: _LiteralGenerator, _LiteralGenerator ' );
203235 });
204236}
205237
@@ -223,12 +255,17 @@ Map<String, String> _createPackageStub(
223255 };
224256}
225257
226- /// Doesn't generate output for any element
227- class _NoOpGenerator extends Generator {
228- const _NoOpGenerator ();
258+ PartBuilder _unformattedLiteral ([String content]) =>
259+ new PartBuilder ([new _LiteralGenerator (content)], formatOutput: (s) => s);
260+
261+ /// Returns the [String] provided in the constructor, or `null` .
262+ class _LiteralGenerator extends Generator {
263+ final String _content;
264+
265+ const _LiteralGenerator ([this ._content]);
229266
230267 @override
231- Future <String > generate (LibraryReader library, _ ) => null ;
268+ FutureOr <String > generate (_, __ ) => _content ;
232269}
233270
234271class _BadOutputGenerator extends Generator {
@@ -341,3 +378,14 @@ part of 'test_lib.dart';
341378
342379// Code for "class A"
343380''' ;
381+
382+ const _whitespaceTrimmed = r'''// GENERATED CODE - DO NOT MODIFY BY HAND
383+
384+ part of test_lib;
385+
386+ // **************************************************************************
387+ // _LiteralGenerator
388+ // **************************************************************************
389+
390+ // hello
391+ ''' ;
0 commit comments