Skip to content

Commit 2879192

Browse files
committed
More tests.
1 parent 6a5ea5d commit 2879192

File tree

1 file changed

+276
-0
lines changed

1 file changed

+276
-0
lines changed

VSDiagnostics/VSDiagnostics/VSDiagnostics.Test/Tests/General/ImplementEqualsAndGetHashCodeTests.cs

Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -623,5 +623,281 @@ public override int GetHashCode()
623623
VerifyDiagnostic(original, string.Format(ImplementEqualsAndGetHashCodeAnalyzer.Rule.MessageFormat.ToString(), "MyClass"));
624624
VerifyFix(original, result);
625625
}
626+
627+
[TestMethod]
628+
public void ImplementEqualsAndGetHashCode_ClassDoesNotImplementEither_HasBaseClassImplementingEquals_HasInterface()
629+
{
630+
var original = @"
631+
namespace ConsoleApplication1
632+
{
633+
interface IClass { }
634+
635+
class MyBaseClass
636+
{
637+
public override bool Equals(object obj) => true;
638+
}
639+
640+
class MyClass : MyBaseClass, IClass
641+
{
642+
string _foo = ""test"";
643+
static string _bar = ""test"";
644+
}
645+
}";
646+
647+
var result = @"
648+
namespace ConsoleApplication1
649+
{
650+
interface IClass { }
651+
652+
class MyBaseClass
653+
{
654+
public override bool Equals(object obj) => true;
655+
}
656+
657+
class MyClass : MyBaseClass, IClass
658+
{
659+
string _foo = ""test"";
660+
static string _bar = ""test"";
661+
662+
public override bool Equals(object obj)
663+
{
664+
if (obj == null || typeof(MyClass) != obj.GetType())
665+
{
666+
return false;
667+
}
668+
669+
var value = (MyClass)obj;
670+
return base.Equals(obj) &&
671+
_foo == value._foo;
672+
}
673+
674+
public override int GetHashCode()
675+
{
676+
return _foo.GetHashCode();
677+
}
678+
}
679+
}";
680+
681+
VerifyDiagnostic(original, string.Format(ImplementEqualsAndGetHashCodeAnalyzer.Rule.MessageFormat.ToString(), "MyClass"));
682+
VerifyFix(original, result);
683+
}
684+
685+
[TestMethod]
686+
public void ImplementEqualsAndGetHashCode_StructDoesNotImplementEither_ImplementsInterface()
687+
{
688+
var original = @"
689+
namespace ConsoleApplication1
690+
{
691+
interface IStruct { }
692+
693+
struct MyStruct : IStruct
694+
{
695+
string _foo;
696+
static string _bar;
697+
}
698+
}";
699+
700+
var result = @"
701+
namespace ConsoleApplication1
702+
{
703+
interface IStruct { }
704+
705+
struct MyStruct : IStruct
706+
{
707+
string _foo;
708+
static string _bar;
709+
710+
public override bool Equals(object obj)
711+
{
712+
if (obj == null || typeof(MyStruct) != obj.GetType())
713+
{
714+
return false;
715+
}
716+
717+
var value = (MyStruct)obj;
718+
return _foo == value._foo;
719+
}
720+
721+
public override int GetHashCode()
722+
{
723+
return _foo.GetHashCode();
724+
}
725+
}
726+
}";
727+
728+
VerifyDiagnostic(original, string.Format(ImplementEqualsAndGetHashCodeAnalyzer.Rule.MessageFormat.ToString(), "MyStruct"));
729+
VerifyFix(original, result);
730+
}
731+
732+
[TestMethod]
733+
public void ImplementEqualsAndGetHashCode_ClassDoesNotImplementEither_HasBaseClassImplementingEquals_BaseClassHasField()
734+
{
735+
var original = @"
736+
namespace ConsoleApplication1
737+
{
738+
class MyBaseClass
739+
{
740+
public string foo;
741+
public override bool Equals(object obj) => true;
742+
}
743+
744+
class MyClass : MyBaseClass
745+
{
746+
string _foo = ""test"";
747+
static string _bar = ""test"";
748+
}
749+
}";
750+
751+
var result = @"
752+
namespace ConsoleApplication1
753+
{
754+
class MyBaseClass
755+
{
756+
public string foo;
757+
public override bool Equals(object obj) => true;
758+
}
759+
760+
class MyClass : MyBaseClass
761+
{
762+
string _foo = ""test"";
763+
static string _bar = ""test"";
764+
765+
public override bool Equals(object obj)
766+
{
767+
if (obj == null || typeof(MyClass) != obj.GetType())
768+
{
769+
return false;
770+
}
771+
772+
var value = (MyClass)obj;
773+
return base.Equals(obj) &&
774+
_foo == value._foo;
775+
}
776+
777+
public override int GetHashCode()
778+
{
779+
return _foo.GetHashCode();
780+
}
781+
}
782+
}";
783+
784+
VerifyDiagnostic(original, string.Format(ImplementEqualsAndGetHashCodeAnalyzer.Rule.MessageFormat.ToString(), "MyClass"));
785+
VerifyFix(original, result);
786+
}
787+
788+
[TestMethod]
789+
public void ImplementEqualsAndGetHashCode_ClassDoesNotImplementEither_HasBaseClassNotImplementingEquals()
790+
{
791+
var original = @"
792+
namespace ConsoleApplication1
793+
{
794+
class MyBaseClass
795+
{
796+
public string foo;
797+
public override int GetHashCode() => 1; // disable analyzer for this
798+
}
799+
800+
class MyClass : MyBaseClass
801+
{
802+
string _foo = ""test"";
803+
static string _bar = ""test"";
804+
}
805+
}";
806+
807+
var result = @"
808+
namespace ConsoleApplication1
809+
{
810+
class MyBaseClass
811+
{
812+
public string foo;
813+
public override int GetHashCode() => 1; // disable analyzer for this
814+
}
815+
816+
class MyClass : MyBaseClass
817+
{
818+
string _foo = ""test"";
819+
static string _bar = ""test"";
820+
821+
public override bool Equals(object obj)
822+
{
823+
if (obj == null || typeof(MyClass) != obj.GetType())
824+
{
825+
return false;
826+
}
827+
828+
var value = (MyClass)obj;
829+
return _foo == value._foo;
830+
}
831+
832+
public override int GetHashCode()
833+
{
834+
return _foo.GetHashCode();
835+
}
836+
}
837+
}";
838+
839+
VerifyDiagnostic(original, string.Format(ImplementEqualsAndGetHashCodeAnalyzer.Rule.MessageFormat.ToString(), "MyClass"));
840+
VerifyFix(original, result);
841+
}
842+
843+
[TestMethod]
844+
public void ImplementEqualsAndGetHashCode_ClassDoesImplementsEquals_OverridesPropertyInBaseClass()
845+
{
846+
var original = @"
847+
namespace ConsoleApplication1
848+
{
849+
class MyBaseClass
850+
{
851+
public virtual string Bar { get; set; }
852+
public override bool Equals(object obj) => true;
853+
}
854+
855+
class MyClass : MyBaseClass
856+
{
857+
string _foo = ""test"";
858+
static string _bar = ""test"";
859+
public override string Bar { get; set; }
860+
}
861+
}";
862+
863+
var result = @"
864+
namespace ConsoleApplication1
865+
{
866+
class MyBaseClass
867+
{
868+
public virtual string Bar { get; set; }
869+
public override bool Equals(object obj) => true;
870+
}
871+
872+
class MyClass : MyBaseClass
873+
{
874+
string _foo = ""test"";
875+
static string _bar = ""test"";
876+
public override string Bar { get; set; }
877+
878+
public override bool Equals(object obj)
879+
{
880+
if (obj == null || typeof(MyClass) != obj.GetType())
881+
{
882+
return false;
883+
}
884+
885+
var value = (MyClass)obj;
886+
return base.Equals(obj) &&
887+
_foo == value._foo &&
888+
Bar == value.Bar;
889+
}
890+
891+
public override int GetHashCode()
892+
{
893+
return _foo.GetHashCode() ^
894+
Bar.GetHashCode();
895+
}
896+
}
897+
}";
898+
899+
VerifyDiagnostic(original, string.Format(ImplementEqualsAndGetHashCodeAnalyzer.Rule.MessageFormat.ToString(), "MyClass"));
900+
VerifyFix(original, result);
901+
}
626902
}
627903
}

0 commit comments

Comments
 (0)