• Ian Hickson's avatar
    Move Point to Offset (#9277) · bf017b79
    Ian Hickson authored
    * Manually fix every use of Point.x and Point.y
    
    Some of these were moved to dx/dy, but not all.
    
    * Manually convert uses of the old gradient API
    
    * Remove old reference to Point.
    
    * Mechanical changes
    
    I applied the following at the root of the Flutter repository:
    
    git ls-files -z | xargs -0 sed -i 's/\bPoint[.]origin\b/Offset.zero/g'
    git ls-files -z | xargs -0 sed -i 's/\bPoint[.]lerp\b/Offset.lerp/g'
    git ls-files -z | xargs -0 sed -i 's/\bnew Point\b/new Offset/g'
    git ls-files -z | xargs -0 sed -i 's/\bconst Point\b/const Offset/g'
    git ls-files -z | xargs -0 sed -i 's/\bstatic Point /static Offset /g'
    git ls-files -z | xargs -0 sed -i 's/\bfinal Point /final Offset /g'
    git ls-files -z | xargs -0 sed -i 's/^\( *\)Point /\1Offset /g'
    git ls-files -z | xargs -0 sed -i 's/ui[.]Point\b/ui.Offset/g'
    git ls-files -z | xargs -0 sed -i 's/(Point\b/(Offset/g'
    git ls-files -z | xargs -0 sed -i 's/\([[{,]\) Point\b/\1 Offset/g'
    git ls-files -z | xargs -0 sed -i 's/@required Point\b/@required Offset/g'
    git ls-files -z | xargs -0 sed -i 's/<Point>/<Offset>/g'
    git ls-files -z | xargs -0 sed -i 's/[.]toOffset()//g'
    git ls-files -z | xargs -0 sed -i 's/[.]toPoint()//g'
    git ls-files -z | xargs -0 sed -i 's/\bshow Point, /show /g'
    git ls-files -z | xargs -0 sed -i 's/\bshow Point;/show Offset;/g'
    
    * Mechanical changes - dartdocs
    
    I applied the following at the root of the Flutter repository:
    
    git ls-files -z | xargs -0 sed -i 's/\ba \[Point\]/an [Offset]/g'
    git ls-files -z | xargs -0 sed -i 's/\[Point\]/[Offset]/g'
    
    * Further improvements and a test
    
    * Fix minor errors from rebasing...
    
    * Roll engine
    bf017b79
animated_positioned_test.dart 6.81 KB
// 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/rendering.dart';
import 'package:flutter/widgets.dart';

void main() {
  testWidgets('AnimatedPositioned.fromRect control test', (WidgetTester tester) async {
    final AnimatedPositioned positioned = new AnimatedPositioned.fromRect(
      rect: new Rect.fromLTWH(7.0, 5.0, 12.0, 16.0),
      duration: const Duration(milliseconds: 200),
    );

    expect(positioned.left, equals(7.0));
    expect(positioned.top, equals(5.0));
    expect(positioned.width, equals(12.0));
    expect(positioned.height, equals(16.0));
    expect(positioned, hasOneLineDescription);
  });

  testWidgets('AnimatedPositioned - basics', (WidgetTester tester) async {
    final GlobalKey key = new GlobalKey();

    RenderBox box;

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 50.0,
            top: 30.0,
            width: 70.0,
            height: 110.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0 + 70.0 / 2.0, 30.0 + 110.0 / 2.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0 + 70.0 / 2.0, 30.0 + 110.0 / 2.0)));

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 37.0,
            top: 31.0,
            width: 59.0,
            height: 71.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0 + 70.0 / 2.0, 30.0 + 110.0 / 2.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0 - (50.0 - 37.0) / 2.0 + (70.0 - (70.0 - 59.0) / 2.0) / 2.0,
                                                                                30.0 + (31.0 - 30.0) / 2.0 + (110.0 - (110.0 - 71.0) / 2.0) / 2.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(37.0 + 59.0 / 2.0, 31.0 + 71.0 / 2.0)));
  });

  testWidgets('AnimatedPositioned - interrupted animation', (WidgetTester tester) async {
    final GlobalKey key = new GlobalKey();

    RenderBox box;

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 0.0,
            top: 0.0,
            width: 100.0,
            height: 100.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0, 50.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0, 50.0)));

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 100.0,
            top: 100.0,
            width: 100.0,
            height: 100.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0, 50.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(100.0, 100.0)));

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 150.0,
            top: 150.0,
            width: 100.0,
            height: 100.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(100.0, 100.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(150.0, 150.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(200.0, 200.0)));
  });

  testWidgets('AnimatedPositioned - switching variables', (WidgetTester tester) async {
    final GlobalKey key = new GlobalKey();

    RenderBox box;

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 0.0,
            top: 0.0,
            width: 100.0,
            height: 100.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0, 50.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(50.0, 50.0)));

    await tester.pumpWidget(
      new Stack(
        children: <Widget>[
          new AnimatedPositioned(
            child: new Container(key: key),
            left: 0.0,
            top: 100.0,
            right: 100.0, // 700.0 from the left
            height: 100.0,
            duration: const Duration(seconds: 2)
          )
        ]
      )
    );

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(350.0, 50.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(350.0, 100.0)));

    await tester.pump(const Duration(seconds: 1));

    box = key.currentContext.findRenderObject();
    expect(box.localToGlobal(box.size.center(Offset.zero)), equals(const Offset(350.0, 150.0)));
  });

}