mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

Adds the channel to docs generation for dartpad samples, since the new query parameter was added in dart-lang/dart-pad#1462
205 lines
6.5 KiB
Dart
205 lines
6.5 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:convert';
|
|
import 'dart:io' hide Platform;
|
|
import 'package:path/path.dart' as path;
|
|
|
|
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
|
|
|
|
import 'package:snippets/configuration.dart';
|
|
import 'package:snippets/snippets.dart';
|
|
|
|
void main() {
|
|
group('Generator', () {
|
|
Configuration configuration;
|
|
SnippetGenerator generator;
|
|
Directory tmpDir;
|
|
File template;
|
|
|
|
setUp(() {
|
|
tmpDir = Directory.systemTemp.createTempSync('flutter_snippets_test.');
|
|
configuration = Configuration(flutterRoot: Directory(path.join(
|
|
tmpDir.absolute.path, 'flutter')));
|
|
configuration.createOutputDirectory();
|
|
configuration.templatesDirectory.createSync(recursive: true);
|
|
configuration.skeletonsDirectory.createSync(recursive: true);
|
|
template = File(path.join(configuration.templatesDirectory.path, 'template.tmpl'));
|
|
template.writeAsStringSync('''
|
|
// Flutter code sample for {{element}}
|
|
|
|
{{description}}
|
|
|
|
{{code-my-preamble}}
|
|
|
|
main() {
|
|
{{code}}
|
|
}
|
|
''');
|
|
configuration.getHtmlSkeletonFile(SnippetType.sample).writeAsStringSync('''
|
|
<div>HTML Bits</div>
|
|
{{description}}
|
|
<pre>{{code}}</pre>
|
|
<pre>{{app}}</pre>
|
|
<div>More HTML Bits</div>
|
|
''');
|
|
configuration.getHtmlSkeletonFile(SnippetType.snippet).writeAsStringSync('''
|
|
<div>HTML Bits</div>
|
|
{{description}}
|
|
<pre>{{code}}</pre>
|
|
<div>More HTML Bits</div>
|
|
''');
|
|
configuration.getHtmlSkeletonFile(SnippetType.sample, showDartPad: true).writeAsStringSync('''
|
|
<div>HTML Bits (DartPad-style)</div>
|
|
<iframe class="snippet-dartpad" src="https://dartpad.dev/embed-flutter.html?split=60&run=true&sample_id={{id}}&sample_channel={{channel}}"></iframe>
|
|
<div>More HTML Bits</div>
|
|
''');
|
|
generator = SnippetGenerator(configuration: configuration);
|
|
});
|
|
tearDown(() {
|
|
tmpDir.deleteSync(recursive: true);
|
|
});
|
|
|
|
test('generates samples', () async {
|
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(r'''
|
|
A description of the snippet.
|
|
|
|
On several lines.
|
|
|
|
```my-dart_language my-preamble
|
|
const String name = 'snippet';
|
|
```
|
|
|
|
```dart
|
|
void main() {
|
|
print('The actual $name.');
|
|
}
|
|
```
|
|
''');
|
|
final File outputFile = File(path.join(tmpDir.absolute.path, 'snippet_out.txt'));
|
|
|
|
final String html = generator.generate(
|
|
inputFile,
|
|
SnippetType.sample,
|
|
template: 'template',
|
|
metadata: <String, Object>{
|
|
'id': 'id',
|
|
'channel': 'stable',
|
|
'element': 'MyElement',
|
|
},
|
|
output: outputFile,
|
|
);
|
|
expect(html, contains('<div>HTML Bits</div>'));
|
|
expect(html, contains('<div>More HTML Bits</div>'));
|
|
expect(html, contains(r'print('The actual $name.');'));
|
|
expect(html, contains('A description of the snippet.\n'));
|
|
expect(html, isNot(contains('sample_channel=stable')));
|
|
expect(
|
|
html,
|
|
contains('// A description of the snippet.\n'
|
|
'//\n'
|
|
'// On several lines.\n'));
|
|
expect(html, contains('void main() {'));
|
|
|
|
final String outputContents = outputFile.readAsStringSync();
|
|
expect(outputContents, contains('// Flutter code sample for MyElement'));
|
|
expect(outputContents, contains('A description of the snippet.'));
|
|
expect(outputContents, contains('void main() {'));
|
|
expect(outputContents, contains("const String name = 'snippet';"));
|
|
});
|
|
|
|
test('generates snippets', () async {
|
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(r'''
|
|
A description of the snippet.
|
|
|
|
On several lines.
|
|
|
|
```code
|
|
void main() {
|
|
print('The actual $name.');
|
|
}
|
|
```
|
|
''');
|
|
|
|
final String html = generator.generate(
|
|
inputFile,
|
|
SnippetType.snippet,
|
|
metadata: <String, Object>{'id': 'id'},
|
|
);
|
|
expect(html, contains('<div>HTML Bits</div>'));
|
|
expect(html, contains('<div>More HTML Bits</div>'));
|
|
expect(html, contains(r' print('The actual $name.');'));
|
|
expect(html, contains('<div class="snippet-description">{@end-inject-html}A description of the snippet.\n\n'
|
|
'On several lines.{@inject-html}</div>\n'));
|
|
expect(html, contains('main() {'));
|
|
});
|
|
|
|
test('generates dartpad samples', () async {
|
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(r'''
|
|
A description of the snippet.
|
|
|
|
On several lines.
|
|
|
|
```code
|
|
void main() {
|
|
print('The actual $name.');
|
|
}
|
|
```
|
|
''');
|
|
|
|
final String html = generator.generate(
|
|
inputFile,
|
|
SnippetType.sample,
|
|
showDartPad: true,
|
|
template: 'template',
|
|
metadata: <String, Object>{'id': 'id', 'channel': 'stable'},
|
|
);
|
|
expect(html, contains('<div>HTML Bits (DartPad-style)</div>'));
|
|
expect(html, contains('<div>More HTML Bits</div>'));
|
|
expect(html, contains('<iframe class="snippet-dartpad" src="https://dartpad.dev/embed-flutter.html?split=60&run=true&sample_id=id&sample_channel=stable"></iframe>'));
|
|
});
|
|
|
|
test('generates sample metadata', () async {
|
|
final File inputFile = File(path.join(tmpDir.absolute.path, 'snippet_in.txt'))
|
|
..createSync(recursive: true)
|
|
..writeAsStringSync(r'''
|
|
A description of the snippet.
|
|
|
|
On several lines.
|
|
|
|
```code
|
|
void main() {
|
|
print('The actual $name.');
|
|
}
|
|
```
|
|
''');
|
|
|
|
final File outputFile = File(path.join(tmpDir.absolute.path, 'snippet_out.dart'));
|
|
final File expectedMetadataFile = File(path.join(tmpDir.absolute.path, 'snippet_out.json'));
|
|
|
|
generator.generate(
|
|
inputFile,
|
|
SnippetType.sample,
|
|
template: 'template',
|
|
output: outputFile,
|
|
metadata: <String, Object>{'sourcePath': 'some/path.dart', 'id': 'id', 'channel': 'stable'},
|
|
);
|
|
expect(expectedMetadataFile.existsSync(), isTrue);
|
|
final Map<String, dynamic> json = jsonDecode(expectedMetadataFile.readAsStringSync()) as Map<String, dynamic>;
|
|
expect(json['id'], equals('id'));
|
|
expect(json['channel'], equals('stable'));
|
|
expect(json['file'], equals('snippet_out.dart'));
|
|
expect(json['description'], equals('A description of the snippet.\n\nOn several lines.'));
|
|
// Ensure any passed metadata is included in the output JSON too.
|
|
expect(json['sourcePath'], equals('some/path.dart'));
|
|
});
|
|
});
|
|
}
|