blob: 0173bb66deb7788ddebbdc1126983a04f5db6f31 [file] [log] [blame]
// 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 'dart:typed_data';
import 'dart:ui' as ui show Image;
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import '../image_data.dart';
import '../painting/mocks_for_image_cache.dart';
import '../rendering/mock_canvas.dart';
import 'test_border.dart' show TestBorder;
Future<void> main() async {
AutomatedTestWidgetsFlutterBinding();
final ui.Image rawImage = await decodeImageFromList(Uint8List.fromList(kTransparentImage));
final ImageProvider image = TestImageProvider(0, 0, image: rawImage);
testWidgets('ShapeDecoration.image', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: DecoratedBox(
decoration: ShapeDecoration(
shape: Border.all(color: Colors.white) +
Border.all(),
image: DecorationImage(
image: image,
),
),
),
),
);
expect(
find.byType(DecoratedBox),
paints
..drawImageRect(image: rawImage)
..rect(color: Colors.black)
..rect(color: Colors.white),
);
});
testWidgets('ShapeDecoration.color', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: DecoratedBox(
decoration: ShapeDecoration(
shape: Border.all(color: Colors.white) +
Border.all(),
color: Colors.blue,
),
),
),
);
expect(
find.byType(DecoratedBox),
paints
..path(color: Color(Colors.blue.value))
..rect(color: Colors.black)
..rect(color: Colors.white),
);
});
test('ShapeDecoration with BorderDirectional', () {
const ShapeDecoration decoration = ShapeDecoration(
shape: BorderDirectional(start: BorderSide(color: Colors.red, width: 3)),
);
expect(decoration.padding, isA<EdgeInsetsDirectional>());
});
testWidgets('TestBorder and Directionality - 1', (WidgetTester tester) async {
final List<String> log = <String>[];
await tester.pumpWidget(
MaterialApp(
home: DecoratedBox(
decoration: ShapeDecoration(
shape: TestBorder(log.add),
color: Colors.green,
),
),
),
);
expect(
log,
<String>[
'getOuterPath Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.ltr',
'paint Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.ltr',
],
);
});
testWidgets('TestBorder and Directionality - 2', (WidgetTester tester) async {
final List<String> log = <String>[];
await tester.pumpWidget(
Directionality(
textDirection: TextDirection.rtl,
child: DecoratedBox(
decoration: ShapeDecoration(
shape: TestBorder(log.add),
image: DecorationImage(
image: image,
),
),
),
),
);
expect(
log,
<String>[
'getInnerPath Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.rtl',
'paint Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.rtl',
],
);
});
testWidgets('Does not crash with directional gradient', (WidgetTester tester) async {
// Regression test for https://github.com/flutter/flutter/issues/76967.
await tester.pumpWidget(
const Directionality(
textDirection: TextDirection.rtl,
child: DecoratedBox(
decoration: ShapeDecoration(
gradient: RadialGradient(
focal: AlignmentDirectional.bottomCenter,
focalRadius: 5,
radius: 2,
colors: <Color>[Colors.red, Colors.black],
stops: <double>[0.0, 0.4],
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(8.0)),
),
),
),
),
);
expect(tester.takeException(), isNull);
});
test('ShapeDecoration equality', () {
const ShapeDecoration a = ShapeDecoration(
color: Color(0xFFFFFFFF),
shadows: <BoxShadow>[BoxShadow()],
shape: Border(),
);
const ShapeDecoration b = ShapeDecoration(
color: Color(0xFFFFFFFF),
shadows: <BoxShadow>[BoxShadow()],
shape: Border(),
);
expect(a.hashCode, equals(b.hashCode));
expect(a, equals(b));
});
}