121 lines
4 KiB
Dart
121 lines
4 KiB
Dart
// 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/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
test('applySurfaceTint with null surface tint returns given color', () {
|
|
final Color result = ElevationOverlay.applySurfaceTint(const Color(0xff888888), null, 42.0);
|
|
|
|
expect(result, equals(const Color(0xFF888888)));
|
|
});
|
|
|
|
test('applySurfaceTint with exact elevation levels uses the right opacity overlay', () {
|
|
const baseColor = Color(0xff888888);
|
|
const surfaceTintColor = Color(0xff44CCFF);
|
|
|
|
Color overlayWithOpacity(double opacity) {
|
|
return Color.alphaBlend(surfaceTintColor.withOpacity(opacity), baseColor);
|
|
}
|
|
|
|
// Based on values from the spec:
|
|
// https://m3.material.io/styles/color/the-color-system/color-roles
|
|
|
|
// Elevation level 0 (0.0) - should have opacity 0.0.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 0.0),
|
|
equals(overlayWithOpacity(0.0)),
|
|
);
|
|
|
|
// Elevation level 1 (1.0) - should have opacity 0.05.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 1.0),
|
|
equals(overlayWithOpacity(0.05)),
|
|
);
|
|
|
|
// Elevation level 2 (3.0) - should have opacity 0.08.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 3.0),
|
|
equals(overlayWithOpacity(0.08)),
|
|
);
|
|
|
|
// Elevation level 3 (6.0) - should have opacity 0.11`.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 6.0),
|
|
equals(overlayWithOpacity(0.11)),
|
|
);
|
|
|
|
// Elevation level 4 (8.0) - should have opacity 0.12.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 8.0),
|
|
equals(overlayWithOpacity(0.12)),
|
|
);
|
|
|
|
// Elevation level 5 (12.0) - should have opacity 0.14.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 12.0),
|
|
equals(overlayWithOpacity(0.14)),
|
|
);
|
|
});
|
|
|
|
test('applySurfaceTint with elevation lower than level 0 should have no overlay', () {
|
|
const baseColor = Color(0xff888888);
|
|
const surfaceTintColor = Color(0xff44CCFF);
|
|
|
|
Color overlayWithOpacity(double opacity) {
|
|
return Color.alphaBlend(surfaceTintColor.withOpacity(opacity), baseColor);
|
|
}
|
|
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, -42.0),
|
|
equals(overlayWithOpacity(0.0)),
|
|
);
|
|
});
|
|
|
|
test('applySurfaceTint with elevation higher than level 5 should have no level 5 overlay', () {
|
|
const baseColor = Color(0xff888888);
|
|
const surfaceTintColor = Color(0xff44CCFF);
|
|
|
|
Color overlayWithOpacity(double opacity) {
|
|
return Color.alphaBlend(surfaceTintColor.withOpacity(opacity), baseColor);
|
|
}
|
|
|
|
// Elevation level 5 (12.0) - should have opacity 0.14.
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 42.0),
|
|
equals(overlayWithOpacity(0.14)),
|
|
);
|
|
});
|
|
|
|
test('applySurfaceTint with elevation between two levels should interpolate the opacity', () {
|
|
const baseColor = Color(0xff888888);
|
|
const surfaceTintColor = Color(0xff44CCFF);
|
|
|
|
Color overlayWithOpacity(double opacity) {
|
|
return Color.alphaBlend(surfaceTintColor.withOpacity(opacity), baseColor);
|
|
}
|
|
|
|
// Elevation between level 4 (8.0) and level 5 (12.0) should be interpolated
|
|
// between the opacities 0.12 and 0.14.
|
|
|
|
// One third (0.3): (elevation 9.2) -> (opacity 0.126)
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 9.2),
|
|
equals(overlayWithOpacity(0.126)),
|
|
);
|
|
|
|
// Half way (0.5): (elevation 10.0) -> (opacity 0.13)
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 10.0),
|
|
equals(overlayWithOpacity(0.13)),
|
|
);
|
|
|
|
// Two thirds (0.6): (elevation 10.4) -> (opacity 0.132)
|
|
expect(
|
|
ElevationOverlay.applySurfaceTint(baseColor, surfaceTintColor, 10.4),
|
|
equals(overlayWithOpacity(0.132)),
|
|
);
|
|
});
|
|
}
|