using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;
using System.Xml;
using System.ServiceModel.Dispatcher;
using System.Text;
using NUnit.Framework;
//------------------------------------------------------------------------------
//
// This code was generated by a tool.
// Runtime Version:4.0.30319.239
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
//
//------------------------------------------------------------------------------
namespace Client2843.EvalServiceReference {
using System.Runtime.Serialization;
using System;
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="Eval", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1")]
[System.SerializableAttribute()]
public partial class Eval : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged {
[System.NonSerializedAttribute()]
private System.Runtime.Serialization.ExtensionDataObject extensionDataField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string CommentsField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string IdField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private string SubmitterField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable TimeSubmittedField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable etypeField;
[System.Runtime.Serialization.OptionalFieldAttribute()]
private System.Nullable etype2Field;
[global::System.ComponentModel.BrowsableAttribute(false)]
public System.Runtime.Serialization.ExtensionDataObject ExtensionData {
get {
return this.extensionDataField;
}
set {
this.extensionDataField = value;
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Comments {
get {
return this.CommentsField;
}
set {
if ((object.ReferenceEquals(this.CommentsField, value) != true)) {
this.CommentsField = value;
this.RaisePropertyChanged("Comments");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Id {
get {
return this.IdField;
}
set {
if ((object.ReferenceEquals(this.IdField, value) != true)) {
this.IdField = value;
this.RaisePropertyChanged("Id");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public string Submitter {
get {
return this.SubmitterField;
}
set {
if ((object.ReferenceEquals(this.SubmitterField, value) != true)) {
this.SubmitterField = value;
this.RaisePropertyChanged("Submitter");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable TimeSubmitted {
get {
return this.TimeSubmittedField;
}
set {
if ((this.TimeSubmittedField.Equals(value) != true)) {
this.TimeSubmittedField = value;
this.RaisePropertyChanged("TimeSubmitted");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable etype {
get {
return this.etypeField;
}
set {
if ((this.etypeField.Equals(value) != true)) {
this.etypeField = value;
this.RaisePropertyChanged("etype");
}
}
}
[System.Runtime.Serialization.DataMemberAttribute()]
public System.Nullable etype2 {
get {
return this.etype2Field;
}
set {
if ((this.etype2Field.Equals(value) != true)) {
this.etype2Field = value;
this.RaisePropertyChanged("etype2");
}
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="EvalType", Namespace="http://schemas.datacontract.org/2004/07/WcfServiceLibrary1")]
public enum EvalType : int {
[System.Runtime.Serialization.EnumMemberAttribute()]
SIMPLE = 1,
[System.Runtime.Serialization.EnumMemberAttribute()]
COMPLEX = 2,
[System.Runtime.Serialization.EnumMemberAttribute()]
NONE = 3,
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="EvalServiceReference.IEvalService")]
public interface IEvalService {
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEvalService/SubmitEval", ReplyAction="http://tempuri.org/IEvalService/SubmitEvalResponse")]
void SubmitEval(Client2843.EvalServiceReference.Eval eval);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEvalService/GetEvals", ReplyAction="http://tempuri.org/IEvalService/GetEvalsResponse")]
Client2843.EvalServiceReference.Eval[] GetEvals();
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IEvalService/RemoveEval", ReplyAction="http://tempuri.org/IEvalService/RemoveEvalResponse")]
void RemoveEval(string id);
}
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public interface IEvalServiceChannel : Client2843.EvalServiceReference.IEvalService, System.ServiceModel.IClientChannel {
}
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class EvalServiceClient : System.ServiceModel.ClientBase, Client2843.EvalServiceReference.IEvalService {
public EvalServiceClient() {
}
public EvalServiceClient(string endpointConfigurationName) :
base(endpointConfigurationName) {
}
public EvalServiceClient(string endpointConfigurationName, string remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public EvalServiceClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
base(endpointConfigurationName, remoteAddress) {
}
public EvalServiceClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
base(binding, remoteAddress) {
}
public void SubmitEval(Client2843.EvalServiceReference.Eval eval) {
base.Channel.SubmitEval(eval);
}
public Client2843.EvalServiceReference.Eval[] GetEvals() {
return base.Channel.GetEvals();
}
public void RemoveEval(string id) {
base.Channel.RemoveEval(id);
}
}
}
namespace MonoTests.System.Runtime.Serialization
{
[TestFixture]
public class Bug2843Test
{
[Test]
public void TestNullableEnum()
{
string Name = "GetEvalsResult";
string Wrapper = "GetEvalsResponse";
string Namespace = "http://tempuri.org/";
Type type = typeof(Client2843.EvalServiceReference.Eval[]);
IEnumerable know_types = new List();
// This is the XML generated by WCF Server
string xml = " Comment 1 04836718-41a7-45fe-8c0b-ac3fc613b0f8 Submitter 1 SIMPLE COMPLEX Comment 2 fd17a406-4c2c-41ca-9a5d-1a1019d07535 Submitter 2 2012-02-26T13:41:00 COMPLEX ";
Client2843.EvalServiceReference.Eval[] evals = null;
StringBuilder stringBuilder = new StringBuilder ();
var ds = new DataContractSerializer (type, Name, Namespace, know_types);
using (var xr = XmlDictionaryReader.CreateDictionaryReader ( XmlReader.Create (new StringReader (xml))))
{
xr.ReadStartElement (Wrapper, Namespace);
for (xr.MoveToContent (); xr.NodeType == XmlNodeType.Element; xr.MoveToContent ()) {
XmlQualifiedName key = new XmlQualifiedName (xr.LocalName, xr.NamespaceURI);
if ( Name == key.Name && Namespace == key.Namespace)
break;
}
evals = (Client2843.EvalServiceReference.Eval[])ds.ReadObject (xr, true);
}
using (var xw = XmlDictionaryWriter.CreateDictionaryWriter ( XmlWriter.Create( new StringWriter(stringBuilder)))) {
ds.WriteObject (xw, evals);
}
string actualXml = stringBuilder.ToString ();
Assert.AreEqual (evals.Length, 2, "Comment 1" , "Eval 1 Comment missmatch");
Client2843.EvalServiceReference.Eval ev1 = evals[0];
Client2843.EvalServiceReference.Eval ev2 = evals[1];
// Assert that object deserilized matches each value attribute.
Assert.AreEqual (ev1.Comments, "Comment 1" , "ev1.Comments missmatch");
Assert.AreEqual (ev1.Submitter, "Submitter 1", "ev1.Submitter missmatch");
Assert.IsNull (ev1.TimeSubmitted, "ev1.TimeSubmitted missmatch");
Assert.AreEqual (ev1.etype, Client2843.EvalServiceReference.EvalType.SIMPLE, "ev1.etype missmatch");
Assert.AreEqual (ev1.etype2, Client2843.EvalServiceReference.EvalType.COMPLEX, "ev1.etype2 missmatch");
Assert.AreEqual (ev2.Comments, "Comment 2", "ev2.Comments missmatch");
Assert.AreEqual (ev2.Submitter, "Submitter 2","ev2.Submitter missmatch");
Assert.AreEqual (ev2.TimeSubmitted, DateTime.Parse("2012-02-26T13:41:00"), "ev2.TimeSubmitted missmatch");
Assert.IsNull (ev2.etype, "ev2.etype missmatch");
Assert.AreEqual (ev2.etype2, Client2843.EvalServiceReference.EvalType.COMPLEX, "ev2.etype2 missmatch");
Client2843.EvalServiceReference.Eval[] evals2 = null;
using (var xr = XmlDictionaryReader.CreateDictionaryReader ( XmlReader.Create (new StringReader (actualXml))))
{
evals2 = (Client2843.EvalServiceReference.Eval[])ds.ReadObject (xr, true);
}
Client2843.EvalServiceReference.Eval e1 = evals2[0];
Client2843.EvalServiceReference.Eval e2 = evals2[1];
Assert.AreEqual (e1.Comments, "Comment 1" , "e1.Comments missmatch");
Assert.AreEqual (e1.Submitter, "Submitter 1", "e1.Submitter missmatch");
Assert.IsNull (e1.TimeSubmitted, "e1.TimeSubmitted missmatch");
Assert.AreEqual (e1.etype, Client2843.EvalServiceReference.EvalType.SIMPLE, "e1.etype missmatch");
Assert.AreEqual (e1.etype2, Client2843.EvalServiceReference.EvalType.COMPLEX, "e1.etype2 missmatch");
Assert.AreEqual (e2.Comments, "Comment 2", "e2.Comments missmatch");
Assert.AreEqual (e2.Submitter, "Submitter 2","e2.Submitter missmatch");
Assert.AreEqual (e2.TimeSubmitted, DateTime.Parse("2012-02-26T13:41:00"), "e2.TimeSubmitted missmatch");
Assert.IsNull (e2.etype, "e2.etype missmatch");
Assert.AreEqual (e2.etype2, Client2843.EvalServiceReference.EvalType.COMPLEX, "e2.etype2 missmatch");
}
}
}