public async Task Add_Clear_ReplaceTextsCommand() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); await model.WaitIdleUI().Timeout(3000d); await Task.Delay(100); int defaultCount = model.Setting.ReplaceTexts.Count; //ステージ1 追加後 settingVM.AddReplaceTextsCommand.Execute(); model.Setting.ReplaceTexts .Should().HaveCount(defaultCount + 1, "1つ増えているはず"); model.Setting.ReplaceTexts.Last().ReplaceText .Should().BeEmpty("追加された内容は空白のはず"); model.Setting.ReplaceTexts.Last().TargetPattern .Should().BeEmpty("追加された内容は空白のはず"); //ステージ2 クリア後 await settingVM.ClearReplaceTextsCommand.ExecuteAsync(); model.Setting.ReplaceTexts .Should().BeEmpty("空になったはず"); }
public async Task Commands_CanExecute() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); await model.WaitIdleUI().Timeout(3000d); await Task.Delay(100); //ステージ1 初期状態 var canExecuteUsuallyCommands = new ICommand[] { settingVM.AddDeleteTextsCommand, settingVM.AddIgnoreExtensionsCommand, settingVM.AddReplaceTextsCommand, settingVM.ClearDeleteTextsCommand, settingVM.ClearIgnoreExtensionsCommand, settingVM.ClearReplaceTextsCommand, settingVM.LoadSettingFileDialogCommand, settingVM.ResetSettingCommand, settingVM.SaveSettingFileDialogCommand, settingVM.ShowExpressionReferenceCommand, }; foreach ((ICommand c, int i) in canExecuteUsuallyCommands.WithIndex()) { c.CanExecute(null) .Should().BeTrue($"すべて実行可能はなず (indexCommand:{i})"); } }
public void AddSerialNumberPattern_AddChangeReAdd() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); AddSerialNumberViewModel addSerialNumberVM = settingVM.AddSerialNumberVM; const string addSerialNumberHead = "$n"; //ステージ1 追加前 settingVM.ReplaceTexts .Should().NotContain(x => x.ReplaceText.Value.Contains(addSerialNumberHead), "まだ含まれていないはず"); addSerialNumberVM.SampleDiffVMs.Value .Select(x => x.SampleDiff.NewText.ToRawText()) .Should().BeEquivalentTo(new[] { "1_aaa.txt", "2_bbb.txt", "3_ccc.txt", "4_ddd.txt" }); //ステージ2 追加後 addSerialNumberVM.StartNumber.Value = 10; addSerialNumberVM.Step.Value = 5; addSerialNumberVM.ZeroPadCount.Value = 3; addSerialNumberVM.IsDirectoryReset.Value = true; addSerialNumberVM.IsInverseOrder.Value = true; addSerialNumberVM.PrefixText.Value = "["; addSerialNumberVM.PostfixText.Value = "]_"; addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"[$n<10,5,000,r,i>]_", "含まれているはず"); addSerialNumberVM.SampleDiffVMs.Value .Select(x => x.SampleDiff.NewText.ToRawText()) .Should().BeEquivalentTo(new[] { "[020]_aaa.txt", "[015]_bbb.txt", "[010]_ccc.txt", "[010]_ddd.txt" }); //ステージ3 追加後編集 ReplacePatternViewModel addedPattern = settingVM.ReplaceTexts.Where(x => x.ReplaceText.Value.Contains(addSerialNumberHead)).First(); const string changedTarget = "XXX"; addedPattern.ReplaceText.Value = changedTarget; settingVM.ReplaceTexts .Should().NotContain(x => x.ReplaceText.Value.Contains(addSerialNumberHead), "変更したので、含まれていないはず"); //ステージ4 再度追加 addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"[$n<10,5,000,r,i>]_", "含まれているはず"); }
public void AddSerialNumberPattern_Paramerters() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); AddSerialNumberViewModel addSerialNumberVM = settingVM.AddSerialNumberVM; //ステージ デフォルトパラメータ指定 addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"$n_", "含まれているはず"); //ステージ 部分パラメータ指定1 addSerialNumberVM.StartNumber.Value = 10; addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"$n<10>_", "含まれているはず"); //ステージ 部分パラメータ指定2 addSerialNumberVM.StartNumber.Value = AddSerialNumberRegex.DefaultStartNumber; addSerialNumberVM.Step.Value = 5; addSerialNumberVM.IsDirectoryReset.Value = true; addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"$n<,5,,r>_", "含まれているはず"); //ステージ 全パラメータ指定1 addSerialNumberVM.StartNumber.Value = 10; addSerialNumberVM.Step.Value = 5; addSerialNumberVM.ZeroPadCount.Value = 3; addSerialNumberVM.IsDirectoryReset.Value = true; addSerialNumberVM.IsInverseOrder.Value = true; addSerialNumberVM.PrefixText.Value = "["; addSerialNumberVM.PostfixText.Value = "]_"; addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"[$n<10,5,000,r,i>]_", "含まれているはず"); //ステージ 全パラメータ指定2 addSerialNumberVM.StartNumber.Value = 99; addSerialNumberVM.Step.Value = 100; addSerialNumberVM.ZeroPadCount.Value = 2; addSerialNumberVM.IsDirectoryReset.Value = true; addSerialNumberVM.IsInverseOrder.Value = true; addSerialNumberVM.PrefixText.Value = @"No\. "; addSerialNumberVM.PostfixText.Value = "-"; addSerialNumberVM.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.ReplaceText.Value == @"No\. $n<99,100,00,r,i>-", "含まれているはず"); }
public async Task ConfirmDialog_when_ClearSetting() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var mainVM = new MainWindowViewModel(model); model.Initialize(); await model.WaitIdleUI().Timeout(3000d); SettingAppViewModel settingVM = mainVM.SettingVM.Value; //ステージ 初期状態 settingVM.IgnoreExtensions.Count .Should().BeGreaterThan(1, "設定がなにかあるはず"); //ステージ 設定消去→確認ダイアログ表示 Task taskClear1 = settingVM.ClearIgnoreExtensionsCommand.ExecuteAsync(); mainVM.IsDialogOpen.Value .Should().BeTrue("確認ダイアログが開いているはず"); mainVM.DialogContentVM.Value .Should().BeOfType <ConfirmDialogViewModel>("確認ダイアログが開いているはず"); ConfirmDialogViewModel confirmVM = (mainVM.DialogContentVM.Value as ConfirmDialogViewModel) !; taskClear1.IsCompleted .Should().BeFalse("まだ確認ダイアログが開いたままのはず"); //ステージ 確認ダイアログで拒否 confirmVM.IsOkResult.Value = false; taskClear1.IsCompleted .Should().BeTrue("確認ダイアログが閉じたはず"); mainVM.IsDialogOpen.Value .Should().BeFalse("確認ダイアログが閉じたはず"); settingVM.IgnoreExtensions.Count .Should().BeGreaterThan(1, "設定はまだ消去されていないはず"); //ステージ確認ダイアログでOK Task taskClear2 = settingVM.ClearIgnoreExtensionsCommand.ExecuteAsync(); (mainVM.DialogContentVM.Value as ConfirmDialogViewModel) !.IsOkResult.Value = true; taskClear2.IsCompleted .Should().BeTrue("確認ダイアログが閉じたはず"); mainVM.IsDialogOpen.Value .Should().BeFalse("確認ダイアログが閉じたはず"); settingVM.IgnoreExtensions.Count .Should().Be(0, "設定が消去されたはず"); }
public void SearchFilePathConcate() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); IReadOnlyList<string> newPaths = new[] { targetDirPath, targetDirPathSub }; settingVM.SearchFilePaths.Value = newPaths; settingVM.ConcatedSearchFilePaths.Value .Should().Contain(targetDirPath, "連結ファイルパスに元のファイルパスが含まれているはず") .And.Contain(targetDirPathSub, "連結ファイルパスに元のファイルパスが含まれているはず"); settingVM.ConcatedSearchFilePaths.Value = $"{targetDirPath}|{targetDirPathSub}"; settingVM.SearchFilePaths.Value .Should().Contain(targetDirPath, "連結ファイルパスに元のファイルパスが含まれているはず") .And.Contain(targetDirPathSub, "連結ファイルパスに元のファイルパスが含まれているはず"); }
public void CommonReplacePattern() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); //英数小文字を大文字にするパターン(ex. low -> LOW)を取得 const string commonReplacePatternTarget = "[a-z]"; CommonPatternViewModel commonReplacePattern = settingVM.CommonReplacePatternVMs .Where(x => x.TargetPattern == commonReplacePatternTarget) .First(); //ステージ1 追加前 commonReplacePattern.TargetPattern .Should().Be(commonReplacePatternTarget); commonReplacePattern.ReplaceText .Should().Contain("\\u"); commonReplacePattern.AsExpression .Should().BeTrue(); commonReplacePattern.SampleDiff.OldText.ToRawText() .Should().Contain("low"); commonReplacePattern.SampleDiff.NewText.ToRawText() .Should().Contain("LOW"); settingVM.ReplaceTexts .Should().NotContain(x => x.TargetPattern.Value == commonReplacePatternTarget, "まだ含まれていないはず"); //ステージ2 追加後 commonReplacePattern.AddSettingCommand.Execute(); settingVM.ReplaceTexts .Should().Contain(x => x.TargetPattern.Value == commonReplacePatternTarget, "含まれているはず"); //ステージ3 追加後編集 ReplacePatternViewModel addedPattern = settingVM.ReplaceTexts.Where(x => x.TargetPattern.Value == commonReplacePatternTarget).First(); const string changedTarget = "XXX"; addedPattern.TargetPattern.Value = changedTarget; settingVM.CommonReplacePatternVMs .Should().NotContain(x => x.TargetPattern == changedTarget, "追加先で編集しても、元のプロパティは変更されないはず") .And.Contain(x => x.TargetPattern == commonReplacePatternTarget, "追加先で編集しても、元のプロパティは変更されないはず"); CommonPattern.ReplacePatterns .Should().NotContain(x => x.TargetPattern == changedTarget, "追加先で編集しても、元のプロパティは変更されないはず") .And.Contain(x => x.TargetPattern == commonReplacePatternTarget, "追加先で編集しても、元のプロパティは変更されないはず"); }
public void SaveSetting_NullFilePath() { var fileSystem = new MockFileSystem(); var model = new MainModel(fileSystem, Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); const string newIgnoreExt = "someignoreext"; settingVM.IgnoreExtensions.Add(new(newIgnoreExt)); //ステージ2 保存後 var saveMessage = new SavingFileSelectionMessage() { Response = null }; settingVM.SaveSettingFileDialogCommand.Execute(saveMessage); fileSystem.AllFiles .Should().BeEmpty("保存できていないので、ファイルが増えていないはず"); settingVM.PreviousSettingFileDirectory.Value .Should().Be(Path.GetDirectoryName(defaultSettingFilePath), "保存できていないので、デフォルトファイルのディレクトリパスになっているはず"); settingVM.PreviousSettingFileName.Value .Should().Be(Path.GetFileName(defaultSettingFilePath), "保存できていないので、デフォルトファイル名前になっているはず"); }
public void SaveSetting_Success() { var fileSystem = new MockFileSystem(); var model = new MainModel(fileSystem, Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); const string newIgnoreExt = "someignoreext"; settingVM.IgnoreExtensions.Add(new(newIgnoreExt)); //ステージ1 保存前 fileSystem.AllFiles .Should().BeEmpty(); settingVM.PreviousSettingFileDirectory.Value .Should().Be(Path.GetDirectoryName(defaultSettingFilePath), "デフォルトファイルのディレクトリパスになっているはず"); settingVM.PreviousSettingFileName.Value .Should().Be(Path.GetFileName(defaultSettingFilePath), "デフォルトファイル名前になっているはず"); //ステージ2 保存後 var saveMessage = new SavingFileSelectionMessage() { Response = new[] { otherSettingFilePath } }; settingVM.SaveSettingFileDialogCommand.Execute(saveMessage); fileSystem.AllFiles .Should().BeEquivalentTo(new[] { otherSettingFilePath }, because: "設定ファイルが保存されているはず"); fileSystem.File.ReadAllText(otherSettingFilePath) .Should().Contain(newIgnoreExt, because: "設定ファイルの中身に新しい設定値が保存されているはず"); settingVM.PreviousSettingFileDirectory.Value .Should().Be(Path.GetDirectoryName(otherSettingFilePath), "保存したファイルのディレクトリパスになっているはず"); settingVM.PreviousSettingFileName.Value .Should().Be(Path.GetFileName(otherSettingFilePath), "保存したファイル名前になっているはず"); }
public void OtherProperties() { var model = new MainModel(new MockFileSystem(), Scheduler.Immediate); var settingVM = new SettingAppViewModel(model); model.Initialize(); var defaultSetting = new SettingAppModel(); //ステージ1 変更前 settingVM.IsSearchSubDirectories.Value .Should().Be(defaultSetting.IsSearchSubDirectories, "デフォルト設定と同じはず"); settingVM.IsDirectoryRenameTarget.Value .Should().Be(defaultSetting.IsDirectoryRenameTarget, "デフォルト設定と同じはず"); settingVM.IsFileRenameTarget.Value .Should().Be(defaultSetting.IsFileRenameTarget, "デフォルト設定と同じはず"); settingVM.IsHiddenRenameTarget.Value .Should().Be(defaultSetting.IsHiddenRenameTarget, "デフォルト設定と同じはず"); settingVM.IsRenameExt.Value .Should().Be(defaultSetting.IsRenameExt, "デフォルト設定と同じはず"); settingVM.AvailableLanguages .Should().BeEquivalentTo(SettingAppModel.AvailableLanguages, "Modelの静的プロパティと同じはず"); settingVM.AvailableLanguages.Select(x => x.Name) .Should().BeEquivalentTo( new[] { string.Empty, "de", "en", "ja", "ru", "zh" }, becauseArgs: "6個の言語があるはず"); settingVM.SelectedLanguage.Value.Name .Should().Be(defaultSetting.AppLanguageCode, "デフォルト設定と同じはず"); settingVM.IsAppDarkTheme.Value .Should().Be(defaultSetting.IsAppDarkTheme, "デフォルト設定と同じはず"); settingVM.IsCreateRenameLog.Value .Should().Be(defaultSetting.IsCreateRenameLog, "デフォルト設定と同じはず"); //ステージ2 変更後 settingVM.IsSearchSubDirectories.Value ^= true; settingVM.IsDirectoryRenameTarget.Value ^= true; settingVM.IsFileRenameTarget.Value ^= true; settingVM.IsHiddenRenameTarget.Value ^= true; settingVM.IsRenameExt.Value ^= true; settingVM.IsAppDarkTheme.Value ^= true; settingVM.IsCreateRenameLog.Value ^= true; settingVM.SelectedLanguage.Value = settingVM.AvailableLanguages.First(x => x.Name.Contains("ja")); settingVM.IsSearchSubDirectories.Value .Should().Be(!defaultSetting.IsSearchSubDirectories, "デフォルト設定と違うはず"); model.Setting.IsSearchSubDirectories .Should().Be(settingVM.IsSearchSubDirectories.Value, "VMとModelの値は同じはず"); settingVM.IsDirectoryRenameTarget.Value .Should().Be(!defaultSetting.IsDirectoryRenameTarget, "デフォルト設定と違うはず"); model.Setting.IsDirectoryRenameTarget .Should().Be(settingVM.IsDirectoryRenameTarget.Value, "VMとModelの値は同じはず"); settingVM.IsFileRenameTarget.Value .Should().Be(!defaultSetting.IsFileRenameTarget, "デフォルト設定と違うはず"); model.Setting.IsFileRenameTarget .Should().Be(settingVM.IsFileRenameTarget.Value, "VMとModelの値は同じはず"); settingVM.IsHiddenRenameTarget.Value .Should().Be(!defaultSetting.IsHiddenRenameTarget, "デフォルト設定と違うはず"); model.Setting.IsHiddenRenameTarget .Should().Be(settingVM.IsHiddenRenameTarget.Value, "VMとModelの値は同じはず"); settingVM.IsRenameExt.Value .Should().Be(!defaultSetting.IsRenameExt, "デフォルト設定と違うはず"); model.Setting.IsRenameExt .Should().Be(settingVM.IsRenameExt.Value, "VMとModelの値は同じはず"); settingVM.IsAppDarkTheme.Value .Should().Be(!defaultSetting.IsAppDarkTheme, "デフォルト設定と違うはず"); model.Setting.IsAppDarkTheme .Should().Be(settingVM.IsAppDarkTheme.Value, "VMとModelの値は同じはず"); settingVM.SelectedLanguage.Value.Name .Should().NotBe(defaultSetting.AppLanguageCode, "デフォルト設定と違うはず"); model.Setting.AppLanguageCode .Should().Be(settingVM.SelectedLanguage.Value.Name, "VMとModelの値は同じはず"); settingVM.IsCreateRenameLog.Value .Should().Be(!defaultSetting.IsCreateRenameLog, "デフォルト設定と違うはず"); model.Setting.IsCreateRenameLog .Should().Be(settingVM.IsCreateRenameLog.Value, "VMとModelの値は同じはず"); }