Forge
csharpdeeb25a2
1using Avalonia.Input;
2using CascadeIDE.Features.Shell.Application;
3using Xunit;
4
5namespace CascadeIDE.Tests;
6
7public sealed class CascadeChordMelodyKeyMapTests
8{
9 [Theory]
10 [InlineData(Key.Space, KeyModifiers.None, PhysicalKey.Space, ' ')]
11 [InlineData(Key.Space, KeyModifiers.Shift, PhysicalKey.Space, ' ')]
12 public void Maps_space(Key key, KeyModifiers mods, PhysicalKey physical, char expected)
13 {
14 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(key, mods, physical, out var ch));
15 Assert.Equal(expected, ch);
16 }
17
18 [Fact]
19 public void Maps_semicolon_us_no_shift_physical_semicolon()
20 {
21 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
22 Key.OemSemicolon,
23 KeyModifiers.None,
24 PhysicalKey.Semicolon,
25 out var ch));
26 Assert.Equal(';', ch);
27 }
28
29 [Fact]
30 public void Maps_semicolon_windows_oem1_no_shift()
31 {
32 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
33 Key.Oem1,
34 KeyModifiers.None,
35 PhysicalKey.None,
36 out var ch));
37 Assert.Equal(';', ch);
38 }
39
40 [Fact]
41 public void Maps_colon_us_shift_semicolon_virtual_key()
42 {
43 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
44 Key.OemSemicolon,
45 KeyModifiers.Shift,
46 PhysicalKey.Semicolon,
47 out var ch));
48 Assert.Equal(':', ch);
49 }
50
51 [Fact]
52 public void Maps_colon_by_physical_semicolon_when_layout_hides_oem_semicolon()
53 {
54 // Не-US: Key может быть не OemSemicolon, позиция ; на QWERTY всё та же.
55 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
56 Key.Oem1,
57 KeyModifiers.Shift,
58 PhysicalKey.Semicolon,
59 out var ch));
60 Assert.Equal(':', ch);
61 }
62
63 [Fact]
64 public void Maps_colon_ru_shift_digit6_physical()
65 {
66 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
67 Key.D6,
68 KeyModifiers.Shift,
69 PhysicalKey.Digit6,
70 out var ch));
71 Assert.Equal(':', ch);
72 }
73
74 [Fact]
75 public void Does_not_map_when_alt_held()
76 {
77 Assert.False(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
78 Key.Space,
79 KeyModifiers.Alt,
80 PhysicalKey.Space,
81 out _));
82 }
83
84 [Theory]
85 [InlineData(Key.Oem2, PhysicalKey.Slash)]
86 [InlineData(Key.Divide, PhysicalKey.None)]
87 public void Maps_slash_even_when_ctrl_held(Key key, PhysicalKey physical)
88 {
89 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
90 key,
91 KeyModifiers.Control,
92 physical,
93 out var ch));
94 Assert.Equal('/', ch);
95 }
96
97 [Theory]
98 [InlineData(Key.A, PhysicalKey.A, 'a')]
99 [InlineData(Key.D7, PhysicalKey.Digit7, '7')]
100 public void Maps_letters_and_digits_even_when_ctrl_held(Key key, PhysicalKey physical, char expected)
101 {
102 Assert.True(CascadeChordMelodyKeyMap.TryMapChordMelodyGlyph(
103 key,
104 KeyModifiers.Control,
105 physical,
106 out var ch));
107 Assert.Equal(expected, ch);
108 }
109}
110
View only · write via MCP/CIDE