Skip to content

Commit

Permalink
SerializationFrameworkAnalyzer: add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Matthew-nop committed Oct 23, 2023
1 parent 8f98c62 commit 9546054
Showing 1 changed file with 157 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
// analyzer: D2L.CodeStyle.Analyzers.ApiUsage.Serialization.SerializationFrameworkAnalyzer

using System;
using D2L.LP.Serialization

namespace D2L.LP.Serialization {

public sealed class SerializationFrameworkAttribute : Attribute { }

[SerializationFramework]
public class DangerousExplicitClass : ISerializer, ITrySerializer, ISerializationWriter {
public void Foo() { }
void ISerializer.Serialize() { }
bool ITrySerializer.TrySerialize() { return true; }
void ISerializationWriter.Write() { }
}

[SerializationFramework]
public class DangerousImplicitClass : ISerializer, ITrySerializer, ISerializationWriter {
public void Serialize() { }
public bool TrySerialize() { return true; }
public void Write() { }
}

public interface ISerializer {
public void Serialize();
}

public interface ITrySerializer {
public bool TrySerialize();
}

public interface ISerializationWriter {
public void Write();
}

[SerializationFramework]
public static class ISerializationWriterExtensions {
public static void Write( this ISerializationWriter writer, string _ ) {
writer.Write();
}
}

[SerializationFramework]
public static class SerializationFactory {
public static ISerializer Serializer {
get { return new DangerousExplicitClass(); }
}
public static ITrySerializer TrySerializer {
get { return new DangerousExplicitClass(); }
}
public static ISerializer SerializationWriter {
get { return new DangerousExplicitClass(); }
}
}

}

namespace D2L.CodeStyle.Analyzers.SerializationFrameworkAnalyzer.Examples {
using D2L.LP.Serialization;

public sealed class BadClass {

private DangerousExplicitClass /* DangerousSerializationTypeReference */ m_dangerousExplicitClass /**/;
private DangerousImplicitClass /* DangerousSerializationTypeReference */ m_dangerousImplicitClass /**/;

public void Uses_ISerializer() {
ISerializer explicitSerializer = SerializationFactory.Serializer;
/* DangerousSerializationTypeReference */
explicitSerializer.Serialize() /**/ ;
}

public void Uses_ITrySerializer() {
ITrySerializer explicitTrySerializer = SerializationFactory.TrySerializer;
/* DangerousSerializationTypeReference */
explicitTrySerializer.TrySerialize() /**/ ;
}

public void Uses_ISerializationWriter() {
ISerializationWriter explicitWriter = SerializationFactory.SerializationWriter;
/* DangerousSerializationTypeReference */
explicitWriter.Write() /**/ ;
}

public void Uses_ISerializationWriterExtensions() {
ISerializationWriter explicitWriter = SerializationFactory.SerializationWriter;
/* DangerousSerializationTypeReference */
explicitWriter.Write( "foo" ) /**/ ;
}

public void Uses_DangerousImplicitReferences() {
DangerousImplicitClass dangerousClass = new DangerousImplicitClass();
/* DangerousSerializationTypeReference */
dangerousClass.Serialize() /**/ ;
/* DangerousSerializationTypeReference */
dangerousClass.TrySerialize() /**/ ;
}

public void Uses_DangerousImplementingType() {
DangerousExplicitClass dangerousClass = new DangerousExplicitClass();
/* DangerousSerializationTypeReference */
dangerousClass.Foo() /**/ ;
}

}

[SerializationFramework]
public sealed class SerializationFrameworkClass {

private readonly ISerializer m_serializer;
private readonly ITrySerializer m_trySerializer;
private readonly ISerializationWriter m_serializationWriter;

public SerializationFrameworkClass(
ISerializer serializer,
ITrySerializer trySerializer,
ISerializationWriter serializationWriter
) {
m_serializer = serializer;
m_trySerializer = trySerializer;
m_serializationWriter = serializationWriter;
}

public void InSerializationClass() {
ISerializer ok = SerializationFactory.Serializer;
ok.Serialize();

ITrySerializer alsoOk = SerializationFactory.TrySerializer;
alsoOk.TrySerialize();

ISerializationWriter okayToo = SerializationFactory.SerializationWriter;
okayToo.Write();
}

public ISerializer Serializer {
get { return m_serializer; }
}
}

[SerializationFramework]
public sealed class SerializationFrameworkUsageInNestedClass {
private static class Nested {
public static void Usage() {
ISerializer ok = SerializationFactory.Serializer;
ok.Serialize();

ITrySerializer alsoOk = SerializationFactory.TrySerializer;
alsoOk.TrySerialize();

ISerializationWriter okayToo = SerializationFactory.SerializationWriter;
okayToo.Write();
}
}
}


}

0 comments on commit 9546054

Please sign in to comment.