annotate UnitTests/CS/Patterns/MustImplementAttributeTest.cs @ 6:11b6da379593

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