Skip to content
Open
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
2 changes: 2 additions & 0 deletions SerilogSinksInMemory.sln
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Serilog.Sinks.InMemory.Asse
test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\WhenAssertingPropertyValuesOnMultipleMessages.cs = test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\WhenAssertingPropertyValuesOnMultipleMessages.cs
test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\WhenAssertingScalarLogPropertyExists.cs = test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\WhenAssertingScalarLogPropertyExists.cs
test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\WhenAssertingStructuredLogPropertyExists.cs = test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\WhenAssertingStructuredLogPropertyExists.cs
test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\TestInMemorySinkAssertionExtensions.cs = test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\TestInMemorySinkAssertionExtensions.cs
test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\GlobalUsings.cs = test\Serilog.Sinks.InMemory.Assertions.Tests.Unit\GlobalUsings.cs
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Serilog.Sinks.InMemory.FluentAssertions7", "src\Serilog.Sinks.InMemory.FluentAssertions7\Serilog.Sinks.InMemory.FluentAssertions7.csproj", "{3EDF7A6B-C2D5-462C-898A-4293B3BE45D3}"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#nullable enable
namespace Serilog.Sinks.InMemory.Assertions;

public readonly struct AssertionExtension<T>
{
private readonly IInMemorySinkAssertionsExtension _extension;

public AssertionExtension(T assertions, IInMemorySinkAssertionsExtension extension)
{
_extension = extension;
Assertions = assertions;
}

public T Assertions { get; }

public AssertionFramework AssertionFramework => _extension.AssertionFramework;

public void Assert(bool condition, FailMessage failureMessage, string because = "", params object[] becauseArgs)
{
_extension.Assert(condition, failureMessage, because, becauseArgs);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#nullable enable
using System;

namespace Serilog.Sinks.InMemory.Assertions;

public readonly struct AssertionFramework
{
public AssertionFramework(AssertionFrameworks framework, Version version)
{
Framework = framework;
Version = version;
}

public AssertionFrameworks Framework { get; }

public Version Version { get; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace Serilog.Sinks.InMemory.Assertions;

public enum AssertionFrameworks
{
Unknown = 0,
FluentAssertions = 1,
AwesomeAssertions = 2,
Shouldly = 3
}
19 changes: 19 additions & 0 deletions src/Serilog.Sinks.InMemory.Assertions.Abstractions/FailMessage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#nullable enable
namespace Serilog.Sinks.InMemory.Assertions;

public readonly struct FailMessage
{
public static implicit operator FailMessage(string value)
{
return new FailMessage(value);
}

public FailMessage(string message, params object?[] args)
{
Message = message;
Args = args;
}

public string Message { get; }
public object?[] Args { get; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#nullable enable
namespace Serilog.Sinks.InMemory.Assertions;

public interface IInMemorySinkAssertionsExtension
{
void Assert(
bool condition,
FailMessage failureMessage,
string because = "",
params object[] becauseArgs);

AssertionFramework AssertionFramework { get; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Serilog.Sinks.InMemory.Assertions;

public interface ISubjectAssertions<out T>
{
T Subject { get; }
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
namespace Serilog.Sinks.InMemory.Assertions
#nullable enable

using System;
using Serilog.Events;

namespace Serilog.Sinks.InMemory.Assertions
{
public interface InMemorySinkAssertions
public interface InMemorySinkAssertions : ISubjectAssertions<InMemorySink>
{
LogEventsAssertions HaveMessage(
Func<LogEvent, bool> predicate,
string? predicateErrorName = null,
string because = "",
params object[] becauseArgs);

LogEventsAssertions HaveMessage(
string messageTemplate,
string because = "",
Expand All @@ -10,7 +21,13 @@ LogEventsAssertions HaveMessage(
PatternLogEventsAssertions HaveMessage();

void NotHaveMessage(
string messageTemplate = null,
string? messageTemplate = null,
string because = "",
params object[] becauseArgs);

void NotHaveMessage(
Func<LogEvent, bool> predicate,
string? predicateErrorName = null,
string because = "",
params object[] becauseArgs);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#nullable enable
using System;

namespace Serilog.Sinks.InMemory.Assertions;

/// <summary>
/// InMemory logger assertion extensibility extension.
/// </summary>
public static class InMemorySinkAssertionsExtensions
{
public static AssertionExtension<InMemorySinkAssertions> ToAssertion(
this InMemorySinkAssertions assertions)
{
if (assertions == null) throw new ArgumentNullException(nameof(assertions));
return new AssertionExtension<InMemorySinkAssertions>(assertions, (IInMemorySinkAssertionsExtension)assertions);
}

public static AssertionExtension<PatternLogEventsAssertions> ToAssertion(
this PatternLogEventsAssertions assertions)
{
if (assertions == null) throw new ArgumentNullException(nameof(assertions));
return new AssertionExtension<PatternLogEventsAssertions>(assertions, (IInMemorySinkAssertionsExtension)assertions);
}

public static AssertionExtension<LogEventsAssertions> ToAssertion(
this LogEventsAssertions assertions)
{
if (assertions == null) throw new ArgumentNullException(nameof(assertions));
return new AssertionExtension<LogEventsAssertions>(assertions, (IInMemorySinkAssertionsExtension)assertions);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace Serilog.Sinks.InMemory.Assertions;

public interface InMemorySinkAssertionsFactory
{
AssertionFramework AssertionFramework { get; }
InMemorySinkAssertions CreateInMemorySinkAssertions(InMemorySink snapshotInstance);
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace Serilog.Sinks.InMemory.Assertions;

public interface LogEventAssertion
public interface LogEventAssertion : ISubjectAssertions<LogEvent>
{
LogEventPropertyValueAssertions WithProperty(string name, string because = "", params object[] becauseArgs);
LogEventAssertion WithLevel(LogEventLevel level, string because = "", params object[] becauseArgs);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using FluentAssertions;
using Serilog.Events;

namespace Serilog.Sinks.InMemory.Assertions;

public interface LogEventPropertyValueAssertions
public interface LogEventPropertyValueAssertions: ISubjectAssertions<LogEventPropertyValue>
{
TValue WhichValue<TValue>();
StructuredValueAssertions HavingADestructuredObject(string because = "", params object[] becauseArgs);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using Serilog.Events;
using System.Collections.Generic;
using Serilog.Events;

namespace Serilog.Sinks.InMemory.Assertions;

public interface LogEventsAssertions
public interface LogEventsAssertions : ISubjectAssertions<IReadOnlyCollection<LogEvent>>
{
LogEventsAssertions Appearing();
LogEventsAssertions Times(int number, string because = "", params object[] becauseArgs);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using FluentAssertions;
using System.Collections.Generic;
using Serilog.Events;

namespace Serilog.Sinks.InMemory.Assertions;

public interface LogEventsPropertyAssertion
public interface LogEventsPropertyAssertion : ISubjectAssertions<IReadOnlyCollection<LogEvent>>
{
LogEventsAssertions WithValues(params object[] values);
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="5.*">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Serilog" Version="2.12.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<ProjectReference Include="..\Serilog.Sinks.InMemory\Serilog.Sinks.InMemory.csproj" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
namespace Serilog.Sinks.InMemory.Assertions;
using Serilog.Events;

public interface StructuredValueAssertions
namespace Serilog.Sinks.InMemory.Assertions;

public interface StructuredValueAssertions : ISubjectAssertions<StructureValue>
{
LogEventPropertyValueAssertions WithProperty(string name, string because = "", params object[] becauseArgs);
}
Loading