|
1 | | -using System.Runtime.Serialization; |
| 1 | +using System.Windows.Media; |
2 | 2 |
|
3 | 3 | namespace MaterialColorUtilities.Tests; |
4 | 4 |
|
@@ -65,4 +65,109 @@ public async Task RotationGreaterThan360_Wraps() |
65 | 65 | // 43 + 480 = 523 -> 163 after sanitize/wrap |
66 | 66 | await Assert.That(hue).IsEqualTo(163.0).Within(1.0); |
67 | 67 | } |
| 68 | + |
| 69 | +#if WPF |
| 70 | + /// <summary> |
| 71 | + /// Shows how te crate a theme from a primary color. |
| 72 | + /// </summary> |
| 73 | + [Test] |
| 74 | + public async Task CreateThemeFromColor() |
| 75 | + { |
| 76 | + var mdc = new MaterialDynamicColors(); |
| 77 | + var primaryColorHct = Hct.FromInt(ColorUtils.ArgbFromColor(Color.FromArgb(0xff, 0x6a, 0x9c, 0x59))); |
| 78 | + var scheme = new SchemeContent( |
| 79 | + primaryColorHct, |
| 80 | + isDark: true, |
| 81 | + contrastLevel : 0.5, |
| 82 | + SpecVersion.Spec2025, |
| 83 | + Platform.Phone); |
| 84 | + |
| 85 | + scheme.ShouldSatisfyAllConditions( |
| 86 | + // Main Palettes |
| 87 | + () => mdc.PrimaryPaletteKeyColor.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x52, 0x83, 0x43)), |
| 88 | + () => mdc.SecondaryPaletteKeyColor.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x68, 0x7D, 0x5E)), |
| 89 | + () => mdc.TertiaryPaletteKeyColor.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x2B, 0x9F, 0x94)), |
| 90 | + () => mdc.NeutralPaletteKeyColor.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x75, 0x78, 0x71)), |
| 91 | + () => mdc.NeutralVariantPaletteKeyColor.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x72, 0x79, 0x6C)), |
| 92 | + () => mdc.ErrorPaletteKeyColor.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xDE, 0x37, 0x30)), |
| 93 | + |
| 94 | + // Surfaces [S] |
| 95 | + () => mdc.Background.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x11, 0x14, 0x0F)), |
| 96 | + () => mdc.OnBackground.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xE1, 0xE3, 0xDB)), |
| 97 | + () => mdc.Surface.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x11, 0x14, 0x0F)), |
| 98 | + () => mdc.SurfaceDim.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x11, 0x14, 0x0F)), |
| 99 | + () => mdc.SurfaceBright.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x42, 0x45, 0x3F)), |
| 100 | + () => mdc.SurfaceContainerLowest.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x06, 0x08, 0x05)), |
| 101 | + () => mdc.SurfaceContainerLow.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x1B, 0x1E, 0x19)), |
| 102 | + () => mdc.SurfaceContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x26, 0x29, 0x23)), |
| 103 | + () => mdc.SurfaceContainerHigh.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x30, 0x33, 0x2E)), |
| 104 | + () => mdc.SurfaceContainerHighest.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x3C, 0x3F, 0x39)), |
| 105 | + () => mdc.OnSurface.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xFF, 0xFF, 0xFF)), |
| 106 | + () => mdc.SurfaceVariant.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x42, 0x49, 0x3E)), |
| 107 | + () => mdc.OnSurfaceVariant.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xD8, 0xDF, 0xCF)), |
| 108 | + () => mdc.Outline.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xAD, 0xB4, 0xA6)), |
| 109 | + () => mdc.OutlineVariant.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x8B, 0x93, 0x85)), |
| 110 | + () => mdc.InverseSurface.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xE1, 0xE3, 0xDB)), |
| 111 | + () => mdc.InverseOnSurface.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x28, 0x2B, 0x25)), |
| 112 | + () => mdc.Shadow.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)), |
| 113 | + () => mdc.Scrim.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)), |
| 114 | + () => mdc.SurfaceTint.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x9F, 0xD5, 0x8B)), |
| 115 | + |
| 116 | + // Primaries [P] |
| 117 | + () => mdc.Primary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xB5, 0xEB, 0x9F)), |
| 118 | + () => mdc.PrimaryDim?.GetColor(scheme).ShouldBe(Color.FromArgb(0x00, 0x00, 0x00, 0x00)), |
| 119 | + () => mdc.OnPrimary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x04, 0x2D, 0x00)), |
| 120 | + () => mdc.PrimaryContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x6B, 0x9D, 0x5A)), |
| 121 | + () => mdc.OnPrimaryContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)), |
| 122 | + () => mdc.PrimaryFixed.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xBB, 0xF1, 0xA5)), |
| 123 | + () => mdc.PrimaryFixedDim.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x9F, 0xD5, 0x8B)), |
| 124 | + () => mdc.OnPrimaryFixed.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x01, 0x16, 0x00)), |
| 125 | + () => mdc.OnPrimaryFixedVariant.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x10, 0x3F, 0x06)), |
| 126 | + () => mdc.InversePrimary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x24, 0x52, 0x18)), |
| 127 | + |
| 128 | + // Secondaries [Q] |
| 129 | + () => mdc.Secondary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xCC, 0xE3, 0xBF)), |
| 130 | + () => mdc.SecondaryDim?.GetColor(scheme).ShouldBe(Color.FromArgb(0x00, 0x00, 0x00, 0x00)), |
| 131 | + () => mdc.OnSecondary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x18, 0x2A, 0x12)), |
| 132 | + () => mdc.SecondaryContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x81, 0x97, 0x77)), |
| 133 | + () => mdc.OnSecondaryContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)), |
| 134 | + |
| 135 | + // Secondary Fixed [QF] |
| 136 | + () => mdc.SecondaryFixed.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xD2, 0xE9, 0xC5)), |
| 137 | + () => mdc.SecondaryFixedDim.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xB7, 0xCD, 0xAA)), |
| 138 | + () => mdc.OnSecondaryFixed.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x05, 0x15, 0x02)), |
| 139 | + () => mdc.OnSecondaryFixedVariant.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x28, 0x3B, 0x22)), |
| 140 | + |
| 141 | + // Tertiaries [T] |
| 142 | + () => mdc.Tertiary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x85, 0xEE, 0xE1)), |
| 143 | + () => mdc.TertiaryDim?.GetColor(scheme).ShouldBe(Color.FromArgb(0x00, 0x00, 0x00, 0x00)), |
| 144 | + () => mdc.OnTertiary.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x2B, 0x27)), |
| 145 | + () => mdc.TertiaryContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x2D, 0xA1, 0x96)), |
| 146 | + () => mdc.OnTertiaryContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)), |
| 147 | + |
| 148 | + // Tertiary Fixed [TF] |
| 149 | + () => mdc.TertiaryFixed.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x8B, 0xF5, 0xE8)), |
| 150 | + () => mdc.TertiaryFixedDim.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x6E, 0xD8, 0xCC)), |
| 151 | + () => mdc.OnTertiaryFixed.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x15, 0x12)), |
| 152 | + () => mdc.OnTertiaryFixedVariant.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x3E, 0x38)), |
| 153 | + |
| 154 | + // Errors [E] |
| 155 | + () => mdc.Error.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xFF, 0xD2, 0xCC)), |
| 156 | + () => mdc.ErrorDim?.GetColor(scheme).ShouldBe(Color.FromArgb(0x00, 0x00, 0x00, 0x00)), |
| 157 | + () => mdc.OnError.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x54, 0x00, 0x03)), |
| 158 | + () => mdc.ErrorContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xFF, 0x54, 0x49)), |
| 159 | + () => mdc.OnErrorContainer.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x00, 0x00, 0x00)), |
| 160 | + |
| 161 | + // Android-only |
| 162 | + () => mdc.ControlActivated.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x23, 0x51, 0x17)), |
| 163 | + () => mdc.ControlNormal.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0xC2, 0xC9, 0xBA)), |
| 164 | + () => mdc.ControlHighlight.GetColor(scheme).ShouldBe(Color.FromArgb(0x33, 0xFF, 0xFF, 0xFF)), |
| 165 | + () => mdc.TextPrimaryInverse.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x19, 0x1C, 0x17)), |
| 166 | + () => mdc.TextSecondaryAndTertiaryInverse.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x42, 0x49, 0x3E)), |
| 167 | + () => mdc.TextPrimaryInverseDisableOnly.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x19, 0x1C, 0x17)), |
| 168 | + () => mdc.TextSecondaryAndTertiaryInverseDisabled.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x19, 0x1C, 0x17)), |
| 169 | + () => mdc.TextHintInverse.GetColor(scheme).ShouldBe(Color.FromArgb(0xFF, 0x19, 0x1C, 0x17))); |
| 170 | + await Task.CompletedTask; |
| 171 | + } |
| 172 | +#endif |
68 | 173 | } |
0 commit comments