Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions .github/workflows/dotnet-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: .NET Framework Tests

on:
push:
paths:
- 'src/**'
- 'tests/**'
- 'FB2Toolbox.sln'
- '**/*.csproj'
- '.github/workflows/dotnet-tests.yml'
pull_request:
paths:
- 'src/**'
- 'tests/**'
- 'FB2Toolbox.sln'
- '**/*.csproj'
- '.github/workflows/dotnet-tests.yml'

jobs:
build-and-test:
# .NET Framework projects (TargetFramework v4.8) require Windows/MSBuild
runs-on: windows-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup MSBuild
uses: microsoft/setup-msbuild@v2

- name: Install NuGet
uses: NuGet/setup-nuget@v1

- name: Restore NuGet packages
run: nuget restore FB2Toolbox.sln
shell: pwsh

- name: Build solution with MSBuild
run: msbuild FB2Toolbox.sln /p:Configuration=Release /m
shell: pwsh

- name: Run unit tests with xUnit
run: |
$testDll = "tests\FB2ToolboxUnitTest\bin\x86\Release\FB2ToolboxUnitTest.dll"

if (-Not (Test-Path $testDll)) {
Write-Error "Test assembly not found at: $testDll"
exit 1
}

Write-Host "Running xUnit tests from: $testDll"

# Use VSTest with xUnit adapter (from xunit.runner.visualstudio package)
# VSTest is available on windows-latest runners
$vstestPath = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"

if (-Not (Test-Path $vstestPath)) {
# Try alternative paths for different VS editions
$vstestPath = Get-ChildItem "C:\Program Files\Microsoft Visual Studio\2022" -Recurse -Filter "vstest.console.exe" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
}

if (-Not $vstestPath) {
Write-Error "vstest.console.exe not found"
exit 1
}

Write-Host "Using VSTest from: $vstestPath"
& $vstestPath $testDll /logger:"console;verbosity=normal"
shell: pwsh
36 changes: 36 additions & 0 deletions docs/RELEASE_v1.9.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
Релиз 1.9.1 - 6 ноября 2025 года

Исправлены мелкие ошибки и внесены улучшения в тестовый код.

### Изменено
- Миграция тестов с MSTest на xUnit
- Замена фреймворка тестирования на xUnit с использованием AwesomeAssertions для более удобных и читаемых утверждений
- Рефакторинг больших тестовых файлов на более мелкие и сфокусированные модули
- Обновление атрибутов тестов (`[TestClass]`, `[TestMethod]`) на эквиваленты xUnit (`[Fact]`, `[Trait]`)
- Модернизация методов утверждений с использованием fluent-синтаксиса (например, `Should().Be`, `Should().Throw`)
- Улучшена читаемость и поддерживаемость тестового кода
- Обновление зависимостей проекта с добавлением xUnit и AwesomeAssertions

### Добавлено
- Новые тестовые файлы для лучшей организации:
- `CharacterSubstitutionElementTests.cs`
- `CommandElementTests.cs`
- `EncodingElementTests.cs`
- `FB2EncoderFallbackBufferTests.cs`
- `FBEncoderFallbackTests.cs`
- `FileMetadataTests.cs`
- `FileOperationResultTests.cs`
- `FilePropertiesTests.cs`
- `GenreSubstitutionElementTests.cs`
- `GenresCollectionTests.cs`
- `RenameProfileElementTests.cs`
- Файл `packages.config` для управления зависимостями NuGet
- Расширенное покрытие тестами с дополнительными тестовыми случаями

### Удалено
- Старые монолитные тестовые файлы (`ConfigTests.cs`, `FileUtilsTests.cs`) в пользу модульной структуры

### Техническая информация
- Рефакторинг структуры тестов улучшает поддерживаемость и масштабируемость проекта
- Использование современных паттернов тестирования для повышения качества кода
- Улучшена обработка исключений в тестах
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,10 @@ <h3>Документация</h3>
<div class="card bg-light mb-3" style="max-width: 20rem;">
<div class="card-body">
<h4 class="card-title">Скачать</h4>
<h6 class="card-subtitle mb-2 text-muted">Версия v1.9</h6>
<h6 class="card-subtitle mb-2 text-muted">Версия v1.9.1</h6>
<p class="card-text">Нажмите чтобы скачать актуальную версию FB2&nbsp;Toolbox:</p>
<a
href="https://github.com/FB2Toolbox/fb2toolbox.github.io/releases/download/v1.9.0/FB2Toolbox-v1.9.0.zip"><button
href="https://github.com/FB2Toolbox/fb2toolbox.github.io/releases/download/v1.9.1/FB2Toolbox-v1.9.1.zip"><button
type="button" class="btn btn-secondary">Скачать</button></a></button>
</div>
</div>
Expand Down
29 changes: 29 additions & 0 deletions tests/FB2ToolboxUnitTest/CharacterSubstitutionElementTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System.ComponentModel;
using AwesomeAssertions;
using FB2Toolbox;
using Xunit;

namespace FB2ToolboxUnitTest
{
public class CharacterSubstitutionElementTests
{
[Fact]
[Trait("Category", "Config")]
[Description("Test CharacterSubstitutionElement properties")]
public void CharacterSubstitutionElement_Properties_Work()
{
// Arrange
var element = new CharacterSubstitutionElement();

// Act
element.From = "?";
element.To = "_";
element.Repeat = 2;

// Assert
element.From.Should().Be("?");
element.To.Should().Be("_");
element.Repeat.Should().Be(2);
}
}
}
35 changes: 35 additions & 0 deletions tests/FB2ToolboxUnitTest/CommandElementTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System.ComponentModel;
using AwesomeAssertions;
using FB2Toolbox;
using Xunit;

namespace FB2ToolboxUnitTest
{
public class CommandElementTests
{
[Fact]
[Trait("Category", "Config")]
[Description("Test CommandElement properties")]
public void CommandElement_Properties_Work()
{
// Arrange
var element = new CommandElement();

// Act
element.Name = "Open with Notepad";
element.FileName = "notepad.exe";
element.Arguments = "{0}";
element.CreateNoWindow = false;
element.OnlyWithExtension = ".fb2";
element.WaitAndReload = true;

// Assert
element.Name.Should().Be("Open with Notepad");
element.FileName.Should().Be("notepad.exe");
element.Arguments.Should().Be("{0}");
element.CreateNoWindow.Should().BeFalse();
element.OnlyWithExtension.Should().Be(".fb2");
element.WaitAndReload.Should().BeTrue();
}
}
}
Loading