示例#1
0
    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("空になったはず");
    }
示例#2
0
    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})");
        }
    }
示例#3
0
    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>]_", "含まれているはず");
    }
示例#4
0
    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, "設定が消去されたはず");
    }
示例#6
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, "連結ファイルパスに元のファイルパスが含まれているはず");
    }
示例#7
0
    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, "追加先で編集しても、元のプロパティは変更されないはず");
    }
示例#8
0
    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), "保存できていないので、デフォルトファイル名前になっているはず");
    }
示例#9
0
    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), "保存したファイル名前になっているはず");
    }
示例#10
0
    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の値は同じはず");
    }