Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions sky/packages/sky/lib/src/fn3/scrollable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -312,10 +312,9 @@ abstract class ScrollableWidgetList extends Scrollable {
assert(itemExtent != null);
}

EdgeDims padding;
bool itemsWrap;
double itemExtent;
Size containerSize = Size.zero;
final bool itemsWrap;
final double itemExtent;
final EdgeDims padding;
}

abstract class ScrollableWidgetListState<T extends ScrollableWidgetList> extends ScrollableState<T> {
Expand All @@ -324,6 +323,8 @@ abstract class ScrollableWidgetListState<T extends ScrollableWidgetList> extends
int get itemCount;
int _previousItemCount;

Size _containerSize = Size.zero;

void didUpdateConfig(T oldConfig) {
super.didUpdateConfig(oldConfig);

Expand Down Expand Up @@ -351,13 +352,13 @@ abstract class ScrollableWidgetListState<T extends ScrollableWidgetList> extends

double get _containerExtent {
return config.scrollDirection == ScrollDirection.vertical
? config.containerSize.height
: config.containerSize.width;
? _containerSize.height
: _containerSize.width;
}

void _handleSizeChanged(Size newSize) {
setState(() {
config.containerSize = newSize;
_containerSize = newSize;
_updateScrollBehavior();
});
}
Expand Down Expand Up @@ -501,9 +502,11 @@ class PageableList<T> extends ScrollableList<T> {
padding: padding
);

Duration duration;
Curve curve;
PageChangedCallback pageChanged;
final Duration duration;
final Curve curve;
final PageChangedCallback pageChanged;

PageableListState<T> createState() => new PageableListState();
}

class PageableListState<T> extends ScrollableListState<T, PageableList<T>> {
Expand Down
27 changes: 27 additions & 0 deletions sky/unit/test/fn3/widget_tester.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@ class WidgetTester {
}


List<Layer> _layers(Layer layer) {
List<Layer> result = [layer];
if (layer is ContainerLayer) {
ContainerLayer root = layer;
Layer child = root.firstChild;
while(child != null) {
result.addAll(_layers(child));
child = child.nextSibling;
}
}
return result;
}
List<Layer> get layers => _layers(SkyBinding.instance.renderView.layer);


void walkElements(ElementVisitor visitor) {
void walk(Element element) {
visitor(element);
Expand Down Expand Up @@ -110,6 +125,18 @@ class WidgetTester {
_dispatchEvent(p.up(), result);
}

void scroll(Element element, Offset offset, { int pointer: 1 }) {
Point startLocation = getCenter(element);
Point endLocation = startLocation + offset;
TestPointer p = new TestPointer(pointer);
// Events for the entire press-drag-release gesture are dispatched
// to the widgets "hit" by the pointer down event.
HitTestResult result = _hitTest(startLocation);
_dispatchEvent(p.down(startLocation), result);
_dispatchEvent(p.move(endLocation), result);
_dispatchEvent(p.up(), result);
}

void dispatchEvent(sky.Event event, Point location) {
_dispatchEvent(event, _hitTest(location));
}
Expand Down
15 changes: 6 additions & 9 deletions sky/unit/test/widget/progress_indicator_test.dart
Original file line number Diff line number Diff line change
@@ -1,24 +1,21 @@

import 'package:sky/rendering.dart';
import 'package:sky/widgets.dart';
import 'package:sky/src/fn3.dart';
import 'package:test/test.dart';

import 'widget_tester.dart';
import '../fn3/widget_tester.dart';

void main() {
test('LinearProgressIndicator changes when its value changes', () {
WidgetTester tester = new WidgetTester();

tester.pumpFrame(() {
return new Block([new LinearProgressIndicator(value: 0.0)]);
});
tester.pumpFrame(new Block([new LinearProgressIndicator(value: 0.0)]));

List<Layer> layers1 = tester.layers;

tester.pumpFrame(() {
return new Block([new LinearProgressIndicator(value: 0.5)]);
});
List<Layer> layers2 = tester.layers;
tester.pumpFrame(new Block([new LinearProgressIndicator(value: 0.5)]));

List<Layer> layers2 = tester.layers;
expect(layers1, isNot(equals(layers2)));
});
}
47 changes: 31 additions & 16 deletions sky/unit/test/widget/set_state_3_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,55 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:sky/src/widgets/basic.dart';
import 'package:sky/src/widgets/framework.dart';
import 'package:sky/src/fn3.dart';
import 'package:test/test.dart';
import 'widget_tester.dart';

Changer changer;
import '../fn3/widget_tester.dart';

ChangerState changer;

class Changer extends StatefulComponent {
Changer(this.child);
Widget child;
void syncConstructorArguments(Changer source) {
child = source.child;
}

final Widget child;

ChangerState createState() => new ChangerState();
}

class ChangerState extends State<Changer> {
bool _state = false;
void initState() { changer = this; }

void initState(BuildContext context) {
super.initState(context);
changer = this;
}

void test() { setState(() { _state = true; }); }
Widget build() => _state ? new Wrapper(child) : child;

Widget build(BuildContext) => _state ? new Wrapper(config.child) : config.child;
}

class Wrapper extends Component {
class Wrapper extends StatelessComponent {
Wrapper(this.child);

final Widget child;
Widget build() => child;

Widget build(BuildContext context) => child;
}

class Leaf extends StatefulComponent {
void syncConstructorArguments(Leaf source) { }
Widget build() => new Text("leaf");
LeafState createState() => new LeafState();
}

class LeafState extends State<Leaf> {
Widget build(BuildContext context) => new Text("leaf");
}

void main() {
test('three-way setState() smoke test', () {
WidgetTester tester = new WidgetTester();
tester.pumpFrame(() => new Changer(new Wrapper(new Leaf())));
tester.pumpFrame(() => new Changer(new Wrapper(new Leaf())));
tester.pumpFrame(new Changer(new Wrapper(new Leaf())));
tester.pumpFrame(new Changer(new Wrapper(new Leaf())));
changer.test();
tester.pumpFrameWithoutChange();
});
Expand Down
42 changes: 19 additions & 23 deletions sky/unit/test/widget/set_state_test.dart
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import 'package:sky/widgets.dart';
import 'package:sky/src/fn3.dart';
import 'package:test/test.dart';

import '../engine/mock_events.dart';
import 'widget_tester.dart';
import '../fn3/widget_tester.dart';

class Inside extends StatefulComponent {
void syncConstructorArguments(Inside source) {
}
InsideState createState() => new InsideState();
}

Widget build() {
class InsideState extends State<Inside> {
Widget build(BuildContext context) {
return new Listener(
onPointerDown: _handlePointerDown,
child: new Text('INSIDE')
Expand All @@ -21,50 +22,45 @@ class Inside extends StatefulComponent {
}

class Middle extends StatefulComponent {
Inside child;

Middle({ this.child });

void syncConstructorArguments(Middle source) {
child = source.child;
}
final Inside child;

Widget build() {
MiddleState createState() => new MiddleState();
}

class MiddleState extends State<Middle> {
Widget build(BuildContext context) {
return new Listener(
onPointerDown: _handlePointerDown,
child: child
child: config.child
);
}

void _handlePointerDown(_) {
setState(() { });
}
}

class Outside extends StatefulComponent {
OutsideState createState() => new OutsideState();
}

class Outside extends App {
Widget build() {
class OutsideState extends State<Outside> {
Widget build(BuildContext context) {
return new Middle(child: new Inside());
}
}

void main() {
test('setState() smoke test', () {
WidgetTester tester = new WidgetTester();

tester.pumpFrame(() {
return new Outside();
});

tester.pumpFrame(new Outside());
TestPointer pointer = new TestPointer(1);
Point location = tester.getCenter(tester.findText('INSIDE'));
tester.dispatchEvent(pointer.down(location), location);

tester.pumpFrameWithoutChange();

tester.dispatchEvent(pointer.up(), location);

tester.pumpFrameWithoutChange();

});
}
59 changes: 31 additions & 28 deletions sky/unit/test/widget/stack_test.dart
Original file line number Diff line number Diff line change
@@ -1,43 +1,47 @@
import 'package:sky/widgets.dart';
import 'package:sky/src/fn3.dart';
import 'package:test/test.dart';

import 'widget_tester.dart';
import '../fn3/widget_tester.dart';

void main() {
test('Can change position data', () {
WidgetTester tester = new WidgetTester();

tester.pumpFrame(() {
return new Stack([
Key key = new Key('container');

tester.pumpFrame(
new Stack([
new Positioned(
left: 10.0,
child: new Container(
key: key,
width: 10.0,
height: 10.0
)
)
]);
});
])
);

Container container = tester.findWidget((Widget widget) => widget is Container);
Element container = tester.findElementByKey(key);
expect(container.renderObject.parentData.top, isNull);
expect(container.renderObject.parentData.right, isNull);
expect(container.renderObject.parentData.bottom, isNull);
expect(container.renderObject.parentData.left, equals(10.0));

tester.pumpFrame(() {
return new Stack([
tester.pumpFrame(
new Stack([
new Positioned(
right: 10.0,
child: new Container(
key: key,
width: 10.0,
height: 10.0
)
)
]);
});
])
);

container = tester.findWidget((Widget widget) => widget is Container);
container = tester.findElementByKey(key);
expect(container.renderObject.parentData.top, isNull);
expect(container.renderObject.parentData.right, equals(10.0));
expect(container.renderObject.parentData.bottom, isNull);
Expand All @@ -46,26 +50,25 @@ void main() {

test('Can remove parent data', () {
WidgetTester tester = new WidgetTester();
Container container;

tester.pumpFrame(() {
container = new Container(width: 10.0, height: 10.0);
return new Stack([ new Positioned(left: 10.0, child: container) ]);
});
Key key = new Key('container');
Container container = new Container(key: key, width: 10.0, height: 10.0);

expect(container.renderObject.parentData.top, isNull);
expect(container.renderObject.parentData.right, isNull);
expect(container.renderObject.parentData.bottom, isNull);
expect(container.renderObject.parentData.left, equals(10.0));
tester.pumpFrame(new Stack([ new Positioned(left: 10.0, child: container) ]));
Element containerElement = tester.findElementByKey(key);

tester.pumpFrame(() {
return new Stack([ container ]);
});
expect(containerElement.renderObject.parentData.top, isNull);
expect(containerElement.renderObject.parentData.right, isNull);
expect(containerElement.renderObject.parentData.bottom, isNull);
expect(containerElement.renderObject.parentData.left, equals(10.0));

expect(container.renderObject.parentData.top, isNull);
expect(container.renderObject.parentData.right, isNull);
expect(container.renderObject.parentData.bottom, isNull);
expect(container.renderObject.parentData.left, isNull);
tester.pumpFrame(new Stack([ container ]));
containerElement = tester.findElementByKey(key);

expect(containerElement.renderObject.parentData.top, isNull);
expect(containerElement.renderObject.parentData.right, isNull);
expect(containerElement.renderObject.parentData.bottom, isNull);
expect(containerElement.renderObject.parentData.left, isNull);
});

}
Loading