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
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<PackageReference Include="Nerdbank.GitVersioning" Version="3.7.115" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-Beta.556" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="IDisposableAnalyzers" Version="4.0.8" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.203" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.205" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="Meziantou.MSBuild.InternalsVisibleTo" Version="1.0.2" PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<PackageReference Include="ErrorProne.NET.CoreAnalyzers" Version="0.6.1-beta.1 " PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />
<!--<PackageReference Include="ErrorProne.NET.Structs" Version="0.6.1-beta.1 " PrivateAssets="All" IncludeAssets="runtime; build; native; contentfiles; analyzers; buildtransitive" />-->
Expand Down
8 changes: 3 additions & 5 deletions src/PlcInterface.Abstraction/Connected{T}.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,15 @@ namespace PlcInterface;
/// A <see cref="IConnected{T}"/> implementation.
/// </summary>
/// <typeparam name="T">The type that is connected.</typeparam>
public class Connected<T> : IConnected<T>
public sealed class Connected<T> : IConnected<T>
{
private readonly T? value;

/// <summary>
/// Initializes a new instance of the <see cref="Connected{T}"/> class.
/// </summary>
/// <param name="value">A <typeparamref name="T"/> containing the connection.</param>
internal Connected(T value)
{
this.value = value;
Value = value;
IsConnected = true;
}

Expand All @@ -32,5 +30,5 @@ public bool IsConnected
}

/// <inheritdoc/>
public T Value => value ?? throw new InvalidOperationException($"There is no value when {nameof(IsConnected)} returns false");
public T Value => field ?? throw new InvalidOperationException($"There is no value when {nameof(IsConnected)} returns false");
}
18 changes: 9 additions & 9 deletions test/PlcInterface.Abstraction/TypeConverterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public void ConvertConvertsDynamicObjectToType()
var sourceMock = new Mock<DynamicObject>();
var result = new object();
_ = sourceMock.Setup(x => x.GetDynamicMemberNames()).Returns([nameof(TestType.IntValue), nameof(TestType.IntArray), nameof(TestType.SubType)]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result)).Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result)).Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -232,7 +232,7 @@ public void ConvertSupportsRecordTypes()
nameof(TestRecordType.SubType),
]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -272,7 +272,7 @@ public void ConvertSupportsRecordValueTypes()
nameof(TestRecordStructType.SubType),
]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -312,7 +312,7 @@ public void ConvertSupportsValueTypes()
nameof(TestValueType.SubType),
]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -413,7 +413,7 @@ public void ConvertThrowsSymbolExceptionWhenMemberIsNull()
nameof(TestType.SubType),
]);
_ = dynamicObjectSourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -454,7 +454,7 @@ internal readonly DynamicObject GetDynamicObjectMock()
var result = new object();
_ = sourceMock.Setup(x => x.GetDynamicMemberNames()).Returns([nameof(IntValue)]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -484,7 +484,7 @@ internal readonly DynamicObject GetDynamicObjectMock()
var result = new object();
_ = sourceMock.Setup(x => x.GetDynamicMemberNames()).Returns([nameof(IntValue)]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -543,7 +543,7 @@ internal DynamicObject GetDynamicObjectMock()
var result = new object();
_ = sourceMock.Setup(x => x.GetDynamicMemberNames()).Returns([nameof(IntValue)]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -615,7 +615,7 @@ internal DynamicObject GetDynamicObjectMock()
var result = new object();
_ = sourceMock.Setup(x => x.GetDynamicMemberNames()).Returns([nameof(IntValue)]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down
8 changes: 4 additions & 4 deletions test/PlcInterface.Ads.Tests/AdsTypeConverterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void ConvertChangesPlcOpenTypesToDotNetTypes()
nameof(TimesTestType.DateTimeOffset),
]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down Expand Up @@ -120,7 +120,7 @@ public void ConvertConvertsToComplexArray()
var dynamicValue = sourceMock.As<IDynamicValue>();
_ = dynamicValue.SetupGet(x => x.DataType).Returns(ComplexArrayType([2]));
var dummy = new object();
_ = dynamicValue.Setup(x => x.TryGetIndexValue(It.IsAny<int[]>(), out dummy)).Returns(new MockDelegates.OutFunction<int[], object?, bool>((int[] indices, out object? value) =>
_ = dynamicValue.Setup(x => x.TryGetIndexValue(It.IsAny<int[]>(), out dummy)).Returns(new MockDelegates.OutFunction<int[], object?, bool>((indices, out value) =>
{
value = ((NestedType)expected.GetValue(indices)!).GetDynamicObjectMock();
return true;
Expand All @@ -145,7 +145,7 @@ public void ConvertConvertsToPrimitiveArray()
_ = dynamicValue.SetupGet(x => x.DataType).Returns(IntArrayType([9]));
var dummy = new object();
_ = dynamicValue.Setup(x => x.TryGetIndexValue(It.IsAny<int[]>(), out dummy))
.Returns(new MockDelegates.OutFunction<int[], object?, bool>((int[] indices, out object? value) =>
.Returns(new MockDelegates.OutFunction<int[], object?, bool>((indices, out value) =>
{
value = expected.GetValue(indices);
return true;
Expand Down Expand Up @@ -238,7 +238,7 @@ internal DynamicObject GetDynamicObjectMock()
var result = new object();
_ = sourceMock.Setup(x => x.GetDynamicMemberNames()).Returns([nameof(IntValue)]);
_ = sourceMock.Setup(x => x.TryGetMember(It.IsAny<GetMemberBinder>(), out result))
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((GetMemberBinder binder, out object value) =>
.Returns(new MockDelegates.OutFunction<GetMemberBinder, object, bool>((binder, out value) =>
{
value = binder.Name switch
{
Expand Down
6 changes: 3 additions & 3 deletions test/PlcInterface.Ads.Tests/DynamicObjectExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ public void CleanDynamicConvertsStructTypeToExpando()
var iDynamicValueDynamicObjectMock = dynamicObjectMock.As<IDynamicValue>();
_ = iDynamicValueDynamicObjectMock.SetupGet(x => x.DataType).Returns(Mock.Of<IStructType>());
_ = iDynamicValueDynamicObjectMock.Setup(x => x.TryGetMemberValue(It.IsAny<string>(), out dummy))
.Callback(new MockDelegates.OutAction<string, object?>((string name, out object? value)
.Callback(new MockDelegates.OutAction<string, object?>((name, out value)
=> value = name switch
{
"Property1" => 255,
Expand Down Expand Up @@ -167,7 +167,7 @@ public void CleanDynamicStructCanHandleNestedStruct()
var nestedDynamicIDynamicValue = nestedDynamicMock.As<IDynamicValue>();
_ = nestedDynamicIDynamicValue.SetupGet(x => x.DataType).Returns(Mock.Of<IStructType>());
_ = nestedDynamicIDynamicValue.Setup(x => x.TryGetMemberValue(It.IsAny<string>(), out dummy))
.Callback(new MockDelegates.OutAction<string, object?>((string name, out object? value)
.Callback(new MockDelegates.OutAction<string, object?>((name, out value)
=> value = name switch
{
"Nested1" => 255,
Expand Down Expand Up @@ -207,7 +207,7 @@ public void CleanDynamicStructConvertsNestedPlcOpenTypes()
var firstIDynamicValue = firstDynamic.As<IDynamicValue>();
_ = firstIDynamicValue.SetupGet(x => x.DataType).Returns(Mock.Of<IStructType>());
_ = firstIDynamicValue.Setup(x => x.TryGetMemberValue(It.IsAny<string>(), out dummy))
.Returns(new MockDelegates.OutFunction<string, object?, bool>((string name, out object? value) =>
.Returns(new MockDelegates.OutFunction<string, object?, bool>((name, out value) =>
{
value = name switch
{
Expand Down
10 changes: 0 additions & 10 deletions test/PlcInterface.Ads.Tests/ReadWriteTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,7 @@
Assert.AreEqual(dummyValue, value4);
}

// TODO remove suppression when fixed
[TestMethod]
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"IDisposableAnalyzers.Correctness",
"IDISP013:Await in using",
Justification = "Problem with expressionTrees; see https://github.com/DotNetAnalyzers/IDisposableAnalyzers/issues/370")]
public async Task ReadValuesReturnsTheExpectedValuesAsync()
{
// Arrange
Expand Down Expand Up @@ -202,12 +197,7 @@
valueSymbolMock.Verify(x => x.WriteValueAsync(It.Is<int>(x => dummyValue == x), It.IsAny<CancellationToken>()), Times.Once);
}

// TODO remove suppression when fixed
[TestMethod]
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"IDisposableAnalyzers.Correctness",
"IDISP013:Await in using",
Justification = "Problem with expressionTrees; see https://github.com/DotNetAnalyzers/IDisposableAnalyzers/issues/370")]
public async Task WriteMultipleCallsUnderlyingWriteMethodAsync()
{
// Arrange
Expand Down Expand Up @@ -237,7 +227,7 @@
sumSymbolMock.Verify(x => x.WriteAsync(It.IsAny<object[]>(), It.IsAny<CancellationToken>()), Times.Once);
}

// TODO remove suppression when fixed

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (windows-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (windows-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (windows-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (windows-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (macos-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (macos-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (macos-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (macos-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (ubuntu-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (ubuntu-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (ubuntu-latest) / build-and-test

Check warning on line 230 in test/PlcInterface.Ads.Tests/ReadWriteTests.cs

View workflow job for this annotation

GitHub Actions / call-build-test (ubuntu-latest) / build-and-test

[TestMethod]
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"IDisposableAnalyzers.Correctness",
Expand Down