1 /** 2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 * SPDX-License-Identifier: Apache-2.0. 4 */ 5 6 package com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.cpp; 7 8 import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.Shape; 9 import com.amazonaws.util.awsclientgenerator.domainmodels.codegeneration.ShapeMember; 10 import org.junit.Test; 11 12 import java.util.HashMap; 13 import java.util.LinkedList; 14 import java.util.Set; 15 16 import static org.junit.Assert.assertNull; 17 import static org.junit.Assert.assertTrue; 18 import static org.junit.Assert.assertEquals; 19 20 public class CppViewHelperTest { 21 22 @Test testComputeExportValue()23 public void testComputeExportValue() { 24 assertEquals("AWS_SERVICE_API", CppViewHelper.computeExportValue("service")); 25 } 26 27 @Test testComputeBaseClass()28 public void testComputeBaseClass() { 29 Shape shape = new Shape(); 30 shape.setPayload("blah"); 31 shape.setMembers(new HashMap<>()); 32 ShapeMember payloadShapeMember = new ShapeMember(); 33 Shape payloadShape = new Shape(); 34 payloadShape.setType("BlobStream"); 35 payloadShapeMember.setShape(payloadShape); 36 shape.getMembers().put("blah", payloadShapeMember); 37 assertEquals("StreamingServiceRequest", CppViewHelper.computeBaseClass("Service", shape)); 38 shape.setPayload(null); 39 shape.setMembers(new HashMap<>()); 40 ShapeMember shapeMember = new ShapeMember(); 41 shapeMember.setStreaming(true); 42 shape.getMembers().put("ShapeMember", shapeMember); 43 assertEquals("StreamingServiceRequest", CppViewHelper.computeBaseClass("Service", shape)); 44 shape.setMembers(new HashMap<>()); 45 assertEquals("ServiceRequest", CppViewHelper.computeBaseClass("Service", shape)); 46 } 47 48 @Test testComputeMemberVariableName()49 public void testComputeMemberVariableName() { 50 assertEquals("m_memberVariable", CppViewHelper.computeMemberVariableName("MemberVariable")); 51 } 52 53 @Test testComputeDefaultValue()54 public void testComputeDefaultValue() { 55 Shape shape = new Shape(); 56 shape.setType("long"); 57 assertEquals("0", CppViewHelper.computeDefaultValue(shape)); 58 shape.setType("integer"); 59 assertEquals("0", CppViewHelper.computeDefaultValue(shape)); 60 shape.setType("float"); 61 assertEquals("0.0", CppViewHelper.computeDefaultValue(shape)); 62 shape.setType("boolean"); 63 assertEquals("false", CppViewHelper.computeDefaultValue(shape)); 64 shape.setType("double"); 65 assertEquals("0.0", CppViewHelper.computeDefaultValue(shape)); 66 shape.setType("not implemented type"); 67 assertNull(CppViewHelper.computeDefaultValue(shape)); 68 } 69 70 @Test testConvertToUpperCamel()71 public void testConvertToUpperCamel() { 72 assertEquals("UpperCaseVar", CppViewHelper.convertToUpperCamel("upperCaseVar")); 73 assertEquals("UpperCaseVar", CppViewHelper.convertToUpperCamel("UpperCaseVar")); 74 } 75 76 @Test testComputeVariableName()77 public void testComputeVariableName() { 78 assertEquals("memberVariable", CppViewHelper.computeVariableName("MemberVariable")); 79 } 80 81 @Test testVariableHasBeenSetName()82 public void testVariableHasBeenSetName() { 83 assertEquals("m_memberVariableHasBeenSet", CppViewHelper.computeVariableHasBeenSetName("MemberVariable")); 84 } 85 86 @Test testComputeJsonizeString()87 public void testComputeJsonizeString() { 88 Shape shape = new Shape(); 89 shape.setType("structure"); 90 assertEquals(".Jsonize()", CppViewHelper.computeJsonizeString(shape)); 91 assertEquals("->Jsonize()", CppViewHelper.computeJsonizeString(shape, true)); 92 shape.setType("any thing else"); 93 assertEquals("", CppViewHelper.computeJsonizeString(shape)); 94 } 95 96 @Test testComputeCppType()97 public void testComputeCppType() { 98 Shape shape = new Shape(); 99 assertEquals(false, shape.isSensitive()); 100 shape.setType("string"); 101 assertEquals("Aws::String", CppViewHelper.computeCppType(shape)); 102 shape.setType("long"); 103 assertEquals("long long", CppViewHelper.computeCppType(shape)); 104 shape.setType("integer"); 105 assertEquals("int", CppViewHelper.computeCppType(shape)); 106 shape.setType("double"); 107 assertEquals("double", CppViewHelper.computeCppType(shape)); 108 shape.setType("float"); 109 assertEquals("double", CppViewHelper.computeCppType(shape)); 110 shape.setType("boolean"); 111 assertEquals("bool", CppViewHelper.computeCppType(shape)); 112 shape.setType("timestamp"); 113 assertEquals("Aws::Utils::DateTime", CppViewHelper.computeCppType(shape)); 114 shape.setType("blob"); 115 assertEquals("Aws::Utils::ByteBuffer", CppViewHelper.computeCppType(shape)); 116 shape.setSensitive(true); 117 assertEquals("Aws::Utils::CryptoBuffer", CppViewHelper.computeCppType(shape)); 118 shape.setSensitive(false); 119 120 shape.setName("ShapeName"); 121 shape.setType("structure"); 122 assertEquals("ShapeName", CppViewHelper.computeCppType(shape)); 123 shape.setName("EnumShapeName"); 124 shape.setType("string"); 125 shape.setEnumValues(new LinkedList<>()); 126 shape.getEnumValues().add("EnumValue"); 127 assertEquals("EnumShapeName", CppViewHelper.computeCppType(shape)); 128 shape.setEnumValues(null); 129 130 Shape listShape = new Shape(); 131 listShape.setType("list"); 132 listShape.setName("ListShape"); 133 134 Shape innerShape = new Shape(); 135 innerShape.setType("string"); 136 innerShape.setName("StringName"); 137 138 ShapeMember innerShapeMember = new ShapeMember(); 139 innerShapeMember.setShape(innerShape); 140 141 listShape.setListMember(innerShapeMember); 142 assertEquals("Aws::Vector<Aws::String>", CppViewHelper.computeCppType(listShape)); 143 144 Shape mapShape = new Shape(); 145 mapShape.setType("map"); 146 mapShape.setName("MapShape"); 147 148 Shape keyShape = new Shape(); 149 keyShape.setType("string"); 150 keyShape.setName("StringName"); 151 152 ShapeMember keyShapeMember = new ShapeMember(); 153 keyShapeMember.setShape(keyShape); 154 mapShape.setMapKey(keyShapeMember); 155 156 Shape structureValue = new Shape(); 157 structureValue.setType("structure"); 158 structureValue.setName("StructureShape"); 159 160 ShapeMember valueShapeMember = new ShapeMember(); 161 valueShapeMember.setShape(structureValue); 162 mapShape.setMapValue(valueShapeMember); 163 164 assertEquals("Aws::Map<Aws::String, StructureShape>", CppViewHelper.computeCppType(mapShape)); 165 166 shape.setType("Any thing else"); 167 assertEquals("Aws::String", CppViewHelper.computeCppType(shape)); 168 } 169 170 @Test testComputeJsonCppType()171 public void testComputeJsonCppType() { 172 Shape shape = new Shape(); 173 shape.setType("long"); 174 assertEquals("Int64", CppViewHelper.computeJsonCppType(shape)); 175 shape.setType("integer"); 176 assertEquals("Integer", CppViewHelper.computeJsonCppType(shape)); 177 shape.setType("string"); 178 assertEquals("String", CppViewHelper.computeJsonCppType(shape)); 179 shape.setType("boolean"); 180 assertEquals("Bool", CppViewHelper.computeJsonCppType(shape)); 181 shape.setType("double"); 182 assertEquals("Double", CppViewHelper.computeJsonCppType(shape)); 183 shape.setType("double"); 184 assertEquals("Double", CppViewHelper.computeJsonCppType(shape)); 185 shape.setType("float"); 186 assertEquals("Double", CppViewHelper.computeJsonCppType(shape)); 187 shape.setType("map"); 188 assertEquals("Object", CppViewHelper.computeJsonCppType(shape)); 189 shape.setType("list"); 190 assertEquals("Array", CppViewHelper.computeJsonCppType(shape)); 191 shape.setType("structure"); 192 assertEquals("Object", CppViewHelper.computeJsonCppType(shape)); 193 shape.setType("blob"); 194 assertEquals("String", CppViewHelper.computeJsonCppType(shape)); 195 shape.setType("timestamp"); 196 assertEquals("Double", CppViewHelper.computeJsonCppType(shape)); 197 shape.setTimestampFormat("iso8601"); 198 assertEquals("String", CppViewHelper.computeJsonCppType(shape)); 199 shape.setTimestampFormat("UnixTimestamp"); 200 assertEquals("Double", CppViewHelper.computeJsonCppType(shape)); 201 shape.setTimestampFormat("rfc822"); 202 assertEquals("String", CppViewHelper.computeJsonCppType(shape)); 203 shape.setType("Any thing else"); 204 assertNull(CppViewHelper.computeJsonCppType(shape)); 205 } 206 207 // The following model is used in the next test: 208 // "StructureShape":{ 209 // "type":"structure", 210 // "members":{ 211 // "AnotherStructureShape":{"shape":"AnotherStructureShape"}, 212 // "EnumShape":{"shape":"EnumShape"}, 213 // "ListShape":{"shape":"ListShape"}, 214 // "MapShape":{"shape":"MapShape"} 215 // } 216 // }, 217 // "AnotherStructureShape":{"type":"structure"}, 218 // "EnumShape":{ 219 // "type":"string", 220 // "enum":["EnumValue"] 221 // }, 222 // "ListShape":{ 223 // "type":"list", 224 // "member":{"shape":"StringName"} 225 // }, 226 // "MapShape":{ 227 // "type":"map", 228 // "key":{"shape":"StringName"}, 229 // "value":{"shape":"MapValueStructureShape"} 230 // }, 231 // "StringName":{"type":"string"}, 232 // "MapValueStructureShape":{"type":"structure"} 233 @Test testComputeHeaderIncludes()234 public void testComputeHeaderIncludes() { 235 Shape structShape = new Shape(); 236 structShape.setType("structure"); 237 structShape.setName("StructureShape"); 238 239 Shape anotherStructShape = new Shape(); 240 anotherStructShape.setType("structure"); 241 anotherStructShape.setName("AnotherStructureShape"); 242 243 ShapeMember anotherStructShapeMember = new ShapeMember(); 244 anotherStructShapeMember.setShape(anotherStructShape); 245 structShape.setMembers(new HashMap<>()); 246 structShape.getMembers().put("AnotherStructureShape", anotherStructShapeMember); 247 248 Shape enumShape = new Shape(); 249 enumShape.setName("EnumShape"); 250 enumShape.setType("string"); 251 enumShape.setEnumValues(new LinkedList<>()); 252 enumShape.getEnumValues().add("EnumValue"); 253 254 ShapeMember enumShapeMember = new ShapeMember(); 255 enumShapeMember.setShape(enumShape); 256 structShape.getMembers().put("EnumShape", enumShapeMember); 257 258 Shape listShape = new Shape(); 259 listShape.setType("list"); 260 listShape.setName("ListShape"); 261 262 Shape innerShape = new Shape(); 263 innerShape.setType("string"); 264 innerShape.setName("StringName"); 265 266 ShapeMember innerShapeMember = new ShapeMember(); 267 innerShapeMember.setShape(innerShape); 268 269 listShape.setListMember(innerShapeMember); 270 ShapeMember listShapeMember = new ShapeMember(); 271 listShapeMember.setShape(listShape); 272 273 structShape.getMembers().put("ListShape", listShapeMember); 274 275 Shape mapShape = new Shape(); 276 mapShape.setType("map"); 277 mapShape.setName("MapShape"); 278 279 Shape keyShape = new Shape(); 280 keyShape.setType("string"); 281 keyShape.setName("StringName"); 282 283 ShapeMember keyShapeMember = new ShapeMember(); 284 keyShapeMember.setShape(keyShape); 285 mapShape.setMapKey(keyShapeMember); 286 287 Shape structureValue = new Shape(); 288 structureValue.setType("structure"); 289 structureValue.setName("MapValueStructureShape"); 290 291 ShapeMember valueShapeMember = new ShapeMember(); 292 valueShapeMember.setShape(structureValue); 293 mapShape.setMapValue(valueShapeMember); 294 295 ShapeMember mapShapeMember = new ShapeMember(); 296 mapShapeMember.setShape(mapShape); 297 298 structShape.getMembers().put("MapShape", mapShapeMember); 299 300 String serviceAbbr = "service"; 301 Set<String> headerIncludes = CppViewHelper.computeHeaderIncludes(serviceAbbr, structShape); 302 303 assertTrue(headerIncludes.contains("<aws/" + serviceAbbr + "/model/AnotherStructureShape.h>")); 304 assertTrue(headerIncludes.contains("<aws/" + serviceAbbr + "/model/EnumShape.h>")); 305 assertTrue(headerIncludes.contains("<aws/" + serviceAbbr + "/model/MapValueStructureShape.h>")); 306 assertTrue(headerIncludes.contains("<aws/core/utils/memory/stl/AWSString.h>")); 307 assertTrue(headerIncludes.contains("<aws/core/utils/memory/stl/AWSMap.h>")); 308 assertTrue(headerIncludes.contains("<aws/core/utils/memory/stl/AWSVector.h>")); 309 310 } 311 312 @Test testComputeOperationNameFromShapeName()313 public void testComputeOperationNameFromShapeName() { 314 assertEquals("OperationName", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameRequest")); 315 assertEquals("OperationName", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameResult")); 316 assertEquals("OperationNameOther", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameOther")); 317 318 assertEquals("OperationNameRequests", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameRequestsRequest")); 319 assertEquals("OperationNameRequests", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameRequestsResult")); 320 assertEquals("OperationNameResults", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameResultsRequest")); 321 assertEquals("OperationNameResults", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameResultsResult")); 322 assertEquals("OperationNameResultsRequestResultRequest", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameResultsRequestResultRequestResult")); 323 assertEquals("OperationNameResultsRequestResultRequest", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameResultsRequestResultRequestRequest")); 324 325 assertEquals("OperationNameResultsRequestResultRequestDerp", CppViewHelper.computeOperationNameFromInputOutputShape("OperationNameResultsRequestResultRequestDerp")); 326 327 } 328 } 329