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
106 changes: 106 additions & 0 deletions src/c#/GeneralUpdate.sln
Original file line number Diff line number Diff line change
Expand Up @@ -31,56 +31,162 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtensionTest", "ExtensionT
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GeneralUpdate.Ext", "GeneralUpdate.Ext\GeneralUpdate.Ext.csproj", "{27028918-925E-45D4-BD72-199349B6E6AA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreTest", "..\..\tests\CoreTest\CoreTest.csproj", "{D8B45203-B939-4628-AC77-C477A4AC5F45}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Debug|x64.ActiveCfg = Debug|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Debug|x64.Build.0 = Debug|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Debug|x86.ActiveCfg = Debug|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Debug|x86.Build.0 = Debug|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Release|Any CPU.Build.0 = Release|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Release|x64.ActiveCfg = Release|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Release|x64.Build.0 = Release|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Release|x86.ActiveCfg = Release|Any CPU
{35BFF228-5EE4-49A6-B721-FB0122E967A0}.Release|x86.Build.0 = Release|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Debug|x64.ActiveCfg = Debug|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Debug|x64.Build.0 = Debug|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Debug|x86.ActiveCfg = Debug|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Debug|x86.Build.0 = Debug|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Release|Any CPU.Build.0 = Release|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Release|x64.ActiveCfg = Release|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Release|x64.Build.0 = Release|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Release|x86.ActiveCfg = Release|Any CPU
{BAEFF926-6B2C-46F1-BB73-AA2AB1355565}.Release|x86.Build.0 = Release|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Debug|x64.ActiveCfg = Debug|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Debug|x64.Build.0 = Debug|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Debug|x86.ActiveCfg = Debug|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Debug|x86.Build.0 = Debug|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Release|Any CPU.Build.0 = Release|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Release|x64.ActiveCfg = Release|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Release|x64.Build.0 = Release|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Release|x86.ActiveCfg = Release|Any CPU
{40BDA496-7614-4213-92D0-3B1B187675D3}.Release|x86.Build.0 = Release|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Debug|x64.ActiveCfg = Debug|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Debug|x64.Build.0 = Debug|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Debug|x86.ActiveCfg = Debug|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Debug|x86.Build.0 = Debug|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Release|Any CPU.Build.0 = Release|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Release|x64.ActiveCfg = Release|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Release|x64.Build.0 = Release|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Release|x86.ActiveCfg = Release|Any CPU
{E1F9FF93-CA63-4A9C-82F0-450F09ED81F9}.Release|x86.Build.0 = Release|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Debug|x64.ActiveCfg = Debug|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Debug|x64.Build.0 = Debug|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Debug|x86.ActiveCfg = Debug|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Debug|x86.Build.0 = Debug|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Release|Any CPU.Build.0 = Release|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Release|x64.ActiveCfg = Release|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Release|x64.Build.0 = Release|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Release|x86.ActiveCfg = Release|Any CPU
{7779FB4A-D121-48CC-B033-C3D36BD5D4FF}.Release|x86.Build.0 = Release|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Debug|x64.ActiveCfg = Debug|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Debug|x64.Build.0 = Debug|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Debug|x86.ActiveCfg = Debug|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Debug|x86.Build.0 = Debug|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Release|Any CPU.Build.0 = Release|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Release|x64.ActiveCfg = Release|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Release|x64.Build.0 = Release|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Release|x86.ActiveCfg = Release|Any CPU
{D14E59CD-404B-467B-9C6D-91EFC5994D37}.Release|x86.Build.0 = Release|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Debug|x64.ActiveCfg = Debug|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Debug|x64.Build.0 = Debug|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Debug|x86.ActiveCfg = Debug|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Debug|x86.Build.0 = Debug|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Release|Any CPU.ActiveCfg = Release|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Release|Any CPU.Build.0 = Release|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Release|x64.ActiveCfg = Release|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Release|x64.Build.0 = Release|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Release|x86.ActiveCfg = Release|Any CPU
{49D0687D-1321-48E9-84C3-936B10532367}.Release|x86.Build.0 = Release|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Debug|x64.ActiveCfg = Debug|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Debug|x64.Build.0 = Debug|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Debug|x86.ActiveCfg = Debug|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Debug|x86.Build.0 = Debug|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Release|Any CPU.Build.0 = Release|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Release|x64.ActiveCfg = Release|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Release|x64.Build.0 = Release|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Release|x86.ActiveCfg = Release|Any CPU
{1BA0EEDF-D75A-49E9-9244-EA32DFA130B3}.Release|x86.Build.0 = Release|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Debug|x64.ActiveCfg = Debug|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Debug|x64.Build.0 = Debug|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Debug|x86.ActiveCfg = Debug|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Debug|x86.Build.0 = Debug|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Release|Any CPU.Build.0 = Release|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Release|x64.ActiveCfg = Release|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Release|x64.Build.0 = Release|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Release|x86.ActiveCfg = Release|Any CPU
{7B8E164F-C2D8-4C5F-8E20-450FB56AEB34}.Release|x86.Build.0 = Release|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Debug|x64.ActiveCfg = Debug|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Debug|x64.Build.0 = Debug|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Debug|x86.ActiveCfg = Debug|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Debug|x86.Build.0 = Debug|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Release|Any CPU.Build.0 = Release|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Release|x64.ActiveCfg = Release|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Release|x64.Build.0 = Release|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Release|x86.ActiveCfg = Release|Any CPU
{3FA78F9A-A942-4F7E-A30D-70DF42E8A83D}.Release|x86.Build.0 = Release|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Debug|x64.ActiveCfg = Debug|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Debug|x64.Build.0 = Debug|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Debug|x86.ActiveCfg = Debug|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Debug|x86.Build.0 = Debug|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Release|Any CPU.Build.0 = Release|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Release|x64.ActiveCfg = Release|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Release|x64.Build.0 = Release|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Release|x86.ActiveCfg = Release|Any CPU
{27028918-925E-45D4-BD72-199349B6E6AA}.Release|x86.Build.0 = Release|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Debug|x64.ActiveCfg = Debug|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Debug|x64.Build.0 = Debug|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Debug|x86.ActiveCfg = Debug|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Debug|x86.Build.0 = Debug|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Release|Any CPU.Build.0 = Release|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Release|x64.ActiveCfg = Release|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Release|x64.Build.0 = Release|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Release|x86.ActiveCfg = Release|Any CPU
{D8B45203-B939-4628-AC77-C477A4AC5F45}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
210 changes: 210 additions & 0 deletions tests/CoreTest/Bootstrap/GeneralUpdateBootstrapTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
using GeneralUpdate.Common.Download;
using GeneralUpdate.Common.Internal;
using GeneralUpdate.Common.Shared.Object;
using GeneralUpdate.Core;
using Xunit;

namespace CoreTest.Bootstrap
{
/// <summary>
/// Contains test cases for the GeneralUpdateBootstrap class.
/// Tests the main orchestrator for platform-agnostic update process.
/// </summary>
public class GeneralUpdateBootstrapTests
{
/// <summary>
/// Tests that GeneralUpdateBootstrap can be instantiated.
/// </summary>
[Fact]
public void Constructor_CreatesInstance()
{
// Act
var bootstrap = new GeneralUpdateBootstrap();

// Assert
Assert.NotNull(bootstrap);
}

/// <summary>
/// Tests that SetConfig returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void SetConfig_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
var configInfo = new Configinfo
{
InstallPath = "/test/install",
MainAppName = "TestApp.exe",
UpdateUrl = "https://example.com/update",
ClientVersion = "1.0.0"
};

// Act
var result = bootstrap.SetConfig(configInfo);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that SetFieldMappings returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void SetFieldMappings_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
var fieldMappings = new Dictionary<string, string>
{
{ "field1", "value1" }
};

// Act
var result = bootstrap.SetFieldMappings(fieldMappings);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that SetCustomSkipOption returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void SetCustomSkipOption_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Func<bool> skipFunc = () => false;

// Act
var result = bootstrap.SetCustomSkipOption(skipFunc);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that AddListenerMultiAllDownloadCompleted returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void AddListenerMultiAllDownloadCompleted_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Action<object, MultiAllDownloadCompletedEventArgs> callback = (sender, e) => { };

// Act
var result = bootstrap.AddListenerMultiAllDownloadCompleted(callback);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that AddListenerMultiDownloadCompleted returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void AddListenerMultiDownloadCompleted_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Action<object, MultiDownloadCompletedEventArgs> callback = (sender, e) => { };

// Act
var result = bootstrap.AddListenerMultiDownloadCompleted(callback);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that AddListenerMultiDownloadError returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void AddListenerMultiDownloadError_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Action<object, MultiDownloadErrorEventArgs> callback = (sender, e) => { };

// Act
var result = bootstrap.AddListenerMultiDownloadError(callback);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that AddListenerMultiDownloadStatistics returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void AddListenerMultiDownloadStatistics_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Action<object, MultiDownloadStatisticsEventArgs> callback = (sender, e) => { };

// Act
var result = bootstrap.AddListenerMultiDownloadStatistics(callback);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that AddListenerException returns the bootstrap instance for chaining.
/// </summary>
[Fact]
public void AddListenerException_ReturnsBootstrapInstance()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Action<object, ExceptionEventArgs> callback = (sender, e) => { };

// Act
var result = bootstrap.AddListenerException(callback);

// Assert
Assert.Same(bootstrap, result);
}

/// <summary>
/// Tests that null callback throws ArgumentNullException.
/// </summary>
[Fact]
public void AddListener_WithNullCallback_ThrowsArgumentNullException()
{
// Arrange
var bootstrap = new GeneralUpdateBootstrap();
Action<object, ExceptionEventArgs>? callback = null;

// Act & Assert
Assert.Throws<ArgumentNullException>(() => bootstrap.AddListenerException(callback!));
}

/// <summary>
/// Tests method chaining pattern for configuration.
/// </summary>
[Fact]
public void MethodChaining_ConfigureBootstrap_ReturnsCorrectInstance()
{
// Arrange & Act
var bootstrap = new GeneralUpdateBootstrap()
.SetConfig(new Configinfo
{
InstallPath = "/test/install",
MainAppName = "TestApp.exe",
UpdateUrl = "https://example.com/update",
ClientVersion = "1.0.0"
})
.SetFieldMappings(new Dictionary<string, string> { { "key", "value" } })
.SetCustomSkipOption(() => false)
.AddListenerException((sender, e) => { });

// Assert
Assert.NotNull(bootstrap);
}
}
}
Loading
Loading