Skip to content

Commit 58cdb35

Browse files
committed
Convert GlobalHotKeys.Test
1 parent c750794 commit 58cdb35

8 files changed

+191
-166
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<PackageReference Include="coverlet.collector" Version="6.0.0" />
14+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
15+
<PackageReference Include="NUnit" Version="3.14.0" />
16+
<PackageReference Include="NUnit.Analyzers" Version="3.9.0" />
17+
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0" />
18+
</ItemGroup>
19+
20+
<ItemGroup>
21+
<ProjectReference Include="..\GlobalHotKeys\GlobalHotKeys.csproj" />
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<Using Include="NUnit.Framework" />
26+
</ItemGroup>
27+
28+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
namespace GlobalHotKeys.Test;
2+
3+
public class HotKeyManagerTests
4+
{
5+
[SetUp]
6+
public void Setup()
7+
{
8+
}
9+
10+
[Test]
11+
public void create_and_dispose_HotKeyManager()
12+
{
13+
// Create and dispose HotKeyManager
14+
using (var manager = new HotKeyManager())
15+
{
16+
// No assert is necessary as per original code
17+
}
18+
}
19+
20+
[Test]
21+
public void register_2_keys()
22+
{
23+
// arrange
24+
using var manager = new HotKeyManager();
25+
// act
26+
using var s1 = manager.Register(VirtualKeyCode.KEY_0, Modifiers.Shift);
27+
using var s2 = manager.Register(VirtualKeyCode.KEY_1, Modifiers.Shift);
28+
// assert
29+
Assert.AreEqual(0, s1.Id);
30+
Assert.AreEqual(1, s2.Id);
31+
}
32+
33+
[Test]
34+
public void register_reuses_ids()
35+
{
36+
// arrange
37+
using var manager = new HotKeyManager();
38+
// act
39+
var s1 = manager.Register(VirtualKeyCode.KEY_0, Modifiers.Shift);
40+
s1.Dispose();
41+
using var s2 = manager.Register(VirtualKeyCode.KEY_1, Modifiers.Shift);
42+
// assert
43+
Assert.AreEqual(0, s1.Id);
44+
Assert.AreEqual(0, s2.Id);
45+
}
46+
}

src/GlobalHotKeys.Test/NativeFunctionsTests.fs

-36
This file was deleted.

src/GlobalHotKeys.Test/WNDCLASSEXTests.fs

-24
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,32 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
2-
3-
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
5-
6-
<IsPackable>false</IsPackable>
7-
<GenerateProgramFile>false</GenerateProgramFile>
8-
</PropertyGroup>
9-
10-
<ItemGroup>
11-
<Compile Include="NativeFunctionsTests.fs" />
12-
<Compile Include="WNDCLASSEXTests.fs" />
13-
<Compile Include="HotKeyManagerTests.fs" />
14-
<Compile Include="Program.fs" />
15-
</ItemGroup>
16-
17-
<ItemGroup>
18-
<PackageReference Include="FsUnit.xUnit" Version="4.0.4" />
19-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
20-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
21-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
22-
<PrivateAssets>all</PrivateAssets>
23-
</PackageReference>
24-
<PackageReference Include="coverlet.collector" Version="1.3.0">
25-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
26-
<PrivateAssets>all</PrivateAssets>
27-
</PackageReference>
28-
</ItemGroup>
29-
30-
<ItemGroup>
31-
<ProjectReference Include="..\GlobalHotKeys\GlobalHotKeys.fsproj" />
32-
</ItemGroup>
33-
34-
</Project>
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
<GenerateProgramFile>false</GenerateProgramFile>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<Compile Include="HotKeyManagerTests.fs" />
12+
<Compile Include="Program.fs" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<PackageReference Include="FsUnit.xUnit" Version="4.0.4" />
17+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.1" />
18+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
19+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
20+
<PrivateAssets>all</PrivateAssets>
21+
</PackageReference>
22+
<PackageReference Include="coverlet.collector" Version="1.3.0">
23+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
24+
<PrivateAssets>all</PrivateAssets>
25+
</PackageReference>
26+
</ItemGroup>
27+
28+
<ItemGroup>
29+
<ProjectReference Include="..\GlobalHotKeys\GlobalHotKeys.csproj" />
30+
</ItemGroup>
31+
32+
</Project>
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,70 @@
1-
module GlobalHotKeys.Test.HotKeyManagerTests
2-
3-
open System.Threading.Tasks
4-
open GlobalHotKeys.Native.Types
5-
open Xunit
6-
open FsUnit.Xunit
7-
open GlobalHotKeys
8-
9-
[<Fact>]
10-
let ``create and dispose HotKeyManager`` () =
11-
use manager = new HotKeyManager ()
12-
()
13-
14-
15-
[<Fact>]
16-
let ``register 2 keys`` () =
17-
18-
// arrange
19-
use manager = new HotKeyManager ()
20-
21-
// act
22-
use s1 = manager.Register (VirtualKeyCode.KEY_0, Modifiers.Shift)
23-
use s2 = manager.Register (VirtualKeyCode.KEY_1, Modifiers.Shift)
24-
25-
// assert
26-
s1.Id |> should equal 0
27-
s2.Id |> should equal 1
28-
()
29-
30-
[<Fact>]
31-
let ``register reuses ids`` () =
32-
33-
// arrange
34-
use manager = new HotKeyManager ()
35-
36-
// act
37-
use s1 = manager.Register (VirtualKeyCode.KEY_0, Modifiers.Shift)
38-
s1.Dispose ()
39-
use s2 = manager.Register (VirtualKeyCode.KEY_1, Modifiers.Shift)
40-
41-
// assert
42-
s1.Id |> should equal 0
43-
s2.Id |> should equal 0
44-
()
45-
46-
47-
[<Fact
48-
(Skip = "manual test - you need to press the registered key on the keyboard")
49-
>]
50-
let ``manual hotkey test`` () =
51-
52-
// arrange
53-
use manager = new HotKeyManager ()
54-
let tcs = TaskCompletionSource<bool> ()
55-
let hotkeyHandler hotkey =
56-
printfn $"hotkey pressed: Id = {hotkey.Id}, Key = {hotkey.Key}, Modifers = {hotkey.Modifiers}"
57-
tcs.TrySetResult(true) |> ignore
58-
()
59-
manager.HotKeyPressed.Subscribe hotkeyHandler
60-
|> ignore
61-
62-
// act
63-
use registeredHotKey = manager.Register (VirtualKeyCode.KEY_1, Modifiers.Shift)
64-
printfn ($"hotkey registered, please press SHIFT-1")
65-
System.Threading.Thread.Sleep (System.TimeSpan.FromSeconds 10.)
66-
67-
// assert
68-
tcs.Task.IsCompleted |> should be True
69-
70-
()
71-
1+
module GlobalHotKeys.Test.HotKeyManagerTests
2+
3+
open System.Threading.Tasks
4+
open Xunit
5+
open FsUnit.Xunit
6+
open GlobalHotKeys
7+
8+
[<Fact>]
9+
let ``create and dispose HotKeyManager`` () =
10+
use manager = new HotKeyManager ()
11+
()
12+
13+
14+
[<Fact>]
15+
let ``register 2 keys`` () =
16+
17+
// arrange
18+
use manager = new HotKeyManager ()
19+
20+
// act
21+
use s1 = manager.Register (VirtualKeyCode.KEY_0, Modifiers.Shift)
22+
use s2 = manager.Register (VirtualKeyCode.KEY_1, Modifiers.Shift)
23+
24+
// assert
25+
s1.Id |> should equal 0
26+
s2.Id |> should equal 1
27+
()
28+
29+
[<Fact>]
30+
let ``register reuses ids`` () =
31+
32+
// arrange
33+
use manager = new HotKeyManager ()
34+
35+
// act
36+
use s1 = manager.Register (VirtualKeyCode.KEY_0, Modifiers.Shift)
37+
s1.Dispose ()
38+
use s2 = manager.Register (VirtualKeyCode.KEY_1, Modifiers.Shift)
39+
40+
// assert
41+
s1.Id |> should equal 0
42+
s2.Id |> should equal 0
43+
()
44+
45+
46+
[<Fact
47+
(Skip = "manual test - you need to press the registered key on the keyboard")
48+
>]
49+
let ``manual hotkey test`` () =
50+
51+
// arrange
52+
use manager = new HotKeyManager ()
53+
let tcs = TaskCompletionSource<bool> ()
54+
let hotkeyHandler hotkey =
55+
printfn $"hotkey pressed: Id = {hotkey.Id}, Key = {hotkey.Key}, Modifers = {hotkey.Modifiers}"
56+
tcs.TrySetResult(true) |> ignore
57+
()
58+
manager.HotKeyPressed.Subscribe hotkeyHandler
59+
|> ignore
60+
61+
// act
62+
use registeredHotKey = manager.Register (VirtualKeyCode.KEY_1, Modifiers.Shift)
63+
printfn ($"hotkey registered, please press SHIFT-1")
64+
System.Threading.Thread.Sleep (System.TimeSpan.FromSeconds 10.)
65+
66+
// assert
67+
tcs.Task.IsCompleted |> should be True
68+
69+
()
70+
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
module Program = let [<EntryPoint>] main _ = 0
1+
module Program = let [<EntryPoint>] main _ = 0

src/GlobalHotKeys.sln

+14
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AvaloniaApp", "Examples\Ava
1515
EndProject
1616
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GlobalHotKeys", "GlobalHotKeys\GlobalHotKeys.csproj", "{6B4C4A20-1AB3-40BB-8437-E840E4DF4978}"
1717
EndProject
18+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GlobalHotKeys.Test", "GlobalHotKeys.Test\GlobalHotKeys.Test.csproj", "{AB55C5E6-A696-4B4B-9227-3869CF692C6A}"
19+
EndProject
1820
Global
1921
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2022
Debug|Any CPU = Debug|Any CPU
@@ -85,6 +87,18 @@ Global
8587
{6B4C4A20-1AB3-40BB-8437-E840E4DF4978}.Release|x64.Build.0 = Release|Any CPU
8688
{6B4C4A20-1AB3-40BB-8437-E840E4DF4978}.Release|x86.ActiveCfg = Release|Any CPU
8789
{6B4C4A20-1AB3-40BB-8437-E840E4DF4978}.Release|x86.Build.0 = Release|Any CPU
90+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
91+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Debug|Any CPU.Build.0 = Debug|Any CPU
92+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Debug|x64.ActiveCfg = Debug|Any CPU
93+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Debug|x64.Build.0 = Debug|Any CPU
94+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Debug|x86.ActiveCfg = Debug|Any CPU
95+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Debug|x86.Build.0 = Debug|Any CPU
96+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Release|Any CPU.ActiveCfg = Release|Any CPU
97+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Release|Any CPU.Build.0 = Release|Any CPU
98+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Release|x64.ActiveCfg = Release|Any CPU
99+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Release|x64.Build.0 = Release|Any CPU
100+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Release|x86.ActiveCfg = Release|Any CPU
101+
{AB55C5E6-A696-4B4B-9227-3869CF692C6A}.Release|x86.Build.0 = Release|Any CPU
88102
EndGlobalSection
89103
GlobalSection(SolutionProperties) = preSolution
90104
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)