flutter/packages/flutter/test/widget/stateful_components_test.dart
Adam Barth 1ff7109b02 Mark State.setState as protected (#4295)
This required refactoring some cases where we weren't following the rules for
the protected annotation.
2016-06-02 10:46:12 -07:00

87 lines
2.5 KiB
Dart

// Copyright 2015 The Chromium 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 'package:flutter_test/flutter_test.dart';
import 'package:flutter/widgets.dart';
class InnerWidget extends StatefulWidget {
InnerWidget({ Key key }) : super(key: key);
@override
InnerWidgetState createState() => new InnerWidgetState();
}
class InnerWidgetState extends State<InnerWidget> {
bool _didInitState = false;
@override
void initState() {
super.initState();
_didInitState = true;
}
@override
Widget build(BuildContext context) {
return new Container();
}
}
class OuterContainer extends StatefulWidget {
OuterContainer({ Key key, this.child }) : super(key: key);
final InnerWidget child;
@override
OuterContainerState createState() => new OuterContainerState();
}
class OuterContainerState extends State<OuterContainer> {
@override
Widget build(BuildContext context) {
return config.child;
}
}
void main() {
testWidgets('resync stateful widget', (WidgetTester tester) async {
Key innerKey = new Key('inner');
Key outerKey = new Key('outer');
InnerWidget inner1 = new InnerWidget(key: innerKey);
InnerWidget inner2;
OuterContainer outer1 = new OuterContainer(key: outerKey, child: inner1);
OuterContainer outer2;
await tester.pumpWidget(outer1);
StatefulElement innerElement = tester.element(find.byKey(innerKey));
InnerWidgetState innerElementState = innerElement.state;
expect(innerElementState.config, equals(inner1));
expect(innerElementState._didInitState, isTrue);
expect(innerElement.renderObject.attached, isTrue);
inner2 = new InnerWidget(key: innerKey);
outer2 = new OuterContainer(key: outerKey, child: inner2);
await tester.pumpWidget(outer2);
expect(tester.element(find.byKey(innerKey)), equals(innerElement));
expect(innerElement.state, equals(innerElementState));
expect(innerElementState.config, equals(inner2));
expect(innerElementState._didInitState, isTrue);
expect(innerElement.renderObject.attached, isTrue);
StatefulElement outerElement = tester.element(find.byKey(outerKey));
expect(outerElement.state.config, equals(outer2));
outerElement.markNeedsBuild();
await tester.pump();
expect(tester.element(find.byKey(innerKey)), equals(innerElement));
expect(innerElement.state, equals(innerElementState));
expect(innerElementState.config, equals(inner2));
expect(innerElement.renderObject.attached, isTrue);
});
}