|
|
|
@ -2,8 +2,12 @@
|
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
|
|
|
// found in the LICENSE file.
|
|
|
|
|
|
|
|
|
|
import 'dart:ui';
|
|
|
|
|
|
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:flutter/services.dart';
|
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
|
import 'package:material_3_demo/color_box.dart';
|
|
|
|
|
import 'package:material_3_demo/color_palettes_screen.dart';
|
|
|
|
|
import 'package:material_3_demo/main.dart';
|
|
|
|
|
import 'package:material_3_demo/scheme.dart';
|
|
|
|
@ -88,4 +92,66 @@ void main() {
|
|
|
|
|
expect(find.text('Dark ColorScheme'), findsOneWidget);
|
|
|
|
|
expect(find.byType(SchemePreview, skipOffstage: false), findsNWidgets(2));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
testWidgets(
|
|
|
|
|
'ColorBox displays correct info and copies hex color on button tap',
|
|
|
|
|
(tester) async {
|
|
|
|
|
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
|
|
|
|
.setMockMessageHandler('flutter/platform', (_) async {
|
|
|
|
|
// To intercept method calls to 'Clipboard.setData'
|
|
|
|
|
return const JSONMethodCodec().encodeSuccessEnvelope(null);
|
|
|
|
|
});
|
|
|
|
|
const hexColor = 0xFF3d3d8d;
|
|
|
|
|
const testColor = Color(hexColor);
|
|
|
|
|
const onTestColor = Colors.white;
|
|
|
|
|
const testLabel = 'Test Label';
|
|
|
|
|
const testTone = '50';
|
|
|
|
|
|
|
|
|
|
final gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
|
|
|
|
|
|
|
|
|
|
// Wrap in MaterialApp + Scaffold so we can show SnackBars
|
|
|
|
|
await tester.pumpWidget(
|
|
|
|
|
MaterialApp(
|
|
|
|
|
home: Scaffold(
|
|
|
|
|
body: ColorBox(
|
|
|
|
|
label: testLabel,
|
|
|
|
|
tone: testTone,
|
|
|
|
|
color: testColor,
|
|
|
|
|
onColor: onTestColor,
|
|
|
|
|
height: 100,
|
|
|
|
|
width: 100,
|
|
|
|
|
displayPaletteInfo: true,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(find.text(testLabel), findsOneWidget);
|
|
|
|
|
expect(find.text(testTone), findsOneWidget);
|
|
|
|
|
|
|
|
|
|
// The copy icon should NOT be there initially (only appears on hover).
|
|
|
|
|
expect(find.byIcon(Icons.copy), findsNothing);
|
|
|
|
|
|
|
|
|
|
await gesture.addPointer(location: Offset.zero);
|
|
|
|
|
addTearDown(gesture.removePointer);
|
|
|
|
|
await tester.pump();
|
|
|
|
|
await gesture.moveTo(tester.getCenter(find.byType(ColorBox)));
|
|
|
|
|
await tester.pumpAndSettle();
|
|
|
|
|
|
|
|
|
|
expect(find.byIcon(Icons.copy), findsOneWidget);
|
|
|
|
|
|
|
|
|
|
// Tap the copy icon, which copies the hex to clipboard and shows a SnackBar.
|
|
|
|
|
await tester.tap(find.byIcon(Icons.copy));
|
|
|
|
|
await tester.pumpAndSettle();
|
|
|
|
|
|
|
|
|
|
expect(find.byType(SnackBar), findsOneWidget);
|
|
|
|
|
|
|
|
|
|
expect(
|
|
|
|
|
find.text(
|
|
|
|
|
'Copied #${hexColor.toRadixString(16).substring(2)} to clipboard',
|
|
|
|
|
),
|
|
|
|
|
findsOneWidget,
|
|
|
|
|
);
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|