blob: a410e05141f75615a387b95f478b949e7d17744b [file] [log] [blame]
import 'package:sky/widgets.dart';
import 'package:test/test.dart';
import 'build_utils.dart';
void main() {
test('Global keys notify add and remove', () {
GlobalKey globalKey = new GlobalKey();
Container container;
bool syncListenerCalled = false;
bool removeListenerCalled = false;
void syncListener(GlobalKey key, Widget widget) {
syncListenerCalled = true;
expect(key, equals(globalKey));
expect(container, isNotNull);
expect(widget, equals(container));
}
void removeListener(GlobalKey key) {
removeListenerCalled = true;
expect(key, equals(globalKey));
}
WidgetTester tester = new WidgetTester();
GlobalKey.registerSyncListener(globalKey, syncListener);
GlobalKey.registerRemoveListener(globalKey, removeListener);
tester.pumpFrame(() {
container = new Container(key: globalKey);
return container;
});
expect(syncListenerCalled, isTrue);
expect(removeListenerCalled, isFalse);
syncListenerCalled = false;
removeListenerCalled = false;
tester.pumpFrame(() => new Container());
expect(syncListenerCalled, isFalse);
expect(removeListenerCalled, isTrue);
syncListenerCalled = false;
removeListenerCalled = false;
GlobalKey.unregisterSyncListener(globalKey, syncListener);
GlobalKey.unregisterRemoveListener(globalKey, removeListener);
tester.pumpFrame(() {
container = new Container(key: globalKey);
return container;
});
expect(syncListenerCalled, isFalse);
expect(removeListenerCalled, isFalse);
tester.pumpFrame(() => new Container());
expect(syncListenerCalled, isFalse);
expect(removeListenerCalled, isFalse);
});
test('Global key reparenting', () {
GlobalKey globalKey = new GlobalKey();
bool syncListenerCalled = false;
bool removeListenerCalled = false;
void syncListener(GlobalKey key, Widget widget) {
syncListenerCalled = true;
}
void removeListener(GlobalKey key) {
removeListenerCalled = true;
}
GlobalKey.registerSyncListener(globalKey, syncListener);
GlobalKey.registerRemoveListener(globalKey, removeListener);
WidgetTester tester = new WidgetTester();
tester.pumpFrame(() {
return new Container(
child: new Container(
key: globalKey
)
);
});
expect(syncListenerCalled, isTrue);
expect(removeListenerCalled, isFalse);
tester.pumpFrame(() {
return new Container(
key: globalKey,
child: new Container()
);
});
expect(syncListenerCalled, isTrue);
expect(removeListenerCalled, isFalse);
tester.pumpFrame(() {
return new Container(
child: new Container(
key: globalKey
)
);
});
expect(syncListenerCalled, isTrue);
expect(removeListenerCalled, isFalse);
GlobalKey.unregisterSyncListener(globalKey, syncListener);
GlobalKey.unregisterRemoveListener(globalKey, removeListener);
});
test('Global key mutate during iteration', () {
GlobalKey globalKey = new GlobalKey();
bool syncListenerCalled = false;
bool removeListenerCalled = false;
void syncListener(GlobalKey key, Widget widget) {
GlobalKey.unregisterSyncListener(globalKey, syncListener);
syncListenerCalled = true;
}
void removeListener(GlobalKey key) {
GlobalKey.unregisterRemoveListener(globalKey, removeListener);
removeListenerCalled = true;
}
GlobalKey.registerSyncListener(globalKey, syncListener);
GlobalKey.registerRemoveListener(globalKey, removeListener);
WidgetTester tester = new WidgetTester();
tester.pumpFrame(() {
return new Container(key: globalKey);
});
expect(syncListenerCalled, isTrue);
expect(removeListenerCalled, isFalse);
syncListenerCalled = false;
removeListenerCalled = false;
tester.pumpFrame(() {
return new Container();
});
expect(syncListenerCalled, isFalse);
expect(removeListenerCalled, isTrue);
syncListenerCalled = false;
removeListenerCalled = false;
tester.pumpFrame(() {
return new Container(key: globalKey);
});
expect(syncListenerCalled, isFalse);
expect(removeListenerCalled, isFalse);
});
}