Dreamine.FullKit.Wpf.Tests 1.0.0.0
Dreamine.FullKit.Wpf.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
로딩중...
검색중...
일치하는것 없음
ThreadingWpfTests.cs
이 파일의 문서화 페이지로 가기
1using System.Globalization;
2using System.Windows.Data;
3using System.Windows.Media;
4using Dreamine.Threading.Models;
5using Dreamine.Threading.Interfaces;
6using Dreamine.Threading.Windows.Services;
7using Dreamine.Threading.Wpf.Converters;
8using Dreamine.Threading.Wpf.Services;
9using Dreamine.Threading.Wpf.ViewModels;
10using System.Windows.Threading;
11
13
22public sealed class ThreadingWpfTests
23{
32 [Fact]
34 {
35 var statusConverter = new ThreadStatusBrushConverter();
36 var priorityConverter = new ThreadPriorityTextConverter();
37
38 Assert.Same(Brushes.ForestGreen, statusConverter.Convert(DreamineThreadStatus.Running, typeof(Brush), null!, CultureInfo.InvariantCulture));
39 Assert.Same(Brushes.Crimson, statusConverter.Convert(DreamineThreadStatus.Faulted, typeof(Brush), null!, CultureInfo.InvariantCulture));
40 Assert.Same(Brushes.Gray, statusConverter.Convert("bad", typeof(Brush), null!, CultureInfo.InvariantCulture));
41 Assert.Equal("High", priorityConverter.Convert(DreamineThreadPriority.High, typeof(string), null!, CultureInfo.InvariantCulture));
42 Assert.Equal(string.Empty, priorityConverter.Convert("bad", typeof(string), null!, CultureInfo.InvariantCulture));
43 Assert.Same(Binding.DoNothing, priorityConverter.ConvertBack("", typeof(DreamineThreadPriority), null!, CultureInfo.InvariantCulture));
44 }
45
54 [Fact]
56 {
57 var row = new ThreadInfoRow(CreateInfo(DreamineThreadStatus.Created, cycles: 1));
58 var changed = new List<string?>();
59 row.PropertyChanged += (_, args) => changed.Add(args.PropertyName);
60
61 var updated = row.UpdateFrom(CreateInfo(DreamineThreadStatus.Running, cycles: 2));
62
63 Assert.True(updated);
64 Assert.Equal(DreamineThreadStatus.Running, row.Status);
65 Assert.True(row.IsRunning);
66 Assert.Contains(nameof(ThreadInfoRow.Status), changed);
67 Assert.Contains(nameof(ThreadInfoRow.CycleCount), changed);
68 Assert.Contains(nameof(ThreadInfoRow.IsRunning), changed);
69 }
70
79 [Fact]
81 {
82 ICpuInfoProvider provider = new WindowsCpuInfoProvider();
83
84 Assert.True(provider.GetLogicalProcessorCount() >= 1);
85 Assert.True(provider.IsValidCoreIndex(0));
86 Assert.False(provider.IsValidCoreIndex(-1));
87 Assert.False(provider.IsValidCoreIndex(provider.GetLogicalProcessorCount()));
88 }
89
98 [Fact]
100 {
101 using var viewModel = new DreamineThreadMonitorViewModel(
102 new TestThreadManager(),
104 TimeSpan.FromSeconds(1));
105
106 Assert.Empty(viewModel.Threads);
107 }
108
141 private static DreamineThreadInfo CreateInfo(DreamineThreadStatus status, long cycles)
142 {
143 return new DreamineThreadInfo(
144 "Worker",
145 status,
146 DreamineThreadPriority.Normal,
147 intervalMs: 10,
148 coreIndex: null,
149 useAffinity: false,
150 jobCount: 1,
151 cycleCount: cycles,
152 startedAt: null,
153 stoppedAt: null,
154 lastErrorMessage: null);
155 }
156
165 private sealed class TestThreadUiDispatcher : IThreadUiDispatcher
166 {
175 public Dispatcher Dispatcher { get; } = Dispatcher.CurrentDispatcher;
176
193 public void Invoke(Action action)
194 {
195 action();
196 }
197
214 public void BeginInvoke(Action action)
215 {
216 action();
217 }
218 }
219
228 private sealed class TestThreadManager : IDreamineThreadManager
229 {
270 public IDreamineThreadJob Register(DreamineThreadOptions options, Func<CancellationToken, ValueTask> action)
271 {
272 throw new NotSupportedException();
273 }
274
299 public bool Start(string threadName) => true;
300
325 public bool Stop(string threadName) => true;
326
351 public ValueTask<bool> StopAsync(string threadName) => ValueTask.FromResult(true);
352
377 public bool Pause(string threadName) => true;
378
403 public bool Resume(string threadName) => true;
404
413 public void StartAll()
414 {
415 }
416
425 public void StopAll()
426 {
427 }
428
445 public ValueTask StopAllAsync() => ValueTask.CompletedTask;
446
455 public void PauseAll()
456 {
457 }
458
467 public void ResumeAll()
468 {
469 }
470
503 public bool TryGetThread(string threadName, out IDreamineThread? thread)
504 {
505 thread = null;
506 return false;
507 }
508
525 public IReadOnlyList<IDreamineThread> GetThreads() => Array.Empty<IDreamineThread>();
526
543 public IReadOnlyList<DreamineThreadInfo> GetThreadInfos() => Array.Empty<DreamineThreadInfo>();
544
553 public void Dispose()
554 {
555 }
556 }
557}
static DreamineThreadInfo CreateInfo(DreamineThreadStatus status, long cycles)
IDreamineThreadJob Register(DreamineThreadOptions options, Func< CancellationToken, ValueTask > action)
bool TryGetThread(string threadName, out IDreamineThread? thread)