slivers_layout_test.dart 2.11 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
// 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/rendering.dart';
import 'package:test/test.dart';

import 'rendering_tester.dart';

int layouts = 0;

class RenderLayoutWatcher extends RenderProxyBox {
  RenderLayoutWatcher(RenderBox child) : super(child);
  @override
  void performLayout() {
    layouts += 1;
    super.performLayout();
  }
}

void main() {
  test('RenderViewport2 basic test - impact of layout', () {
    RenderSliverToBoxAdapter sliver;
    RenderViewport2 viewport;
    RenderBox box;
    RenderObject root = new RenderLayoutWatcher(
      viewport = new RenderViewport2(
Ian Hickson's avatar
Ian Hickson committed
28
        offset: new ViewportOffset.zero(),
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
        children: <RenderSliver>[
          sliver = new RenderSliverToBoxAdapter(child: box = new RenderSizedBox(const Size(100.0, 400.0))),
        ],
      ),
    );
    expect(layouts, 0);
    layout(root);
    expect(layouts, 1);
    expect(box.localToGlobal(box.size.center(Point.origin)), const Point(400.0, 200.0));

    sliver.child = box = new RenderSizedBox(const Size(100.0, 300.0));
    expect(layouts, 1);
    pumpFrame();
    expect(layouts, 1);
    expect(box.localToGlobal(box.size.center(Point.origin)), const Point(400.0, 150.0));

    viewport.offset = new ViewportOffset.fixed(20.0);
    expect(layouts, 1);
    pumpFrame();
    expect(layouts, 1);
    expect(box.localToGlobal(box.size.center(Point.origin)), const Point(400.0, 130.0));

    viewport.offset = new ViewportOffset.fixed(-20.0);
    expect(layouts, 1);
    pumpFrame();
    expect(layouts, 1);
    expect(box.localToGlobal(box.size.center(Point.origin)), const Point(400.0, 170.0));

    viewport.anchor = 20.0 / 600.0;
    expect(layouts, 1);
    pumpFrame();
    expect(layouts, 1);
    expect(box.localToGlobal(box.size.center(Point.origin)), const Point(400.0, 190.0));

    viewport.axisDirection = AxisDirection.up;
    expect(layouts, 1);
    pumpFrame();
    expect(layouts, 1);
    expect(box.localToGlobal(box.size.center(Point.origin)), const Point(400.0, 600.0 - 190.0));
  });

}