From 9dc40128acb91a76f611186074607b32d28d3a9f Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Sat, 23 Jan 2016 16:22:26 -0500 Subject: [PATCH 1/2] [csharp] Options: useCollection, returnICollection This change is inline with Microsoft's recommended guidelines for collects (https://msdn.microsoft.com/en-us/library/dn169389(v=vs.110).aspx). Added generator options for csharp to: * useCollection: Deserialize responses into and return Collection * returnICollection: For List or Collection, return ICollection instead of the concrete type As a consequence of useCollection, method imputs will also change to Collection. --- .../io/swagger/codegen/CodegenConstants.java | 5 ++ .../languages/CSharpClientCodegen.java | 61 ++++++++++++++++++ .../src/main/resources/csharp/api.mustache | 5 +- .../resources/csharp/compile-mono.sh.mustache | 1 + .../options/CSharpClientOptionsProvider.java | 2 + .../Lib/SwaggerClient/compile-mono.sh | 13 ++++ .../src/main/csharp/IO/Swagger/Api/PetApi.cs | 1 + .../main/csharp/IO/Swagger/Api/StoreApi.cs | 1 + .../src/main/csharp/IO/Swagger/Api/UserApi.cs | 1 + .../Lib/SwaggerClient/vendor/packages.config | 5 ++ .../csharp/SwaggerClientTest/TestPet.cs | 2 +- .../bin/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes .../bin/Debug/SwaggerClientTest.dll.mdb | Bin 34893 -> 34857 bytes .../obj/Debug/SwaggerClientTest.dll | Bin 126464 -> 126464 bytes 14 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh create mode 100644 samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java index 4a4f9e037ef2..8cbb9749f352 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java @@ -62,4 +62,9 @@ public class CodegenConstants { public static final String OPTIONAL_ASSEMBLY_INFO = "optionalAssemblyInfo"; public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs (Default: true)."; + public static final String USE_COLLECTION = "useCollection"; + public static final String USE_COLLECTION_DESC = "Deserialize array types to Collection instead of List."; + + public static final String RETURN_ICOLLECTION = "returnICollection"; + public static final String RETURN_ICOLLECTION_DESC = "Return ICollection instead of the concrete type."; } diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java index 55a4abbf4173..10c339fb404e 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java @@ -7,6 +7,7 @@ import io.swagger.codegen.DefaultCodegen; import io.swagger.codegen.SupportingFile; import io.swagger.codegen.CodegenProperty; import io.swagger.codegen.CodegenModel; +import io.swagger.codegen.CodegenOperation; import io.swagger.models.properties.*; import io.swagger.codegen.CliOption; @@ -27,6 +28,8 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig protected boolean optionalAssemblyInfoFlag = true; protected boolean optionalMethodArgumentFlag = true; protected boolean useDateTimeOffsetFlag = false; + protected boolean useCollection = false; + protected boolean returnICollection = false; protected String packageTitle = "Swagger Library"; protected String packageProductName = "SwaggerLibrary"; protected String packageDescription = "A library generated from a Swagger doc"; @@ -75,6 +78,8 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig "long?", "float?", "byte[]", + "ICollection", + "Collection", "List", "Dictionary", "DateTime?", @@ -88,7 +93,9 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig "Stream", // not really a primitive, we include it to avoid model import "Object") ); + instantiationTypes.put("array", "List"); + instantiationTypes.put("list", "List"); instantiationTypes.put("map", "Dictionary"); typeMapping = new HashMap(); @@ -120,6 +127,11 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString())); cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder)); cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC)); + + cliOptions.add( CliOption.newBoolean(CodegenConstants.USE_COLLECTION, CodegenConstants.USE_COLLECTION_DESC) + .defaultValue(Boolean.FALSE.toString()) ); + cliOptions.add( CliOption.newBoolean(CodegenConstants.RETURN_ICOLLECTION, CodegenConstants.RETURN_ICOLLECTION_DESC) + .defaultValue(Boolean.FALSE.toString()) ); } @Override @@ -176,6 +188,14 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig .get(CodegenConstants.OPTIONAL_ASSEMBLY_INFO).toString())); } + if (additionalProperties.containsKey(CodegenConstants.USE_COLLECTION)){ + setUseCollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_COLLECTION).toString())); + } + + if (additionalProperties.containsKey(CodegenConstants.RETURN_ICOLLECTION)){ + setReturnICollection(Boolean.valueOf(additionalProperties.get(CodegenConstants.RETURN_ICOLLECTION).toString())); + } + supportingFiles.add(new SupportingFile("Configuration.mustache", sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "Configuration.cs")); supportingFiles.add(new SupportingFile("ApiClient.mustache", @@ -289,6 +309,32 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig return toModelName(name); } + @Override + public Map postProcessOperations(Map objs) { + super.postProcessOperations(objs); + if(objs != null) { + Map operations = (Map) objs.get("operations"); + if (operations != null) { + List ops = (List) operations.get("operation"); + for (CodegenOperation operation : ops) { + if (operation.returnType != null) { + operation.returnContainer = operation.returnType; + if( this.returnICollection && ( + operation.returnType.startsWith("List")|| + operation.returnType.startsWith("Collection")) ) { + // NOTE: ICollection works for both List and Collection + int genericStart = operation.returnType.indexOf("<"); + if(genericStart > 0) { + operation.returnType = "ICollection" + operation.returnType.substring(genericStart); + } + } + } + } + } + } + + return objs; + } @Override public String getTypeDeclaration(Property p) { @@ -343,6 +389,21 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig this.optionalMethodArgumentFlag = flag; } + public void setReturnICollection(boolean returnICollection) { + this.returnICollection = returnICollection; + } + + public void setUseCollection(boolean useCollection) { + this.useCollection = useCollection; + if(useCollection){ + typeMapping.put("array", "Collection"); + typeMapping.put("list", "Collection"); + + instantiationTypes.put("array", "Collection"); + instantiationTypes.put("list", "Collection"); + } + } + public void useDateTimeOffset(boolean flag) { this.useDateTimeOffsetFlag = flag; if (flag) diff --git a/modules/swagger-codegen/src/main/resources/csharp/api.mustache b/modules/swagger-codegen/src/main/resources/csharp/api.mustache index 28919d6be491..e4e1ba7aa906 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/api.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/api.mustache @@ -1,6 +1,7 @@ using System; using System.IO; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using RestSharp; using {{packageName}}.Client; @@ -239,7 +240,7 @@ namespace {{packageName}}.Api {{#returnType}}return new ApiResponse<{{{returnType}}}>(statusCode, response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - ({{{returnType}}}) Configuration.ApiClient.Deserialize(response, typeof({{{returnType}}})));{{/returnType}} + ({{{returnType}}}) Configuration.ApiClient.Deserialize(response, typeof({{#returnContainer}}{{{returnContainer}}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}})));{{/returnType}} {{^returnType}}return new ApiResponse(statusCode, response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null);{{/returnType}} @@ -344,7 +345,7 @@ namespace {{packageName}}.Api {{#returnType}}return new ApiResponse<{{{returnType}}}>(statusCode, response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - ({{{returnType}}}) Configuration.ApiClient.Deserialize(response, typeof({{{returnType}}})));{{/returnType}} + ({{{returnType}}}) Configuration.ApiClient.Deserialize(response, typeof({{#returnContainer}}{{{returnContainer}}}{{/returnContainer}}{{^returnContainer}}{{{returnType}}}{{/returnContainer}})));{{/returnType}} {{^returnType}}return new ApiResponse(statusCode, response.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), null);{{/returnType}} diff --git a/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache b/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache index 9472dcc8d3db..b84363cae39f 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/compile-mono.sh.mustache @@ -1,3 +1,4 @@ +#!/usr/bin/env bash wget -nc https://nuget.org/nuget.exe; mozroots --import --sync mono nuget.exe install vendor/packages.config -o vendor; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java index 0c2da1f3fa2a..767119410047 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java @@ -26,6 +26,8 @@ public class CSharpClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true") .put(CodegenConstants.USE_DATETIME_OFFSET, "true") .put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE) + .put(CodegenConstants.USE_COLLECTION, "false") + .put(CodegenConstants.RETURN_ICOLLECTION, "false") .build(); } diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh new file mode 100644 index 000000000000..67bc67e57a84 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/compile-mono.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +wget -nc https://nuget.org/nuget.exe; +mozroots --import --sync +mono nuget.exe install vendor/packages.config -o vendor; +mkdir -p bin; +mcs -sdk:45 -r:vendor/Newtonsoft.Json.8.0.2/lib/net45/Newtonsoft.Json.dll,\ +vendor/RestSharp.105.2.3/lib/net45/RestSharp.dll,\ +System.Runtime.Serialization.dll \ +-target:library \ +-out:bin/IO.Swagger.dll \ +-recurse:'src/*.cs' \ +-doc:bin/IO.Swagger.xml \ +-platform:anycpu diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs index 892412e5b3e1..fa1479f50932 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/PetApi.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using RestSharp; using IO.Swagger.Client; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs index a92876f1a53b..69499f4fd9bd 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/StoreApi.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using RestSharp; using IO.Swagger.Client; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs index 0b9e633c5f3f..0c178a5637df 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/src/main/csharp/IO/Swagger/Api/UserApi.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using RestSharp; using IO.Swagger.Client; diff --git a/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config new file mode 100644 index 000000000000..c87bbb79fa67 --- /dev/null +++ b/samples/client/petstore/csharp/SwaggerClientTest/Lib/SwaggerClient/vendor/packages.config @@ -0,0 +1,5 @@ + + + + + diff --git a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs index 001b052bf76a..3ee63f1e9244 100644 --- a/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs +++ b/samples/client/petstore/csharp/SwaggerClientTest/TestPet.cs @@ -221,7 +221,7 @@ namespace SwaggerClientTest.TestPet { Assembly _assembly = Assembly.GetExecutingAssembly(); Stream _imageStream = _assembly.GetManifestResourceStream("SwaggerClientTest.swagger-logo.png"); - PetApi petApi = new PetApi (); + PetApi petApi = new PetApi (); // test file upload with form parameters petApi.UploadFile(petId, "new form name", _imageStream); diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll index ad3f04827de336f237615fbba44b7cd961f524e5..e61191e219a9704f6d10987ff9a74531fa25b4d7 100755 GIT binary patch delta 176 zcmZp;!`^U*eM9JS?^;6!1{S8GIl>GD#XA@nxN41ne64Ft8jL^=1GAL?0|Nt7of%LN ztkQxV#An8;Yx08SY64*WNE$X@TYi^YwAK=23m;3Z6_{qNwFc77CpK?Cv6=A;mw?XC lLqW%{YkSUFbbOb7%}M?3XZA535SjjJKO@if8J8I|qyW=RFZ2Ka delta 174 zcmZp;!`^U*eM9JSZ;hV}3~WqAbA%ZRigz$DaB2Jo^0lrpX)ppg49r#n3=9lRb!H3< zEMS!u>>xffR$Y@9ELRf%>qpYC`P%Zk+@c!Nj6hrXSTtn8G^>U@kZwM)dHadYj9<6} lIIb(6W1XUGWkMV#AQ)bEbzRQe7QUG!%FQNbd diff --git a/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb b/samples/client/petstore/csharp/SwaggerClientTest/bin/Debug/SwaggerClientTest.dll.mdb index 9fd5b3c6f762ed5964c1fb0d75bf5f4fdd4c8a16..0d7773b3f908af8bb9ed72e5533ad00082032c4b 100644 GIT binary patch literal 34857 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 Wma>6oo=jHCDpc6*f)_DXiU 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 b#UZ{_zDHq|?+IAtdkR+h{s60d&%*x?_C`qE literal 34893 zcmds=2YeLO`u@+^S(4o(3#1WPdgvWDp(Oz&0Yxb)iiIc=LMWk{1QnFt14sucD!m9u z?;yQ*=|y_)BE87}duC@hn*dk6pL>6Qy)4f@&%E!MnKSQcGiPQeK~p+EDNy)gb%${N zvmDI7Gt;2?Z%)iPdtLO7tx2`}2+Ap3pj_OxuK% z6<=aq#Y=tn-y1AO{GGD>jtax`Gk$;2fpbr7A6$+*XT6rG-Jw2W_}?kxs^p)a@3(7Y z{rt_~Pj6p2UVP5iXXZ^1qyH}XcGfRdU7YGUwWZ>LUe!CyD=@R&p)LJC=(4f0`1bFY z`RZT9C$vpz-lp|)^8ec8o13a{2|8W&YNyan@tqrr@BU`_k7?7oN%N-dlHy))0G&GY z-d{Vh=&%`GKl=KJSG!NdH-DD{s7+tivP?`|N;<(S$uVaKbFHq9=z z!g}}b(_o!he>16ZLeg{co#oZ{a~FDTXSb4Mf@$ve*<@(*Yrq9WB&Z18PA_KlH7I1Z1xv$3e+x7PuM4fd+b?eW`_O&bB ze%Z9PK!?h0s*m3|w^(M;_`f&wtMUK&MgH=b^)*Kw{p7ti8?WWaYl&Mg692oo_*Vl( zjt<}EotE`M)rh%Y9+*=naH(kh-_6S(^_vfqPkdVA^T0yB*|f<8W3OBhWB)FVIBnFe zn~>bLP3z=@=Txw&wKoU7^WFL6ANr3we|_+(>w@!8lMtE^W+5^O;U$E(5S)E-^64Xl zuMmDh*o4UJJbfkQYE4E4+8vHCA!SypEj%>9Djx=mN5PMS)s}>|O(lqo_{eUg@XzL- z%__%a6JxV|o6VWzkR}5I>N_0qY{P2H@lsSZtNbaOSe0$Hk>Io@gOtxIPh=A(vz;=` zmozbj|7%AVC0kk2Yt zhKQd+RvFH|W*KOYRKCoat@22SI2v*cmrZ198<*1T6Cr&RzZI7h*D6_YHG;f(;EO=SkwnZu%O653F+433J73~)FiV`2*J2uQ3BVq)GX->5=Bx7fgdMln%=1wwGg1|~Y{ zhh+;`+uB~OMcqV_^HsTo>1Cfvt@Lo_$!mMLcD_7$Y&KirDmGh@mu>!eY}swuvf2D| zh1+cYn9Aj_`B$!)+h!|Y$5zVb|559Z0RNAYLu~fYAgjC+BIf4UokK4~HYm^8#d-S$ zyLch51QH{$fj^%ok%Uv{s z@`%BChU9TCkIN&*=b6B=6lwL6{$anDDzyN;?Po5VIgeG&$s<0tQBLt4 zR5|4?N25BDM~uifKA*c}mgN`A^RLM7Uf!BtY|Fo$Rc>l2rzG zuU|QB)bea(VTsYHMkA{qV~-7dBjb?u{5IwvVtc{(m9OGkC2V<1*%-Rq1J}oGD7%kS zRM~};p_TnuNZc>ny@p;*ZLwe4XO9{1J6aKGVz^ ze@0O?{?Zt@jusUoi%%%-E|@JP#MTnqO1PH~mk>uv9Ca>hw|!+`sJoypl@OOpT*37} zP*9Uh8z`u!zJJt?%IPDP$sKLzYjQmihut(3bsE|wOTN?$JRUcO&i zJShFpxvY)1dA6fIWklaHsb&5rif6y+F2ys;mZ5mkwIkKdx!MsO-hZeam8zRq(Uw;= zri|z69$g+C-o!HEMA^$_-32q)A%-}HI^4_S9b$rGBFh;Dt38=L2CGtPu$t=-D;+

Q%F*$rrxVx}+mJ_?m?JnnDK3-0oD0kAi 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

6%SHtbVAoN~%HyDh*1)l*!&?VmE z7{O3<1Ndby4BZ)S4Ths9!2`hv^j>%g7>N#hpD`Kz4SEK;2^fXG4sQUX(IFqu2GL{C zWzj{zSoG`gE8tsnBltt`9r{Z+34D(p2KNKw(7e@DOakN4J7L~xDkh*$!Nf=f{18k>kF8H%0e(QwhG&8q=q>OnwTwOo z9|p6~wph+n&_AN{p>u=T=v{CGn1enIp8#{wkKtQj9y>>tH3i3H%ZG z3Ed6;46H&=f`@?B=*92?um+v-3H=^=ExI?l2Uv$5503=v(JSG(U<3L%yaQ}R{|a9R zo6wUQGS-95=*92?um!yb-UPOyufeClHguLa&SB8o(V^(PU8pe2A>0W(AkGD#XA@nxN41ne64Ft8jL^=1GAL?0|Nt7of%LN ztkQxV#An8;Yx08SY64*WNE$X@TYi^YwAK=23m;3Z6_{qNwFc77CpK?Cv6=A;mw?XC lLqW%{YkSUFbbOb7%}M?3XZA535SjjJKO@if8J8I|qyW=RFZ2Ka delta 174 zcmZp;!`^U*eM9JSZ;hV}3~WqAbA%ZRigz$DaB2Jo^0lrpX)ppg49r#n3=9lRb!H3< zEMS!u>>xffR$Y@9ELRf%>qpYC`P%Zk+@c!Nj6hrXSTtn8G^>U@kZwM)dHadYj9<6} lIIb(6W1XUGWkMV#AQ)bEbzRQe7QUG!%FQNbd From 2e958f9223fd744b7b86ac883cd95b44f731ab56 Mon Sep 17 00:00:00 2001 From: Jim Schubert Date: Sun, 24 Jan 2016 16:25:20 -0500 Subject: [PATCH 2/2] [csharp] Collections options tests, fix model using directive --- .../swagger-codegen/src/main/resources/csharp/model.mustache | 1 + .../io/swagger/codegen/csharp/CSharpClientOptionsTest.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/modules/swagger-codegen/src/main/resources/csharp/model.mustache b/modules/swagger-codegen/src/main/resources/csharp/model.mustache index 96e17d8d1d3e..be02f983be93 100644 --- a/modules/swagger-codegen/src/main/resources/csharp/model.mustache +++ b/modules/swagger-codegen/src/main/resources/csharp/model.mustache @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Runtime.Serialization; using Newtonsoft.Json; diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java index ab8f28065129..da1b7ef7ea24 100644 --- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java +++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java @@ -42,6 +42,10 @@ public class CSharpClientOptionsTest extends AbstractOptionsTest { times = 1; clientCodegen.setPackageGuid(CSharpClientOptionsProvider.PACKAGE_GUID_VALUE); times = 1; + clientCodegen.setUseCollection(false); + times = 1; + clientCodegen.setReturnICollection(false); + times = 1; }}; } }