using Sep.Git.Tfs.Core.TfsInterop; using Sep.Git.Tfs.VsCommon; using StructureMap.AutoMocking; using Xunit; namespace GitTfsTest.Core { public class TfsApiBridgeTest { private RhinoAutoMocker _mocks; public TfsApiBridgeTest() { _mocks = new RhinoAutoMocker(); _mocks.MockObjectFactory(); } [Fact] public void ConvertsEnum() { Assert.Equal(OriginalEnum.Value2, _mocks.ClassUnderTest.Convert(WrappedEnum.Value2)); } [Fact] public void WrapsAndUnwrapsObject() { var originalObject = new OriginalType(); var wrappedObject = _mocks.ClassUnderTest.Wrap(originalObject); Assert.Equal(originalObject, _mocks.ClassUnderTest.Unwrap(wrappedObject)); } [Fact] public void WrapsObjectWithBridge() { var originalObject = new OriginalType(); var wrappedObject = _mocks.ClassUnderTest.Wrap(originalObject); Assert.NotNull(wrappedObject.Bridge); } [Fact] public void WrapsAndUnwrapsArray() { var originalObjects = new [] { new OriginalType() }; var wrappedObjects = _mocks.ClassUnderTest.Wrap(originalObjects); Assert.Equal(1, wrappedObjects.Length); Assert.Equal(originalObjects[0], _mocks.ClassUnderTest.Unwrap(wrappedObjects)[0]); } [Fact] public void WrapsNullAsNull() { OriginalType obj = null; Assert.Null(_mocks.ClassUnderTest.Wrap(obj)); } [Fact] public void WrapsNullArrayAsNull() { OriginalType [] obj = null; Assert.Null(_mocks.ClassUnderTest.Wrap(obj)); } [Fact] public void UnwrapsNullAsNull() { WrapperForOriginalType obj = null; Assert.Null(_mocks.ClassUnderTest.Unwrap(obj)); } [Fact] public void UnwrapsNullArrayAsNull() { WrapperForOriginalType[] obj = null; Assert.Null(_mocks.ClassUnderTest.Unwrap(obj)); } public class OriginalType { public static int counter; public static object lockObject = new object(); private readonly int _id; public OriginalType() { lock (lockObject) { _id = ++counter; } } public override bool Equals(object obj) { return obj is OriginalType && ((OriginalType) obj)._id == _id; } public override int GetHashCode() { return _id; } public override string ToString() { return "OriginalObject:" + _id; } } interface IOriginalType {} public class WrapperForOriginalType : WrapperFor, IOriginalType { public WrapperForOriginalType(OriginalType o) : base(o) {} } public class WrapperForOriginalTypeWithBridge : WrapperFor, IOriginalType { public WrapperForOriginalTypeWithBridge(OriginalType o, TfsApiBridge b) : base(o) { Bridge = b; } public TfsApiBridge Bridge { get; private set; } } public enum OriginalEnum { Value1, Value2, }; public enum WrappedEnum { Value1, Value2, }; } }