LPRun 7.7.3
See the version list below for details.
dotnet add package LPRun --version 7.7.3
NuGet\Install-Package LPRun -Version 7.7.3
<PackageReference Include="LPRun" Version="7.7.3" />
paket add LPRun --version 7.7.3
#r "nuget: LPRun, 7.7.3"
// Install LPRun as a Cake Addin #addin nuget:?package=LPRun&version=7.7.3 // Install LPRun as a Cake Tool #tool nuget:?package=LPRun&version=7.7.3
LINQPad Driver LPRun Unit/Integration Tests Runner
Table of Contents
Description
LINQPad driver LPRun unit/integration tests runner. Can be used for testing LINQPad 7/LINQPad 6 drivers using LPRun or for running LINQPad scripts.
Website
LPRun is a part of CsvLINQPadDriver for LINQPad 7/6/5. LPRun source code can be found here.
Download
Usage
Tested driver MUST NOT be installed via NuGet into LINQPad. In this case LPRun will use it instead of local one.
Setup
LPRun # Created by LPRun NuGet.
Templates # LINQPad script templates.
Data # Optional: Driver data files.
LINQPad Test Script Example
LPRun executes LINQPad test script. Test script uses Fluent Assertions for assertion checks.
StringComparison.linq LINQPad test script example:
var original = Books.First();
var copy = original with { Title = original.Title.ToUpper() };
var expectedEquality = original.Title.Equals(copy.Title, context.StringComparison);
original.Equals(copy).Should().Be(expectedEquality, Reason());
original.GetHashCode()
.Equals(copy.GetHashCode())
.Should()
.Be(expectedEquality, Reason());
Reason()
method (prints exact line number if assertion fails) and context
variable are injected by test below.
NUnit Test Example
Full NUnit test code can be found here.
[TestFixture]
public class LPRunTests
{
[OneTimeSetUp]
public void Init() =>
// Copy driver to LPRun drivers folder.
Driver.InstallWithDepsJson(
// The directory to copy driver files to.
"CsvLINQPadDriver",
// The LINQPad driver files.
"CsvLINQPadDriver.dll",
// The test folder path.
"Tests");
[Test]
[TestCaseSource(nameof(TestsData))]
public void Execute_ScriptWithDriverProperties_Success(
(string linqScriptName,
string? context,
ICsvDataContextDriverProperties driverProperties) testData)
{
var (linqScriptName, context, driverProperties) = testData;
// Arrange: Create query connection header. Custom code can be added here.
var queryConfig = GetQueryHeaders().Aggregate(
new StringBuilder(),
(stringBuilder, h) =>
{
stringBuilder.AppendLine(h);
stringBuilder.AppendLine();
return stringBuilder;
}).ToString();
// Arrange: Create test LNQPad script.
var linqScript = LinqScript.Create(
$"{linqScriptName}.linq",
queryConfig);
// Act: Execute test LNQPad script.
var (output, error, exitCode) =
Runner.Execute(linqScript);
// Assert.
error.Should().BeNullOrWhiteSpace();
exitCode.Should().Be(0);
// Helpers.
IEnumerable<string> GetQueryHeaders()
{
// Connection header.
yield return ConnectionHeader.Get(
"CsvLINQPadDriver",
"CsvLINQPadDriver.CsvDataContextDriver",
driverProperties,
"System.Runtime.CompilerServices");
// FluentAssertions helper.
yield return
@"string Reason([CallerLineNumber] int sourceLineNumber = 0) =>" +
@" $""something went wrong at line #{sourceLineNumber}"";";
// Test context.
if (!string.IsNullOrWhiteSpace(context))
{
yield return $"var context = {context};";
}
}
}
private static IEnumerable<
(string linqScriptName,
string? context,
ICsvDataContextDriverProperties driverProperties)> TestsData()
{
// Omitted for brevity.
}
}
Tests can also be run in parallel:
[TestFixture]
public class LPRunTests
{
[Test]
[Parallelizable(ParallelScope.Children)]
[TestCaseSource(nameof(ParallelizableTestsData))]
public void Execute_ScriptWithDriverProperties_Success(
(string linqScriptName,
string? context,
ICsvDataContextDriverProperties driverProperties,
int index) testData)
{
// ...
// Arrange: Create test LNQPad script.
var linqScript = LinqScript.Create(
$"{linqScriptName}.linq",
queryConfig,
$"{linqScriptName}_{testData.index}");
// ...
}
private static IEnumerable<
(string linqScriptName,
string? context,
ICsvDataContextDriverProperties driverProperties,
int index)> TestsData()
{
// Omitted for brevity.
}
// Parallelized tests data.
private static IEnumerable<
(string linqScriptName,
string? context,
ICsvDataContextDriverProperties driverProperties,
int index)> ParallelizableTestsData() =>
TestsData().AugmentWithFileIndex(
static testData => testData.linqScriptName,
static (testData, index) => { testData.index = index; return testData; });
}
Known Issues
- Tested with NUnit. Other test frameworks should work as well.
Authors
- Ivan Ivon (ivan.ivon@gmail.com)
Credits
Tools
NuGet
License
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
8.6.6 | 155 | 11/5/2024 |
8.6.5 | 94 | 11/1/2024 |
8.6.4 | 183 | 10/6/2024 |
8.6.2 | 213 | 9/15/2024 |
8.6.1 | 99 | 8/5/2024 |
8.5.5 | 112 | 7/26/2024 |
8.5.4 | 94 | 7/23/2024 |
8.5.3 | 160 | 7/20/2024 |
8.5.2 | 118 | 7/18/2024 |
8.5.1 | 205 | 7/4/2024 |
8.4.11 | 161 | 6/19/2024 |
8.4.10 | 113 | 6/11/2024 |
8.4.9 | 131 | 6/5/2024 |
8.4.8 | 107 | 5/27/2024 |
8.4.7 | 138 | 5/24/2024 |
8.4.5 | 141 | 5/22/2024 |
8.4.4 | 142 | 5/17/2024 |
8.4.3 | 137 | 5/14/2024 |
8.4.2 | 189 | 5/10/2024 |
8.4.1 | 199 | 4/30/2024 |
8.3.7 | 158 | 4/18/2024 |
8.3.6 | 216 | 4/14/2024 |
8.3.5 | 207 | 4/7/2024 |
8.3.3 | 187 | 3/21/2024 |
8.3.2 | 232 | 3/13/2024 |
8.3.1 | 174 | 3/12/2024 |
8.2.4 | 147 | 2/17/2024 |
8.2.3 | 156 | 2/13/2024 |
8.2.2 | 196 | 1/23/2024 |
8.1.6 | 163 | 1/17/2024 |
8.1.3 | 232 | 1/3/2024 |
8.1.2 | 210 | 12/27/2023 |
8.1.1 | 178 | 12/22/2023 |
8.0.18 | 284 | 12/5/2023 |
8.0.17 | 230 | 11/26/2023 |
8.0.16 | 249 | 11/25/2023 |
8.0.15 | 189 | 11/24/2023 |
8.0.14 | 213 | 11/22/2023 |
8.0.13 | 191 | 11/18/2023 |
8.0.12 | 199 | 11/17/2023 |
8.0.11 | 181 | 11/16/2023 |
8.0.10 | 210 | 11/15/2023 |
8.0.9 | 202 | 11/12/2023 |
7.8.10 | 146 | 2/14/2024 |
7.8.7 | 233 | 11/26/2023 |
7.8.6 | 353 | 9/14/2023 |
7.8.5 | 401 | 8/1/2023 |
7.8.4 | 315 | 7/13/2023 |
7.8.3 | 310 | 7/3/2023 |
7.8.2 | 295 | 6/16/2023 |
7.8.1 | 298 | 6/9/2023 |
7.7.15 | 282 | 5/31/2023 |
7.7.14 | 281 | 5/29/2023 |
7.7.13 | 275 | 5/23/2023 |
7.7.12 | 307 | 5/18/2023 |
7.7.11 | 332 | 5/10/2023 |
7.7.10 | 412 | 4/19/2023 |
7.7.9 | 410 | 4/4/2023 |
7.7.8 | 437 | 4/4/2023 |
7.7.7 | 489 | 3/21/2023 |
7.7.6 | 484 | 3/18/2023 |
7.7.4 | 404 | 3/13/2023 |
7.7.3 | 495 | 2/20/2023 |
7.7.2 | 423 | 2/13/2023 |
7.7.1 | 480 | 2/1/2023 |
7.6.6 | 577 | 1/5/2023 |
7.6.5 | 444 | 12/24/2022 |
7.6.4 | 480 | 12/7/2022 |
7.6.3 | 509 | 11/26/2022 |
7.6.2 | 476 | 11/16/2022 |
7.5.16 | 503 | 11/14/2022 |
7.5.15 | 504 | 11/13/2022 |
7.5.14 | 534 | 11/11/2022 |
7.5.13 | 500 | 11/10/2022 |
7.5.12 | 526 | 10/31/2022 |
7.5.11 | 568 | 10/30/2022 |
7.5.10 | 545 | 10/25/2022 |
7.5.9 | 537 | 10/9/2022 |
7.5.8 | 523 | 10/6/2022 |
7.5.7 | 539 | 10/3/2022 |
7.5.6 | 584 | 9/26/2022 |
7.5.5 | 592 | 9/23/2022 |
7.5.4 | 593 | 9/20/2022 |
7.5.3 | 586 | 9/16/2022 |
7.5.2 | 611 | 8/28/2022 |
7.5.1 | 624 | 8/26/2022 |
7.4.9.1 | 672 | 8/3/2022 |
7.4.8 | 648 | 7/31/2022 |
7.4.7 | 657 | 7/25/2022 |
7.4.6 | 676 | 7/19/2022 |
7.4.5 | 700 | 7/15/2022 |
7.4.4 | 707 | 7/6/2022 |
7.4.3 | 702 | 6/8/2022 |
7.4.2 | 694 | 5/11/2022 |
7.4.1 | 661 | 5/3/2022 |
7.3.9 | 676 | 4/19/2022 |
7.3.6 | 671 | 3/25/2022 |
7.3.5 | 642 | 3/17/2022 |
7.3.4 | 650 | 3/15/2022 |
7.3.2 | 597 | 2/23/2022 |
7.3.1 | 598 | 2/17/2022 |
6.14.11 | 514 | 9/1/2021 |
6.14.10 | 628 | 7/18/2021 |
6.13.14 | 506 | 5/10/2021 |
6.13.13 | 534 | 5/5/2021 |
LPRun 7.7.3