Mercurial > pub > bltoolkit
comparison UnitTests/CS/Patterns/MustImplementAttributeTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
| author | cin |
|---|---|
| date | Thu, 27 Mar 2014 21:46:09 +0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f990fcb411a9 |
|---|---|
| 1 using System; | |
| 2 | |
| 3 using NUnit.Framework; | |
| 4 | |
| 5 using BLToolkit.Patterns; | |
| 6 using BLToolkit.TypeBuilder; | |
| 7 | |
| 8 namespace Patterns | |
| 9 { | |
| 10 [TestFixture] | |
| 11 public class MustImplementAttributeTest | |
| 12 { | |
| 13 [MustImplement] | |
| 14 public interface IRequiredInterface | |
| 15 { | |
| 16 int RequiredMethod(); | |
| 17 [MustImplement(false)] | |
| 18 int SameMethodName(); | |
| 19 [MustImplement(false)] | |
| 20 int OptionalMethod(); | |
| 21 } | |
| 22 | |
| 23 public interface ISameMethodNameInterface | |
| 24 { | |
| 25 [MustImplement] | |
| 26 int SameMethodName(); | |
| 27 } | |
| 28 | |
| 29 public interface IIntermediateInterface : IRequiredInterface, ISameMethodNameInterface | |
| 30 { | |
| 31 [MustImplement(false, ThrowException = true)] | |
| 32 new int OptionalMethod(); | |
| 33 } | |
| 34 | |
| 35 public interface IOptionalInterface : IIntermediateInterface | |
| 36 { | |
| 37 } | |
| 38 | |
| 39 [MustImplement(false, ThrowException = false)] | |
| 40 public interface IOptionalInterfaceNoException : IRequiredInterface | |
| 41 { | |
| 42 int OtherOptionalMethod(); | |
| 43 } | |
| 44 | |
| 45 [MustImplement(true, ThrowException = false)] | |
| 46 public interface IOtherOptionalInterface | |
| 47 { | |
| 48 int SameMethodName(); | |
| 49 } | |
| 50 | |
| 51 public struct TestClass | |
| 52 { | |
| 53 public int RequiredMethod() | |
| 54 { | |
| 55 return 1; | |
| 56 } | |
| 57 | |
| 58 public int SameMethodName() | |
| 59 { | |
| 60 return 2; | |
| 61 } | |
| 62 } | |
| 63 | |
| 64 public class EmptyClass | |
| 65 { | |
| 66 } | |
| 67 | |
| 68 [Test] | |
| 69 public void Test() | |
| 70 { | |
| 71 var duck = DuckTyping.Implement<IOptionalInterfaceNoException> (new TestClass()); | |
| 72 | |
| 73 Assert.AreEqual(1, duck.RequiredMethod()); | |
| 74 Assert.AreEqual(0, duck.OtherOptionalMethod()); | |
| 75 Assert.AreEqual(2, duck.SameMethodName()); | |
| 76 | |
| 77 duck = DuckTyping.Aggregate<IOptionalInterfaceNoException>(new TestClass(), string.Empty, Guid.Empty); | |
| 78 | |
| 79 Assert.AreEqual(1, duck.RequiredMethod()); | |
| 80 Assert.AreEqual(0, duck.OtherOptionalMethod()); | |
| 81 Assert.AreEqual(2, duck.SameMethodName()); | |
| 82 } | |
| 83 | |
| 84 [Test, ExpectedException(typeof(InvalidOperationException))] | |
| 85 public void RuntimeExceptionTest() | |
| 86 { | |
| 87 var duck = DuckTyping.Implement<IOptionalInterface>(new TestClass()); | |
| 88 | |
| 89 Assert.AreEqual(1, duck.RequiredMethod()); | |
| 90 | |
| 91 // Exception here. | |
| 92 // | |
| 93 duck.OptionalMethod(); | |
| 94 } | |
| 95 | |
| 96 [Test, ExpectedException(typeof(InvalidOperationException))] | |
| 97 public void RuntimeAggregateExceptionTest() | |
| 98 { | |
| 99 var duck = DuckTyping.Aggregate<IOptionalInterface>(new TestClass(), new EmptyClass()); | |
| 100 | |
| 101 Assert.AreEqual(1, duck.RequiredMethod()); | |
| 102 | |
| 103 // Exception here. | |
| 104 // | |
| 105 duck.OptionalMethod(); | |
| 106 } | |
| 107 | |
| 108 [Test, ExpectedException(typeof(TypeBuilderException))] | |
| 109 public void BuildtimeExceptionTest() | |
| 110 { | |
| 111 // Exception here. | |
| 112 // | |
| 113 var duck1 = DuckTyping.Implement<IOptionalInterface> (string.Empty); | |
| 114 } | |
| 115 | |
| 116 [Test, ExpectedException(typeof(TypeBuilderException))] | |
| 117 public void BuildtimeAggregateExceptionTest() | |
| 118 { | |
| 119 // Exception here. | |
| 120 // | |
| 121 var duck1 = DuckTyping.Aggregate<IOptionalInterface>(string.Empty, Guid.Empty); | |
| 122 } | |
| 123 | |
| 124 [Test] | |
| 125 public void AsLikeBehaviourTest() | |
| 126 { | |
| 127 var duck = DuckTyping.Implement<IOtherOptionalInterface>(new TestClass()); | |
| 128 | |
| 129 Assert.IsNotNull(duck); | |
| 130 | |
| 131 duck = DuckTyping.Implement<IOtherOptionalInterface>(new EmptyClass()); | |
| 132 Assert.IsNull(duck); | |
| 133 | |
| 134 duck = DuckTyping.Implement<IOtherOptionalInterface>(new EmptyClass()); | |
| 135 Assert.IsNull (duck); | |
| 136 | |
| 137 duck = DuckTyping.Aggregate<IOtherOptionalInterface>(new EmptyClass(), string.Empty); | |
| 138 Assert.IsNull (duck); | |
| 139 } | |
| 140 } | |
| 141 } |
