| // Copyright 2014 The Flutter 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/painting.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| import '../rendering/mock_canvas.dart'; |
| |
| |
| const Rect canvasRect = Rect.fromLTWH(0, 0, 100, 100); |
| const BorderSide borderSide = BorderSide(width: 4, color: Color(0x0f00ff00)); |
| |
| // Test points for rectangular filled paths based on a BorderSide with width 4 and |
| // a 100x100 bounding rectangle (canvasRect). |
| List<Offset> rectIncludes(Rect r) { |
| return <Offset>[r.topLeft, r.topRight, r.bottomLeft, r.bottomRight, r.center]; |
| } |
| final List<Offset> leftRectIncludes = rectIncludes(const Rect.fromLTWH(0, 0, 4, 100)); |
| final List<Offset> rightRectIncludes = rectIncludes(const Rect.fromLTWH(96, 0, 4, 100)); |
| final List<Offset> topRectIncludes = rectIncludes(const Rect.fromLTWH(0, 0, 100, 4)); |
| final List<Offset> bottomRectIncludes = rectIncludes(const Rect.fromLTWH(0, 96, 100, 4)); |
| |
| |
| void main() { |
| test('LinearBorderEdge defaults', () { |
| expect(const LinearBorderEdge().size, 1); |
| expect(const LinearBorderEdge().alignment, 0); |
| }); |
| |
| test('LinearBorder defaults', () { |
| void expectEmptyBorder(LinearBorder border) { |
| expect(border.side, BorderSide.none); |
| expect(border.dimensions, EdgeInsets.zero); |
| expect(border.preferPaintInterior, false); |
| expect(border.start, null); |
| expect(border.end, null); |
| expect(border.top, null); |
| expect(border.bottom, null); |
| } |
| expectEmptyBorder(LinearBorder.none); |
| |
| expect(LinearBorder.start().side, BorderSide.none); |
| expect(LinearBorder.start().start, const LinearBorderEdge()); |
| expect(LinearBorder.start().end, null); |
| expect(LinearBorder.start().top, null); |
| expect(LinearBorder.start().bottom, null); |
| |
| expect(LinearBorder.end().side, BorderSide.none); |
| expect(LinearBorder.end().start, null); |
| expect(LinearBorder.end().end, const LinearBorderEdge()); |
| expect(LinearBorder.end().top, null); |
| expect(LinearBorder.end().bottom, null); |
| |
| expect(LinearBorder.top().side, BorderSide.none); |
| expect(LinearBorder.top().start, null); |
| expect(LinearBorder.top().end, null); |
| expect(LinearBorder.top().top, const LinearBorderEdge()); |
| expect(LinearBorder.top().bottom, null); |
| |
| expect(LinearBorder.bottom().side, BorderSide.none); |
| expect(LinearBorder.bottom().start, null); |
| expect(LinearBorder.bottom().end, null); |
| expect(LinearBorder.bottom().top, null); |
| expect(LinearBorder.bottom().bottom, const LinearBorderEdge()); |
| }); |
| |
| test('LinearBorder copyWith, ==, hashCode', () { |
| expect(LinearBorder.none, LinearBorder.none.copyWith()); |
| expect(LinearBorder.none.hashCode, LinearBorder.none.copyWith().hashCode); |
| const BorderSide side = BorderSide(width: 10.0, color: Color(0xff123456)); |
| expect(LinearBorder.none.copyWith(side: side), const LinearBorder(side: side)); |
| }); |
| |
| test('LinearBorderEdge, LinearBorder toString()', () { |
| expect(const LinearBorderEdge(size: 0.5, alignment: -0.5).toString(), 'LinearBorderEdge(size: 0.5, alignment: -0.5)'); |
| expect(LinearBorder.none.toString(), 'LinearBorder.none'); |
| const BorderSide side = BorderSide(width: 10.0, color: Color(0xff123456)); |
| expect(const LinearBorder(side: side).toString(), 'LinearBorder(side: BorderSide(color: Color(0xff123456), width: 10.0))'); |
| expect( |
| const LinearBorder( |
| side: side, |
| start: LinearBorderEdge(size: 0, alignment: -0.75), |
| end: LinearBorderEdge(size: 0.25, alignment: -0.5), |
| top: LinearBorderEdge(size: 0.5, alignment: 0.5), |
| bottom: LinearBorderEdge(size: 0.75, alignment: 0.75), |
| ).toString(), |
| 'LinearBorder(' |
| 'side: BorderSide(color: Color(0xff123456), width: 10.0), ' |
| 'start: LinearBorderEdge(size: 0.0, alignment: -0.75), ' |
| 'end: LinearBorderEdge(size: 0.25, alignment: -0.5), ' |
| 'top: LinearBorderEdge(size: 0.5, alignment: 0.5), ' |
| 'bottom: LinearBorderEdge(size: 0.75, alignment: 0.75))', |
| ); |
| }, |
| skip: isBrowser, // [intended] see https://github.com/flutter/flutter/issues/118207 |
| ); |
| |
| test('LinearBorder.start()', () { |
| final LinearBorder border = LinearBorder.start(side: borderSide); |
| expect( |
| (Canvas canvas) => border.paint(canvas, canvasRect, textDirection: TextDirection.ltr), |
| paints |
| ..path( |
| includes: leftRectIncludes, |
| excludes: rightRectIncludes, |
| color: borderSide.color, |
| ), |
| ); |
| expect( |
| (Canvas canvas) => border.paint(canvas, canvasRect, textDirection: TextDirection.rtl), |
| paints |
| ..path( |
| includes: rightRectIncludes, |
| excludes: leftRectIncludes, |
| color: borderSide.color, |
| ), |
| ); |
| }); |
| |
| test('LinearBorder.end()', () { |
| final LinearBorder border = LinearBorder.end(side: borderSide); |
| expect( |
| (Canvas canvas) => border.paint(canvas, canvasRect, textDirection: TextDirection.ltr), |
| paints |
| ..path( |
| includes: rightRectIncludes, |
| excludes: leftRectIncludes, |
| color: borderSide.color, |
| ), |
| ); |
| expect( |
| (Canvas canvas) => border.paint(canvas, canvasRect, textDirection: TextDirection.rtl), |
| paints |
| ..path( |
| includes: leftRectIncludes, |
| excludes: rightRectIncludes, |
| color: borderSide.color, |
| ), |
| ); |
| }); |
| |
| test('LinearBorder.top()', () { |
| final LinearBorder border = LinearBorder.top(side: borderSide); |
| expect( |
| (Canvas canvas) => border.paint(canvas, canvasRect, textDirection: TextDirection.ltr), |
| paints |
| ..path( |
| includes: topRectIncludes, |
| excludes: bottomRectIncludes, |
| color: borderSide.color, |
| ), |
| ); |
| }); |
| |
| test('LinearBorder.bottom()', () { |
| final LinearBorder border = LinearBorder.bottom(side: borderSide); |
| expect( |
| (Canvas canvas) => border.paint(canvas, canvasRect, textDirection: TextDirection.ltr), |
| paints |
| ..path( |
| includes: bottomRectIncludes, |
| excludes: topRectIncludes, |
| color: borderSide.color, |
| ), |
| ); |
| }); |
| } |