diff --git a/.appveyor.yml b/.appveyor.yml
index 2b5f541..c180aec 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -6,6 +6,10 @@ image: Visual Studio 2017
#---------------------------------#
# Build Script #
#---------------------------------#
+install:
+ # Update to latest NuGet version since we require 5.3.0 for embedded icon
+ - ps: nuget update -self
+
build_script:
- ps: .\build.ps1 -Target AppVeyor
@@ -27,4 +31,4 @@ branches:
# Build Cache #
#---------------------------------#
cache:
-- tools -> setup.cake
\ No newline at end of file
+- tools -> recipe.cake
diff --git a/README.md b/README.md
index 200e284..088067e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# Cake.Npm Addin
This Addin for the Cake Build Automation System allows you to run [npm](https://www.npmjs.com/).
-More about Cake at http://cakebuild.net
+More about Cake at [cakebuild.net](http://cakebuild.net).
[![License](http://img.shields.io/:license-mit-blue.svg)](http://cake-contrib.mit-license.org)
@@ -16,7 +16,7 @@ More about Cake at http://cakebuild.net
|Develop|Master|
|:--:|:--:|
-|[![Build status](https://ci.appveyor.com/api/projects/status/5fbkekpb5roh39m8/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-npm/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/5fbkekpb5roh39m8/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-npm/branch/master)|
+|[![Build status](https://ci.appveyor.com/api/projects/status/5fbkekpb5roh39m8/branch/develop?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-npm/branch/develop)|[![Build status](https://ci.appveyor.com/api/projects/status/5fbkekpb5roh39m8/branch/master?svg=true)](https://ci.appveyor.com/project/cakecontrib/cake-npm/branch/master)|
## Code Coverage
@@ -26,14 +26,14 @@ More about Cake at http://cakebuild.net
- [Documentation](https://cake-contrib.github.io/Cake.Npm)
-## Chat Room
+## Discussion
-Come join in the conversation about Cake.Yeoman in our Gitter Chat Room
+If you have questions, search for an existing one, or create a new discussion on the Cake GitHub repository, using the `Extension Q&A` category.
-[![Join the chat at https://gitter.im/cake-contrib/Lobby](https://badges.gitter.im/cake-contrib/Lobby.svg)](https://gitter.im/cake-contrib/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Join in the discussion on the Cake repository](https://img.shields.io/badge/GitHub-Discussions-green?logo=github)](https://github.com/cake-build/cake/discussions/categories/extension-q-a)
## Contributing
Contributions are welcome. See [Contribution Guidelines].
-[Contribution Guidelines]: CONTRIBUTING.md
\ No newline at end of file
+[Contribution Guidelines]: CONTRIBUTING.md
diff --git a/build.ps1 b/build.ps1
index bdfb32b..9a6ade2 100644
--- a/build.ps1
+++ b/build.ps1
@@ -5,11 +5,14 @@
##########################################################################
<#
+
.SYNOPSIS
This is a Powershell script to bootstrap a Cake build.
+
.DESCRIPTION
This Powershell script will download NuGet if missing, restore NuGet tools (including Cake)
and execute your Cake build script with the parameters you provide.
+
.PARAMETER Script
The build script to execute.
.PARAMETER Target
@@ -18,32 +21,36 @@ The build script target to run.
The build configuration to use.
.PARAMETER Verbosity
Specifies the amount of information to be displayed.
+.PARAMETER ShowDescription
+Shows description about tasks.
+.PARAMETER DryRun
+Performs a dry run.
.PARAMETER Experimental
-Tells Cake to use the latest Roslyn release.
-.PARAMETER WhatIf
-Performs a dry run of the build script.
-No tasks will be executed.
+Uses the nightly builds of the Roslyn script engine.
.PARAMETER Mono
-Tells Cake to use the Mono scripting engine.
+Uses the Mono compiler rather than the Roslyn script engine.
.PARAMETER SkipToolPackageRestore
Skips restoring of packages.
.PARAMETER ScriptArgs
Remaining arguments are added here.
+
.LINK
-http://cakebuild.net
+https://cakebuild.net
+
#>
[CmdletBinding()]
Param(
- [string]$Script = "setup.cake",
+ [string]$Script = "recipe.cake",
[string]$Target = "Default",
[ValidateSet("Release", "Debug")]
[string]$Configuration = "Release",
[ValidateSet("Quiet", "Minimal", "Normal", "Verbose", "Diagnostic")]
[string]$Verbosity = "Verbose",
+ [switch]$ShowDescription,
+ [Alias("WhatIf", "Noop")]
+ [switch]$DryRun,
[switch]$Experimental,
- [Alias("DryRun","Noop")]
- [switch]$WhatIf,
[switch]$Mono,
[switch]$SkipToolPackageRestore,
[Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
@@ -75,6 +82,15 @@ function MD5HashFile([string] $filePath)
}
}
+function GetProxyEnabledWebClient
+{
+ $wc = New-Object System.Net.WebClient
+ $proxy = [System.Net.WebRequest]::GetSystemWebProxy()
+ $proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials
+ $wc.Proxy = $proxy
+ return $wc
+}
+
Write-Host "Preparing to run build script..."
if(!$PSScriptRoot){
@@ -82,31 +98,15 @@ if(!$PSScriptRoot){
}
$TOOLS_DIR = Join-Path $PSScriptRoot "tools"
+$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins"
+$MODULES_DIR = Join-Path $TOOLS_DIR "Modules"
$NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe"
$CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe"
$NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"
$PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config"
$PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum"
-
-# Should we use mono?
-$UseMono = "";
-if($Mono.IsPresent) {
- Write-Verbose -Message "Using the Mono based scripting engine."
- $UseMono = "-mono"
-}
-
-# Should we use the new Roslyn?
-$UseExperimental = "";
-if($Experimental.IsPresent -and !($Mono.IsPresent)) {
- Write-Verbose -Message "Using experimental version of Roslyn."
- $UseExperimental = "-experimental"
-}
-
-# Is this a dry run?
-$UseDryRun = "";
-if($WhatIf.IsPresent) {
- $UseDryRun = "-dryrun"
-}
+$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config"
+$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config"
# Make sure tools folder exists
if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
@@ -116,8 +116,10 @@ if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) {
# Make sure that packages.config exist.
if (!(Test-Path $PACKAGES_CONFIG)) {
- Write-Verbose -Message "Downloading packages.config..."
- try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch {
+ Write-Verbose -Message "Downloading packages.config..."
+ try {
+ $wc = GetProxyEnabledWebClient
+ $wc.DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch {
Throw "Could not download packages.config."
}
}
@@ -125,7 +127,7 @@ if (!(Test-Path $PACKAGES_CONFIG)) {
# Try find NuGet.exe in path if not exists
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Trying to find nuget.exe in PATH..."
- $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) }
+ $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) }
$NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1
if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) {
Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)."
@@ -137,7 +139,8 @@ if (!(Test-Path $NUGET_EXE)) {
if (!(Test-Path $NUGET_EXE)) {
Write-Verbose -Message "Downloading NuGet.exe..."
try {
- (New-Object System.Net.WebClient).DownloadFile($NUGET_URL, $NUGET_EXE)
+ $wc = GetProxyEnabledWebClient
+ $wc.DownloadFile($NUGET_URL, $NUGET_EXE)
} catch {
Throw "Could not download NuGet.exe."
}
@@ -160,16 +163,51 @@ if(-Not $SkipToolPackageRestore.IsPresent) {
}
Write-Verbose -Message "Restoring tools from NuGet..."
- $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -PreRelease -OutputDirectory `"$TOOLS_DIR`" -Source https://www.myget.org/F/cake/api/v3/index.json"
+ $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$TOOLS_DIR`""
if ($LASTEXITCODE -ne 0) {
- Throw "An error occured while restoring NuGet tools."
+ Throw "An error occurred while restoring NuGet tools."
}
else
{
$md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII"
}
Write-Verbose -Message ($NuGetOutput | out-string)
+
+ Pop-Location
+}
+
+# Restore addins from NuGet
+if (Test-Path $ADDINS_PACKAGES_CONFIG) {
+ Push-Location
+ Set-Location $ADDINS_DIR
+
+ Write-Verbose -Message "Restoring addins from NuGet..."
+ $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`""
+
+ if ($LASTEXITCODE -ne 0) {
+ Throw "An error occurred while restoring NuGet addins."
+ }
+
+ Write-Verbose -Message ($NuGetOutput | out-string)
+
+ Pop-Location
+}
+
+# Restore modules from NuGet
+if (Test-Path $MODULES_PACKAGES_CONFIG) {
+ Push-Location
+ Set-Location $MODULES_DIR
+
+ Write-Verbose -Message "Restoring modules from NuGet..."
+ $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`""
+
+ if ($LASTEXITCODE -ne 0) {
+ Throw "An error occurred while restoring NuGet modules."
+ }
+
+ Write-Verbose -Message ($NuGetOutput | out-string)
+
Pop-Location
}
@@ -178,7 +216,18 @@ if (!(Test-Path $CAKE_EXE)) {
Throw "Could not find Cake.exe at $CAKE_EXE"
}
+# Build Cake arguments
+$cakeArguments = @("$Script");
+if ($Target) { $cakeArguments += "-target=$Target" }
+if ($Configuration) { $cakeArguments += "-configuration=$Configuration" }
+if ($Verbosity) { $cakeArguments += "-verbosity=$Verbosity" }
+if ($ShowDescription) { $cakeArguments += "-showdescription" }
+if ($DryRun) { $cakeArguments += "-dryrun" }
+if ($Experimental) { $cakeArguments += "-experimental" }
+if ($Mono) { $cakeArguments += "-mono" }
+$cakeArguments += $ScriptArgs
+
# Start Cake
Write-Host "Running build script..."
-Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs"
+&$CAKE_EXE $cakeArguments
exit $LASTEXITCODE
\ No newline at end of file
diff --git a/build.sh b/build.sh
old mode 100644
new mode 100755
index a541ec1..4b690aa
--- a/build.sh
+++ b/build.sh
@@ -1,33 +1,36 @@
#!/usr/bin/env bash
-###############################################################
-# This is the Cake bootstrapper script that is responsible for
-# downloading Cake and all specified tools from NuGet.
-###############################################################
+##########################################################################
+# This is the Cake bootstrapper script for Linux and OS X.
+# This file was downloaded from https://github.com/cake-build/resources
+# Feel free to change this file to fit your needs.
+##########################################################################
# Define directories.
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
TOOLS_DIR=$SCRIPT_DIR/tools
NUGET_EXE=$TOOLS_DIR/nuget.exe
-CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
+NUGET_URL=https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
+CAKE_VERSION=0.32.1
+CAKE_EXE=$TOOLS_DIR/Cake.$CAKE_VERSION/Cake.exe
+
+# Temporarily skip verification of addins.
+export CAKE_SETTINGS_SKIPVERIFICATION='true'
# Define default arguments.
-SCRIPT="setup.cake"
+SCRIPT="recipe.cake"
TARGET="Default"
CONFIGURATION="Release"
VERBOSITY="verbose"
DRYRUN=
-SHOW_VERSION=false
SCRIPT_ARGUMENTS=()
# Parse arguments.
for i in "$@"; do
case $1 in
- -s|--script) SCRIPT="$2"; shift ;;
-t|--target) TARGET="$2"; shift ;;
-c|--configuration) CONFIGURATION="$2"; shift ;;
-v|--verbosity) VERBOSITY="$2"; shift ;;
-d|--dryrun) DRYRUN="-dryrun" ;;
- --version) SHOW_VERSION=true ;;
--) shift; SCRIPT_ARGUMENTS+=("$@"); break ;;
*) SCRIPT_ARGUMENTS+=("$1") ;;
esac
@@ -35,48 +38,66 @@ for i in "$@"; do
done
# Make sure the tools folder exist.
-if [ ! -d $TOOLS_DIR ]; then
- mkdir $TOOLS_DIR
+if [ ! -d "$TOOLS_DIR" ]; then
+ mkdir "$TOOLS_DIR"
fi
-# Make sure that packages.config exist.
-if [ ! -f $TOOLS_DIR/packages.config ]; then
- echo "Downloading packages.config..."
- curl -Lsfo $TOOLS_DIR/packages.config http://cakebuild.net/bootstrapper/packages
- if [ $? -ne 0 ]; then
- echo "An error occured while downloading packages.config."
- exit 1
- fi
+# Print Mono version.
+echo "Mono version:"
+mono --version
+echo ""
+
+###########################################################################
+# INSTALL .NET CORE CLI
+###########################################################################
+
+echo "Installing .NET CLI..."
+if [ ! -d "$SCRIPT_DIR/.dotnet" ]; then
+ mkdir "$SCRIPT_DIR/.dotnet"
fi
+curl -Lsfo "$SCRIPT_DIR/.dotnet/dotnet-install.sh" https://dot.net/v1/dotnet-install.sh
+sudo bash "$SCRIPT_DIR/.dotnet/dotnet-install.sh" --version 2.1.400 --install-dir .dotnet --no-path
+export PATH="$SCRIPT_DIR/.dotnet":$PATH
+export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+export DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0
+"$SCRIPT_DIR/.dotnet/dotnet" --info
+
+###########################################################################
+# INSTALL NUGET
+###########################################################################
# Download NuGet if it does not exist.
-if [ ! -f $NUGET_EXE ]; then
+if [ ! -f "$NUGET_EXE" ]; then
echo "Downloading NuGet..."
- curl -Lsfo $NUGET_EXE https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
+ curl -Lsfo "$NUGET_EXE" $NUGET_URL
if [ $? -ne 0 ]; then
- echo "An error occured while downloading nuget.exe."
+ echo "An error occurred while downloading nuget.exe."
exit 1
fi
fi
-# Restore tools from NuGet.
-pushd $TOOLS_DIR >/dev/null
-mono $NUGET_EXE install -ExcludeVersion -PreRelease -Source https://www.myget.org/F/cake/api/v3/index.json
-if [ $? -ne 0 ]; then
- echo "Could not restore NuGet packages."
- exit 1
+###########################################################################
+# INSTALL CAKE
+###########################################################################
+
+if [ ! -f "$CAKE_EXE" ]; then
+ mono "$NUGET_EXE" install Cake -Version $CAKE_VERSION -OutputDirectory "$TOOLS_DIR"
+ if [ $? -ne 0 ]; then
+ echo "An error occurred while installing Cake."
+ exit 1
+ fi
fi
-popd >/dev/null
# Make sure that Cake has been installed.
-if [ ! -f $CAKE_EXE ]; then
+if [ ! -f "$CAKE_EXE" ]; then
echo "Could not find Cake.exe at '$CAKE_EXE'."
exit 1
fi
+###########################################################################
+# RUN BUILD SCRIPT
+###########################################################################
+
# Start Cake
-if $SHOW_VERSION; then
- exec mono $CAKE_EXE -version
-else
- exec mono $CAKE_EXE $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}"
-fi
+exec mono "$CAKE_EXE" $SCRIPT --verbosity=$VERBOSITY --configuration=$CONFIGURATION --target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}"
diff --git a/docs/input/_Bottom.cshtml b/docs/input/_Bottom.cshtml
index 9309d39..98b6ff5 100644
--- a/docs/input/_Bottom.cshtml
+++ b/docs/input/_Bottom.cshtml
@@ -1,12 +1,10 @@
-
-
+
+
+ Discussion
+
diff --git a/docs/input/assets/css/override.less b/docs/input/assets/css/override.less
index 74d8ed4..7e1f7ed 100644
--- a/docs/input/assets/css/override.less
+++ b/docs/input/assets/css/override.less
@@ -71,9 +71,9 @@ pre:hover .btn-copy {
@font-family-sans-serif: "Roboto", Helvetica, Arial, sans-serif;
-/* For Gitter and GitHub */
+/* For GitHub */
.bottom-footer {
- margin-bottom: 40px !important; // Make room for Gitter and GitHub buttons
+ margin-bottom: 40px !important; // Make room for GitHub buttons
}
.gitter-open-chat-button {
@@ -84,7 +84,7 @@ pre:hover .btn-copy {
}
.gitter-open-chat-button:focus, .gitter-open-chat-button:hover,
-.github-button:focus, .github-button:hover,
+.github-button:focus, .github-button:hover
{
background-color: #4EABDD;
color: #fff;
@@ -96,11 +96,36 @@ pre:hover .btn-copy {
z-index: 10000;
}
+.discussion-button {
+ z-index: 100;
+ position: fixed;
+ bottom: 0px;
+ right: 80px;
+ padding: 1em 3em;
+ background-color: #367fa9;
+ border: 0;
+ border-top-left-radius: 0.5em;
+ border-top-right-radius: 0.5em;
+ font-family: sans-serif;
+ font-size: 9pt;
+ text-transform: uppercase;
+ text-align: center;
+ text-decoration: none;
+ cursor: pointer;
+ cursor: hand;
+ -webkit-transition: all .3s ease;
+ transition: all .3s ease;
+ color: #fff;
+ a, a:active, a:hover, a:focus {
+ color: #fff;
+ }
+}
+
.github-button {
z-index: 100;
position: fixed;
bottom: 0px;
- right: 240px;
+ right: 255px;
padding: 1em 3em;
background-color: #367fa9;
border: 0;
diff --git a/nuspec/nuget/Cake.Npm.nuspec b/nuspec/nuget/Cake.Npm.nuspec
index 56dd83a..6a8541c 100644
--- a/nuspec/nuget/Cake.Npm.nuspec
+++ b/nuspec/nuget/Cake.Npm.nuspec
@@ -10,15 +10,16 @@
A set of aliases for Cake to help with running Npm (Node Package Manager) commands
MIT
https://github.com/cake-contrib/cake-npm
- https://cdn.jsdelivr.net/gh/cake-contrib/graphics@a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png
+ icon.png
false
-
+
cake npm cake-build cake-contrib
- https://github.com/cake-contrib/Cake.Npm/releases/tag/0.17.0
+ https://github.com/cake-contrib/Cake.Npm/releases/tag/1.0.0
+
-
\ No newline at end of file
+
diff --git a/nuspec/nuget/icon.png b/nuspec/nuget/icon.png
new file mode 100644
index 0000000..9881edc
Binary files /dev/null and b/nuspec/nuget/icon.png differ
diff --git a/setup.cake b/recipe.cake
similarity index 86%
rename from setup.cake
rename to recipe.cake
index 7f8f666..1a105f5 100644
--- a/setup.cake
+++ b/recipe.cake
@@ -1,4 +1,4 @@
-#load nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.Recipe&prerelease
+#load nuget:?package=Cake.Recipe&version=1.0.0
Environment.SetVariableNames();
@@ -10,8 +10,10 @@ BuildParameters.SetParameters(
repositoryOwner: "cake-contrib",
repositoryName: "Cake.Npm",
appVeyorAccountName: "cakecontrib",
+ shouldPublishMyGet: false,
shouldRunDupFinder: false,
- shouldRunCodecov: false);
+ shouldRunCodecov: false,
+ shouldRunGitVersion: true);
BuildParameters.PrintParameters(Context);
diff --git a/src/Cake.Npm.Tests/BumpVersion/NpmBumpVersionToolFixture.cs b/src/Cake.Npm.Tests/BumpVersion/NpmBumpVersionToolFixture.cs
new file mode 100644
index 0000000..0926dc3
--- /dev/null
+++ b/src/Cake.Npm.Tests/BumpVersion/NpmBumpVersionToolFixture.cs
@@ -0,0 +1,14 @@
+
+namespace Cake.Npm.Tests.BumpVersion
+{
+ using Cake.Npm.BumpVersion;
+
+ internal sealed class NpmBumpVersionToolFixture : NpmFixture
+ {
+ protected override void RunTool()
+ {
+ var tool = new NpmBumpVersionTool(FileSystem, Environment, ProcessRunner, Tools, Log);
+ tool.BumpVersion(Settings);
+ }
+ }
+}
diff --git a/src/Cake.Npm.Tests/BumpVersion/NpmBumpVersionToolTests.cs b/src/Cake.Npm.Tests/BumpVersion/NpmBumpVersionToolTests.cs
new file mode 100644
index 0000000..0abd09e
--- /dev/null
+++ b/src/Cake.Npm.Tests/BumpVersion/NpmBumpVersionToolTests.cs
@@ -0,0 +1,155 @@
+namespace Cake.Npm.Tests.BumpVersion
+{
+ using Npm.BumpVersion;
+
+ using System;
+ using System.Collections;
+ using System.Collections.Generic;
+
+ using Xunit;
+
+ public class NpmBumpVersionToolTests
+ {
+ public sealed class TheBumpVersionMethod
+ {
+ private NpmBumpVersionToolFixture fixture;
+
+ public TheBumpVersionMethod()
+ {
+ fixture = new NpmBumpVersionToolFixture();
+ }
+
+ [Fact]
+ public void Should_Throw_If_Settings_Are_Null()
+ {
+ // Given
+ fixture.Settings = null;
+
+ // When
+ var result = Record.Exception(() => fixture.Run());
+
+ // Then
+ result.IsArgumentNullException("settings");
+ }
+
+ [Theory]
+ [ClassData(typeof(ExtensionNullCheckData))]
+ public void Should_Throw_If_Settings_Are_Null_For_All_Extensions(Action extensionAction)
+ {
+ // Given
+ fixture.Settings = null;
+
+ // When
+ var result = Record.Exception(() => extensionAction(fixture.Settings));
+
+ // Then
+ result.IsArgumentNullException("settings");
+ }
+
+ [Fact]
+ public void Should_Add_Mandatory_And_Default_Arguments()
+ {
+ // Given
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version minor", result.Args);
+ }
+
+ [Fact]
+ public void Should_Add_Version_Argument()
+ {
+ // Given
+ fixture.Settings.Version = "1.2.3";
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version 1.2.3", result.Args);
+ }
+
+ [Fact]
+ public void Should_Add_Version_Argument_Using_Extensions()
+ {
+ // Given
+ fixture.Settings.WithVersion("1.2.3");
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version 1.2.3", result.Args);
+ }
+
+ [Fact]
+ public void Should_Add_Force_Switch()
+ {
+ // Given
+ fixture.Settings.Force = true;
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version minor -f", result.Args);
+ }
+
+ [Fact]
+ public void Should_Add_Force_Switch_Using_Extension()
+ {
+ // Given
+ fixture.Settings.WithForce();
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version minor -f", result.Args);
+ }
+
+ [Fact]
+ public void Should_Add_CommitMessage_Option()
+ {
+ // Given
+ fixture.Settings.CommitMessage = "Bumped minor version.";
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version minor -m \"Bumped minor version.\"", result.Args);
+ }
+
+ [Fact]
+ public void Should_Add_CommitMessage_Option_Using_Extension()
+ {
+ // Given
+ fixture.Settings.WithCommitMessage("Bumped minor version.");
+
+ // When
+ var result = fixture.Run();
+
+ // Then
+ Assert.Equal("version minor -m \"Bumped minor version.\"", result.Args);
+ }
+
+ class ExtensionNullCheckData : IEnumerable