feat: modernize legacy operator interface
This commit is contained in:
@@ -12,6 +12,7 @@ public sealed class LegacyWorkspaceLayoutContractTests
|
||||
"Web");
|
||||
private static readonly string Markup = File.ReadAllText(Path.Combine(WebRoot, "index.html"));
|
||||
private static readonly string Styles = File.ReadAllText(Path.Combine(WebRoot, "styles.css"));
|
||||
private static readonly string App = File.ReadAllText(Path.Combine(WebRoot, "app.js"));
|
||||
private static readonly string Navigation = File.ReadAllText(
|
||||
Path.Combine(WebRoot, "workspace-navigation.js"));
|
||||
|
||||
@@ -54,6 +55,62 @@ public sealed class LegacyWorkspaceLayoutContractTests
|
||||
Styles);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ModernOperatorThemePreservesAccessibleAndSemanticStates()
|
||||
{
|
||||
Assert.Contains(
|
||||
"Modern operator theme: visual-only overrides; geometry and native contracts stay intact",
|
||||
Styles,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("--ui-canvas:", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains("--ui-accent:", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains("--ui-success:", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains("--ui-danger:", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
"font-family: \"Segoe UI Variable\", \"Segoe UI\", \"Noto Sans KR\"",
|
||||
Styles,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Matches(
|
||||
new Regex(
|
||||
@"button:focus-visible,[\s\S]*?outline:\s*2px solid var\(--ui-accent\)",
|
||||
RegexOptions.CultureInvariant),
|
||||
Styles);
|
||||
Assert.Contains(".playlist-data-row.on-air.selected", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains(".playout-actions .take-in:not(:disabled)", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains(".playout-actions .next:not(:disabled)", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains(".playout-actions .take-out:not(:disabled)", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
".playlist-data-row[data-active=\"true\"]:not(.on-air)",
|
||||
Styles,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
".playlist-data-row[aria-selected=\"true\"]:not(.on-air)",
|
||||
Styles,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("@media (forced-colors: active)", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains("scrollbar-gutter: stable", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains("@media (prefers-reduced-motion: reduce)", Styles, StringComparison.Ordinal);
|
||||
Assert.Contains("aria-keyshortcuts=\"F8\"", Markup, StringComparison.Ordinal);
|
||||
Assert.Contains("aria-keyshortcuts=\"Escape\"", Markup, StringComparison.Ordinal);
|
||||
Assert.Contains(
|
||||
".connection-state.dry-run:not(.outcome-unknown)",
|
||||
Styles,
|
||||
StringComparison.Ordinal);
|
||||
Assert.Contains("accessibleStates.push(\"현재 PGM\")", App, StringComparison.Ordinal);
|
||||
Assert.Contains("accessibleStates.push(\"송출 후보\")", App, StringComparison.Ordinal);
|
||||
Assert.Contains("accessibleStates.push(\"삭제 선택됨\")", App, StringComparison.Ordinal);
|
||||
Assert.Matches(
|
||||
new Regex(
|
||||
@"id=""stock-search-button""[\s\S]*?<svg[^>]*viewBox=""0 0 24 24""",
|
||||
RegexOptions.CultureInvariant),
|
||||
Markup);
|
||||
Assert.Matches(
|
||||
new Regex(
|
||||
@"class=""playlist-heading-icon""[\s\S]*?<svg[^>]*viewBox=""0 0 24 24""",
|
||||
RegexOptions.CultureInvariant),
|
||||
Markup);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void NavigationChangesPresentationWithoutNativeOrStoredState()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user