Files
linux-packaging-mono/mcs/class/System.Runtime.Serialization/Test/System.Runtime.Serialization/XsdDataContractImporterTest2.cs
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

364 lines
14 KiB
C#

//
// XsdDataContractImporterTest2.cs
//
// Author:
// Martin Baulig <martin.baulig@xamarin.com>
//
// Copyright (c) 2012 Xamarin, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
#if !MOBILE && !MONOMAC
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel.Description;
using System.Web.Services.Discovery;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;
using Microsoft.CSharp;
using NUnit.Framework;
using NUnit.Framework.Constraints;
using QName = System.Xml.XmlQualifiedName;
namespace MonoTests.System.Runtime.Serialization
{
[TestFixture]
public class XsdDataContractImporterTest2
{
MetadataSet collectionsMetadata;
MetadataSet customCollectionsMetadata;
[SetUp]
public void Setup ()
{
collectionsMetadata = WsdlHelper.GetMetadataSet ("collections.wsdl");
customCollectionsMetadata = WsdlHelper.GetMetadataSet ("custom-collections.wsdl");
}
[Test]
public void TestSimpleList ()
{
var options = new ImportOptions ();
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetSimpleList");
Assert.That (method, Is.Not.Null, "#1");
Assert.That (method.ReturnType, Is.Not.Null, "#2");
Assert.That (method.ReturnType.ArrayRank, Is.EqualTo (1), "#3");
Assert.That (method.ReturnType.BaseType, Is.EqualTo ("System.Int32"), "#4");
}
[Test]
public void TestSimpleList2 ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof(LinkedList<>));
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetSimpleList");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("System.Collections.Generic.LinkedList`1"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (1), "#5");
Assert.That (ret.TypeArguments [0].BaseType, Is.EqualTo ("System.Int32"), "#6");
}
[Test]
public void TestSimpleList3 ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof (Dictionary<,>));
options.ReferencedCollectionTypes.Add (typeof (ObservableCollection<>));
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetSimpleList");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("System.Collections.ObjectModel.ObservableCollection`1"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (1), "#5");
Assert.That (ret.TypeArguments [0].BaseType, Is.EqualTo ("System.Int32"), "#6");
}
[Test]
public void TestListOfFoo ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof (List<>));
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetListOfFoo");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("System.Collections.Generic.List`1"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (1), "#5");
Assert.That (ret.TypeArguments [0].BaseType, Is.EqualTo ("TestWCF.Model.Foo"), "#6");
}
[Test]
public void TestListOfStringArray ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof (List<>));
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetListOfStringArray");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("System.Collections.Generic.List`1"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (1), "#5");
var baseType = ret.TypeArguments [0];
Assert.That (baseType.BaseType, Is.EqualTo ("System.Collections.Generic.List`1"), "#6");
Assert.That (baseType.TypeArguments.Count, Is.EqualTo (1), "#7");
Assert.That (baseType.TypeArguments [0].BaseType, Is.EqualTo ("System.String"), "#8");
}
[Test]
public void TestSimpleDictionary ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof (List<>));
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetSimpleDictionary");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("System.Collections.Generic.Dictionary`2"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (2), "#5");
var keyType = ret.TypeArguments [0];
Assert.That (keyType.BaseType, Is.EqualTo ("System.Int32"), "#6");
var valueType = ret.TypeArguments [1];
Assert.That (valueType.BaseType, Is.EqualTo ("System.String"), "#7");
}
[Test]
public void TestSimpleDictionary2 ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof (SortedList<,>));
var ccu = WsdlHelper.Import (collectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetSimpleDictionary");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("System.Collections.Generic.SortedList`2"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (2), "#5");
var keyType = ret.TypeArguments [0];
Assert.That (keyType.BaseType, Is.EqualTo ("System.Int32"), "#6");
var valueType = ret.TypeArguments [1];
Assert.That (valueType.BaseType, Is.EqualTo ("System.String"), "#7");
}
[Test]
public void TestCustomCollection ()
{
var options = new ImportOptions ();
var ccu = WsdlHelper.Import (customCollectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetCustomCollection");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("TestWCF.Model.MyCollection"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (0), "#5");
}
[Test]
public void TestCustomCollection2 ()
{
var options = new ImportOptions ();
var ccu = WsdlHelper.Import (customCollectionsMetadata, options);
var method = ccu.FindMethod ("MyServiceClient", "GetCustomCollection2");
Assert.That (method, Is.Not.Null, "#1");
var ret = method.ReturnType;
Assert.That (ret, Is.Not.Null, "#2");
Assert.That (ret.ArrayRank, Is.EqualTo (0), "#3");
Assert.That (ret.BaseType, Is.EqualTo ("TestWCF.Model1.MyCollectionOfdouble"), "#4");
Assert.That (ret.TypeArguments.Count, Is.EqualTo (0), "#5");
}
[Test]
public void TestCustomCollection3 ()
{
var options = new ImportOptions ();
var ccu = WsdlHelper.Import (customCollectionsMetadata, options);
var type = ccu.FindType ("MyCollection");
Assert.That (type, Is.Not.Null, "#1a");
Assert.That (type.BaseTypes.Count, Is.EqualTo (1), "#2a");
var baseType = type.BaseTypes[0];
Assert.That (baseType.BaseType, Is.EqualTo ("System.Collections.Generic.List`1"), "#3a");
Assert.That (baseType.TypeArguments.Count, Is.EqualTo (1), "#4a");
Assert.That (baseType.TypeArguments[0].BaseType, Is.EqualTo ("System.String"), "#5a");
var attr = type.FindAttribute ("System.Runtime.Serialization.CollectionDataContractAttribute");
Assert.That (attr, Is.Not.Null, "#6a");
var nameArg = attr.FindArgument ("Name");
Assert.That (nameArg, Is.Not.Null, "#7a");
Assert.That (((CodePrimitiveExpression)nameArg.Value).Value, Is.EqualTo ("MyCollection"), "#8a");
var nsArg = attr.FindArgument ("Namespace");
Assert.That (nsArg, Is.Not.Null, "#9a");
Assert.That (((CodePrimitiveExpression)nsArg.Value).Value, Is.EqualTo ("http://schemas.datacontract.org/2004/07/TestWCF.Model"), "#10a");
var itemArg = attr.FindArgument ("ItemName");
Assert.That (itemArg, Is.Not.Null);
Assert.That (((CodePrimitiveExpression)itemArg.Value).Value, Is.EqualTo ("string"), "#11a");
type = ccu.FindType ("MyCollectionOfdouble");
Assert.That (type, Is.Not.Null, "#1b");
Assert.That (type.BaseTypes.Count, Is.EqualTo (1), "#2b");
baseType = type.BaseTypes[0];
Assert.That (baseType.BaseType, Is.EqualTo ("System.Collections.Generic.List`1"), "#3b");
Assert.That (baseType.TypeArguments.Count, Is.EqualTo (1), "#4b");
Assert.That (baseType.TypeArguments[0].BaseType, Is.EqualTo ("System.Double"), "#5b");
attr = type.FindAttribute ("System.Runtime.Serialization.CollectionDataContractAttribute");
Assert.That (attr, Is.Not.Null, "#6b");
nameArg = attr.FindArgument ("Name");
Assert.That (nameArg, Is.Not.Null, "#7b");
Assert.That (((CodePrimitiveExpression)nameArg.Value).Value, Is.EqualTo ("MyCollectionOfdouble"), "#8b");
nsArg = attr.FindArgument ("Namespace");
Assert.That (nsArg, Is.Not.Null, "#9b");
Assert.That (((CodePrimitiveExpression)nsArg.Value).Value, Is.EqualTo ("http://schemas.datacontract.org/2004/07/TestWCF.Model"), "#10b");
itemArg = attr.FindArgument ("ItemName");
Assert.That (itemArg, Is.Not.Null);
Assert.That (((CodePrimitiveExpression)itemArg.Value).Value, Is.EqualTo ("double"), "#11b");
}
[Test]
public void TestCustomCollection4 ()
{
var options = new ImportOptions ();
options.ReferencedCollectionTypes.Add (typeof (LinkedList<>));
var ccu = WsdlHelper.Import (customCollectionsMetadata, options);
var type = ccu.FindType ("MyCollection");
Assert.That (type, Is.Not.Null, "#1a");
Assert.That (type.BaseTypes.Count, Is.EqualTo (1), "#2a");
var baseType = type.BaseTypes[0];
Assert.That (baseType.BaseType, Is.EqualTo ("System.Collections.Generic.LinkedList`1"), "#3a");
Assert.That (baseType.TypeArguments.Count, Is.EqualTo (1), "#4a");
Assert.That (baseType.TypeArguments[0].BaseType, Is.EqualTo ("System.String"), "#5a");
var attr = type.FindAttribute ("System.Runtime.Serialization.CollectionDataContractAttribute");
Assert.That (attr, Is.Not.Null, "#6a");
var nameArg = attr.FindArgument ("Name");
Assert.That (nameArg, Is.Not.Null, "#7a");
Assert.That (((CodePrimitiveExpression)nameArg.Value).Value, Is.EqualTo ("MyCollection"), "#8a");
var nsArg = attr.FindArgument ("Namespace");
Assert.That (nsArg, Is.Not.Null, "#9a");
Assert.That (((CodePrimitiveExpression)nsArg.Value).Value, Is.EqualTo ("http://schemas.datacontract.org/2004/07/TestWCF.Model"), "#10a");
var itemArg = attr.FindArgument ("ItemName");
Assert.That (itemArg, Is.Not.Null);
Assert.That (((CodePrimitiveExpression)itemArg.Value).Value, Is.EqualTo ("string"), "#11a");
type = ccu.FindType ("MyCollectionOfdouble");
Assert.That (type, Is.Not.Null, "#1b");
Assert.That (type.BaseTypes.Count, Is.EqualTo (1), "#2b");
baseType = type.BaseTypes[0];
Assert.That (baseType.BaseType, Is.EqualTo ("System.Collections.Generic.LinkedList`1"), "#3b");
Assert.That (baseType.TypeArguments.Count, Is.EqualTo (1), "#4b");
Assert.That (baseType.TypeArguments[0].BaseType, Is.EqualTo ("System.Double"), "#5b");
attr = type.FindAttribute ("System.Runtime.Serialization.CollectionDataContractAttribute");
Assert.That (attr, Is.Not.Null, "#6b");
nameArg = attr.FindArgument ("Name");
Assert.That (nameArg, Is.Not.Null, "#7b");
Assert.That (((CodePrimitiveExpression)nameArg.Value).Value, Is.EqualTo ("MyCollectionOfdouble"), "#8b");
nsArg = attr.FindArgument ("Namespace");
Assert.That (nsArg, Is.Not.Null, "#9b");
Assert.That (((CodePrimitiveExpression)nsArg.Value).Value, Is.EqualTo ("http://schemas.datacontract.org/2004/07/TestWCF.Model"), "#10b");
itemArg = attr.FindArgument ("ItemName");
Assert.That (itemArg, Is.Not.Null);
Assert.That (((CodePrimitiveExpression)itemArg.Value).Value, Is.EqualTo ("double"), "#11b");
}
}
}
#endif