blob: 5975c8426e663279944ea27162180218828bcd08 [file] [log] [blame]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/src/protocol_server.dart';
import 'package:analysis_server/src/services/snippets/dart/flutter_stateful_widget_with_animation.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'test_support.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(FlutterStatefulWidgetWithAnimationControllerTest);
});
}
@reflectiveTest
class FlutterStatefulWidgetWithAnimationControllerTest
extends FlutterSnippetProducerTest {
@override
final generator = FlutterStatefulWidgetWithAnimationController.new;
@override
String get label => FlutterStatefulWidgetWithAnimationController.label;
@override
String get prefix => FlutterStatefulWidgetWithAnimationController.prefix;
Future<void> test_noSuperParams() async {
writeTestPackageConfig(flutter: true, languageVersion: '2.16');
final snippet = await expectValidSnippet('^');
expect(snippet.prefix, prefix);
expect(snippet.label, label);
var code = '';
expect(snippet.change.edits, hasLength(1));
for (var edit in snippet.change.edits) {
code = SourceEdit.applySequence(code, edit.edits);
}
expect(code, '''
import 'package:flutter/src/animation/animation_controller.dart';
import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/ticker_provider.dart';
class MyWidget extends StatefulWidget {
const MyWidget({Key? key}) : super(key: key);
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container();
}
}''');
}
Future<void> test_notValid_notFlutterProject() async {
writeTestPackageConfig();
await expectNotValidSnippet('^');
}
Future<void> test_valid() async {
writeTestPackageConfig(flutter: true);
final snippet = await expectValidSnippet('^');
expect(snippet.prefix, prefix);
expect(snippet.label, label);
var code = '';
expect(snippet.change.edits, hasLength(1));
for (var edit in snippet.change.edits) {
code = SourceEdit.applySequence(code, edit.edits);
}
expect(code, '''
import 'package:flutter/src/animation/animation_controller.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/ticker_provider.dart';
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container();
}
}''');
expect(snippet.change.selection!.file, testFile);
expect(snippet.change.selection!.offset, 759);
expect(snippet.change.selectionLength, 11);
expect(snippet.change.linkedEditGroups.map((group) => group.toJson()), [
{
'positions': [
{'file': testFile, 'offset': 238},
{'file': testFile, 'offset': 280},
{'file': testFile, 'offset': 324},
{'file': testFile, 'offset': 352},
{'file': testFile, 'offset': 379},
{'file': testFile, 'offset': 407},
],
'length': 8,
'suggestions': []
}
]);
}
}