Skip to content

Commit c1b0aa9

Browse files
authored
Add missing constructors for FaultException<TDetail> and add unit test. (#5558)
1 parent a5aff2a commit c1b0aa9

File tree

2 files changed

+112
-0
lines changed

2 files changed

+112
-0
lines changed

src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,10 @@ public partial class FaultException<TDetail> : System.ServiceModel.FaultExceptio
552552
public FaultException(TDetail detail) { }
553553
public FaultException(TDetail detail, System.ServiceModel.FaultReason reason) { }
554554
public FaultException(TDetail detail, System.ServiceModel.FaultReason reason, System.ServiceModel.FaultCode code, string action) { }
555+
public FaultException(TDetail detail, System.ServiceModel.FaultReason reason, System.ServiceModel.FaultCode code) { }
556+
public FaultException(TDetail detail, string reason) { }
557+
public FaultException(TDetail detail, string reason, System.ServiceModel.FaultCode code) { }
558+
public FaultException(TDetail detail, string reason, System.ServiceModel.FaultCode code, string action) { }
555559
protected FaultException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { }
556560
public TDetail Detail { get { return default; } }
557561
public override System.ServiceModel.Channels.MessageFault CreateMessageFault() { return default; }

src/System.ServiceModel.Primitives/tests/ServiceModel/FaultExceptionTest.cs

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,112 @@ public static void Ctor_StringReason()
9797
Assert.NotNull(exception.Code);
9898
Assert.Equal(reason, exception.Reason.ToString());
9999
}
100+
101+
[WcfFact]
102+
public static void Ctor_TDetail_FaultReason_FaultCode()
103+
{
104+
var detail = new FaultDetail("Fault message");
105+
var reason = new FaultReason("Fault reason");
106+
var code = new FaultCode("MustUnderstand");
107+
var exception = new FaultException<FaultDetail>(detail, reason, code);
108+
Assert.NotNull(exception);
109+
Assert.NotNull(exception.Detail);
110+
Assert.NotNull(exception.Reason);
111+
Assert.NotNull(exception.Code);
112+
Assert.Equal(detail.Message, exception.Detail.Message);
113+
Assert.Equal(reason, exception.Reason);
114+
Assert.Equal(reason.ToString(), exception.Message);
115+
Assert.Equal(code, exception.Code);
116+
//default reason, default code
117+
exception = new FaultException<FaultDetail> (null,(FaultReason)null,null);
118+
Assert.NotNull(exception);
119+
Assert.NotNull(exception.Code);
120+
Assert.NotNull(exception.Reason);
121+
Assert.NotEqual(string.Empty, exception.Reason.ToString());
122+
Assert.False(string.IsNullOrEmpty(exception.Message));
123+
Assert.Null(exception.Detail);
124+
Assert.Null(exception.Action);
125+
}
126+
127+
[WcfFact]
128+
public static void Ctor_TDetail_StringReason()
129+
{
130+
var detail = new FaultDetail("Fault message");
131+
string reason = "Fault reason";
132+
var exception = new FaultException<FaultDetail>(detail, reason);
133+
Assert.NotNull(exception);
134+
Assert.NotNull(exception.Detail);
135+
Assert.NotNull(exception.Reason);
136+
Assert.Equal(detail, exception.Detail);
137+
Assert.Equal(reason, exception.Reason.ToString());
138+
Assert.Equal(reason, exception.Message);
139+
//empty reason, default code
140+
exception = new FaultException<FaultDetail>(null, string.Empty);
141+
Assert.NotNull(exception);
142+
Assert.NotNull(exception.Code);
143+
Assert.NotNull(exception.Reason);
144+
Assert.Null(exception.Detail);
145+
Assert.Null(exception.Action);
146+
Assert.Equal(string.Empty, exception.Reason.ToString());
147+
Assert.Equal(string.Empty, exception.Message);
148+
Assert.Null(exception.Action);
149+
}
150+
151+
[WcfFact]
152+
public static void Ctor_TDetail_StringReason_FaultCode()
153+
{
154+
var detail = new FaultDetail("Fault message");
155+
string reason = "Fault reason";
156+
var code = new FaultCode("MustUnderstand");
157+
var exception = new FaultException<FaultDetail>(detail, reason, code);
158+
Assert.NotNull(exception);
159+
Assert.NotNull(exception.Detail);
160+
Assert.NotNull(exception.Reason);
161+
Assert.NotNull(exception.Code);
162+
Assert.Equal(detail, exception.Detail);
163+
Assert.Equal(reason, exception.Reason.ToString());
164+
Assert.Equal(reason, exception.Message);
165+
Assert.Equal(code, exception.Code);
166+
//default reason, default code
167+
exception = new FaultException<FaultDetail>(null, (string)null, null);
168+
Assert.NotNull(exception);
169+
Assert.NotNull(exception.Code);
170+
Assert.NotNull(exception.Reason);
171+
Assert.NotEqual(string.Empty, exception.Reason.ToString());
172+
Assert.False(string.IsNullOrEmpty(exception.Message));
173+
Assert.Null(exception.Detail);
174+
Assert.Null(exception.Action);
175+
}
176+
177+
[WcfFact]
178+
public static void Ctor_TDetail_StringReason_FaultCode_StringAction()
179+
{
180+
var detail = new FaultDetail("Fault message");
181+
string reason = "Fault reason";
182+
var code = new FaultCode("Server");
183+
string action = "http://example.com/faults/processingerror";
184+
var exception = new FaultException<FaultDetail>(detail, reason, code, action);
185+
Assert.NotNull(exception);
186+
Assert.NotNull(exception.Detail);
187+
Assert.NotNull(exception.Reason);
188+
Assert.NotNull(exception.Code);
189+
Assert.NotNull(exception.Action);
190+
Assert.IsType<FaultException<FaultDetail>>(exception);
191+
Assert.Equal(detail, exception.Detail);
192+
Assert.Equal(reason, exception.Reason.ToString());
193+
Assert.Equal(reason, exception.Message);
194+
Assert.Equal(code, exception.Code);
195+
Assert.Equal(action, exception.Action);
196+
Assert.IsAssignableFrom<Exception>(exception);
197+
Assert.IsAssignableFrom<FaultException>(exception);
198+
//empty reason, default code
199+
exception = new FaultException<FaultDetail>(null, string.Empty, null, null);
200+
Assert.NotNull(exception);
201+
Assert.NotNull(exception.Code);
202+
Assert.NotNull(exception.Reason);
203+
Assert.Equal(string.Empty, exception.Reason.ToString());
204+
Assert.Equal(string.Empty, exception.Message);
205+
Assert.Null(exception.Detail);
206+
Assert.Null(exception.Action);
207+
}
100208
}

0 commit comments

Comments
 (0)