| 1 | using CascadeIDE.Services.ChordNotation; |
| 2 | using Xunit; |
| 3 | |
| 4 | namespace CascadeIDE.Tests; |
| 5 | |
| 6 | public sealed class ChordKeycapLayoutBuilderTests |
| 7 | { |
| 8 | [Fact] |
| 9 | public void Ctrl_shift_p_three_modifier_caps_plus_key() |
| 10 | { |
| 11 | Assert.True(KeyGestureChordSyntax.TryParseToNormalized("Ctrl+Shift+P", out var seq, out _)); |
| 12 | var layout = ChordKeycapLayoutBuilder.Build(seq, ChordKeycapLabelFlavor.WindowsWords); |
| 13 | Assert.Single(layout.Steps); |
| 14 | var segs = layout.Steps[0].Segments; |
| 15 | Assert.Equal(3, segs.Count); |
| 16 | Assert.Equal("Ctrl", segs[0].Label); |
| 17 | Assert.Equal("Shift", segs[1].Label); |
| 18 | Assert.Equal("P", segs[2].Label); |
| 19 | } |
| 20 | |
| 21 | [Fact] |
| 22 | public void Mac_glyphs_one_segment_per_modifier() |
| 23 | { |
| 24 | Assert.True(KeyGestureChordSyntax.TryParseToNormalized("Ctrl+Shift+P", out var seq, out _)); |
| 25 | var layout = ChordKeycapLayoutBuilder.Build(seq, ChordKeycapLabelFlavor.MacGlyphs); |
| 26 | var segs = layout.Steps[0].Segments; |
| 27 | Assert.Equal(3, segs.Count); |
| 28 | Assert.Equal("\u2303", segs[0].Label); |
| 29 | Assert.Equal("\u21E7", segs[1].Label); |
| 30 | Assert.Equal("P", segs[2].Label); |
| 31 | } |
| 32 | |
| 33 | [Fact] |
| 34 | public void Sequence_preserves_multiple_steps() |
| 35 | { |
| 36 | Assert.True(ChordNotationParser.TryParseVimToNormalized("<C-k> m", out var seq, out _)); |
| 37 | var layout = ChordNotationRenderer.BuildKeycapLayout(seq); |
| 38 | Assert.Equal(2, layout.Steps.Count); |
| 39 | Assert.Equal(2, layout.Steps[0].Segments.Count); // Ctrl + K |
| 40 | Assert.Single(layout.Steps[1].Segments); |
| 41 | } |
| 42 | } |
| 43 | |