Best Nimble code snippet using Foundation.NSDictionary
ObjcModelTranslatorTest.swift
Source:ObjcModelTranslatorTest.swift
1import XCTest2import ReverseJsonCore3@testable import ReverseJsonObjc4class ObjcModelTranslatorTest: XCTestCase {5 6 func testSimpleString() {7 let type: FieldType = .text8 9 let modelCreator = ObjcModelCreator()10 let modelResult: String = modelCreator.translate(type, name: "SimpleText")11 XCTAssertEqual("", modelResult)12 }13 14 func testSimpleInt() {15 let type: FieldType = .number(.int)16 17 let modelCreator = ObjcModelCreator()18 let modelResult: String = modelCreator.translate(type, name: "SimpleNumber")19 XCTAssertEqual("", modelResult)20 }21 func testSimpleFloat() {22 let type: FieldType = .number(.float)23 24 let modelCreator = ObjcModelCreator()25 let modelResult: String = modelCreator.translate(type, name: "SimpleNumber")26 XCTAssertEqual("", modelResult)27 }28 29 func testSimpleDouble() {30 let type: FieldType = .number(.double)31 32 let modelCreator = ObjcModelCreator()33 let modelResult: String = modelCreator.translate(type, name: "SimpleNumber")34 XCTAssertEqual("", modelResult)35 }36 37 func testBoolDouble() {38 let type: FieldType = .number(.bool)39 40 let modelCreator = ObjcModelCreator()41 let modelResult: String = modelCreator.translate(type, name: "SimpleNumber")42 XCTAssertEqual("", modelResult)43 }44 45 func testEmptyObject() {46 let type: FieldType = .unnamedObject([])47 48 let modelCreator = ObjcModelCreator()49 let modelResult: String = modelCreator.translate(type, name: "TestObject")50 XCTAssertEqual(String(lines:51 "// TestObject.h",52 "#import <Foundation/Foundation.h>",53 "NS_ASSUME_NONNULL_BEGIN",54 "@interface TestObject : NSObject",55 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",56 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",57 "@end",58 "NS_ASSUME_NONNULL_END",59 "// TestObject.m",60 "#import \"TestObject.h\"",61 "@implementation TestObject",62 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",63 " self = [super init];",64 " if (self) {",65 " }",66 " return self;",67 "}",68 "- (instancetype)initWithJsonValue:(id)jsonValue {",69 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",70 " self = [self initWithJsonDictionary:jsonValue];",71 " } else {",72 " self = nil;",73 " }",74 " return self;",75 "}",76 "@end"77 ), modelResult)78 }79 80 func testNamedEmptyObject() {81 let type: FieldType = .object(name: "CustomObjectName", [])82 83 let modelCreator = ObjcModelCreator()84 let modelResult: String = modelCreator.translate(type, name: "TestObject")85 XCTAssertEqual(String(lines:86 "// CustomObjectName.h",87 "#import <Foundation/Foundation.h>",88 "NS_ASSUME_NONNULL_BEGIN",89 "@interface CustomObjectName : NSObject",90 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",91 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",92 "@end",93 "NS_ASSUME_NONNULL_END",94 "// CustomObjectName.m",95 "#import \"CustomObjectName.h\"",96 "@implementation CustomObjectName",97 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",98 " self = [super init];",99 " if (self) {",100 " }",101 " return self;",102 "}",103 "- (instancetype)initWithJsonValue:(id)jsonValue {",104 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",105 " self = [self initWithJsonDictionary:jsonValue];",106 " } else {",107 " self = nil;",108 " }",109 " return self;",110 "}",111 "@end"112 ), modelResult)113 }114 115 func testEmptyEnum() {116 let type: FieldType = .unnamedEnum([])117 118 let modelCreator = ObjcModelCreator()119 let modelResult: String = modelCreator.translate(type, name: "TestObject")120 XCTAssertEqual(String(lines:121 "// TestObject.h",122 "#import <Foundation/Foundation.h>",123 "NS_ASSUME_NONNULL_BEGIN",124 "@interface TestObject : NSObject",125 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",126 "@end",127 "NS_ASSUME_NONNULL_END",128 "// TestObject.m",129 "#import \"TestObject.h\"",130 "@implementation TestObject",131 "- (instancetype)initWithJsonValue:(id)jsonValue {",132 " self = [super init];",133 " if (self) {",134 " }",135 " return self;",136 "}",137 "@end"138 ), modelResult)139 }140 141 func testNamedEmptyEnum() {142 let type: FieldType = .enum(name: "CustomObject", [])143 144 let modelCreator = ObjcModelCreator()145 let modelResult: String = modelCreator.translate(type, name: "TestObject")146 XCTAssertEqual(String(lines:147 "// CustomObject.h",148 "#import <Foundation/Foundation.h>",149 "NS_ASSUME_NONNULL_BEGIN",150 "@interface CustomObject : NSObject",151 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",152 "@end",153 "NS_ASSUME_NONNULL_END",154 "// CustomObject.m",155 "#import \"CustomObject.h\"",156 "@implementation CustomObject",157 "- (instancetype)initWithJsonValue:(id)jsonValue {",158 " self = [super init];",159 " if (self) {",160 " }",161 " return self;",162 "}",163 "@end"164 ), modelResult)165 }166 167 func testTextList() {168 let type: FieldType = .list(.text)169 170 let modelCreator = ObjcModelCreator()171 let modelResult: String = modelCreator.translate(type, name: "TextList")172 XCTAssertEqual("", modelResult)173 }174 175 func testUnknownType() {176 let type: FieldType = .unnamedUnknown177 178 let modelCreator = ObjcModelCreator()179 let modelResult: String = modelCreator.translate(type, name: "MyTypeName")180 XCTAssertEqual("", modelResult)181 }182 183 func testListOfEmptyObject() {184 let modelCreator = ObjcModelCreator()185 let modelResult: String = modelCreator.translate(.list(.unnamedObject([])), name: "TestObjectList")186 XCTAssertEqual(String(lines:187 "// TestObjectListItem.h",188 "#import <Foundation/Foundation.h>",189 "NS_ASSUME_NONNULL_BEGIN",190 "@interface TestObjectListItem : NSObject",191 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",192 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",193 "@end",194 "NS_ASSUME_NONNULL_END",195 "// TestObjectListItem.m",196 "#import \"TestObjectListItem.h\"",197 "@implementation TestObjectListItem",198 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",199 " self = [super init];",200 " if (self) {",201 " }",202 " return self;",203 "}",204 "- (instancetype)initWithJsonValue:(id)jsonValue {",205 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",206 " self = [self initWithJsonDictionary:jsonValue];",207 " } else {",208 " self = nil;",209 " }",210 " return self;",211 "}",212 "@end"213 ), modelResult)214 }215 func testObjectWithSingleTextField() {216 let type: FieldType = .unnamedObject([.init(name: "text", type: .text)])217 218 let modelCreator = ObjcModelCreator()219 let modelResult: String = modelCreator.translate(type, name: "TestObject")220 XCTAssertEqual(String(lines:221 "// TestObject.h",222 "#import <Foundation/Foundation.h>",223 "NS_ASSUME_NONNULL_BEGIN",224 "@interface TestObject : NSObject",225 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",226 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",227 "@property (nonatomic, copy, readonly) NSString *text;",228 "@end",229 "NS_ASSUME_NONNULL_END",230 "// TestObject.m",231 "#import \"TestObject.h\"",232 "@implementation TestObject",233 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",234 " self = [super init];",235 " if (self) {",236 " _text = [dict[@\"text\"] isKindOfClass:[NSString class]] ? dict[@\"text\"] : @\"\";",237 " }",238 " return self;",239 "}",240 "- (instancetype)initWithJsonValue:(id)jsonValue {",241 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",242 " self = [self initWithJsonDictionary:jsonValue];",243 " } else {",244 " self = nil;",245 " }",246 " return self;",247 "}",248 "@end"249 ), modelResult)250 }251 252 func testObjectWithSingleTextFieldAndReverseMapper() {253 let type: FieldType = .unnamedObject([.init(name: "text", type: .text)])254 255 var modelCreator = ObjcModelCreator()256 modelCreator.createToJson = true257 let modelResult: String = modelCreator.translate(type, name: "TestObject")258 XCTAssertEqual(String(lines:259 "// TestObject.h",260 "#import <Foundation/Foundation.h>",261 "NS_ASSUME_NONNULL_BEGIN",262 "@interface TestObject : NSObject",263 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",264 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",265 "- (NSDictionary<NSString *, id<NSObject>> *)toJson;",266 "@property (nonatomic, copy, readonly) NSString *text;",267 "@end",268 "NS_ASSUME_NONNULL_END",269 "// TestObject.m",270 "#import \"TestObject.h\"",271 "@implementation TestObject",272 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",273 " self = [super init];",274 " if (self) {",275 " _text = [dict[@\"text\"] isKindOfClass:[NSString class]] ? dict[@\"text\"] : @\"\";",276 " }",277 " return self;",278 "}",279 "- (instancetype)initWithJsonValue:(id)jsonValue {",280 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",281 " self = [self initWithJsonDictionary:jsonValue];",282 " } else {",283 " self = nil;",284 " }",285 " return self;",286 "}",287 "- (NSDictionary<NSString *, id<NSObject>> *)toJson {",288 " NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithCapacity:1];",289 " ret[@\"text\"] = _text;",290 " return [ret copy];",291 "}",292 "@end"293 ), modelResult)294 }295 296 func testObjectWithSingleReservedTextField() {297 let type: FieldType = .unnamedObject([.init(name: "signed", type: .text)])298 299 let modelCreator = ObjcModelCreator()300 let modelResult: String = modelCreator.translate(type, name: "TestObject")301 XCTAssertEqual(String(lines:302 "// TestObject.h",303 "#import <Foundation/Foundation.h>",304 "NS_ASSUME_NONNULL_BEGIN",305 "@interface TestObject : NSObject",306 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",307 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",308 "@property (nonatomic, copy, readonly) NSString *$signed;",309 "@end",310 "NS_ASSUME_NONNULL_END",311 "// TestObject.m",312 "#import \"TestObject.h\"",313 "@implementation TestObject",314 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",315 " self = [super init];",316 " if (self) {",317 " _$signed = [dict[@\"signed\"] isKindOfClass:[NSString class]] ? dict[@\"signed\"] : @\"\";",318 " }",319 " return self;",320 "}",321 "- (instancetype)initWithJsonValue:(id)jsonValue {",322 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",323 " self = [self initWithJsonDictionary:jsonValue];",324 " } else {",325 " self = nil;",326 " }",327 " return self;",328 "}",329 "@end"330 ), modelResult)331 }332 333 func testObjectWithFieldContainingListOfText() {334 let type: FieldType = .unnamedObject([.init(name: "texts", type: .list(.text))])335 336 let modelCreator = ObjcModelCreator()337 let modelResult: String = modelCreator.translate(type, name: "TestObject")338 XCTAssertEqual(String(lines:339 "// TestObject.h",340 "#import <Foundation/Foundation.h>",341 "NS_ASSUME_NONNULL_BEGIN",342 "@interface TestObject : NSObject",343 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",344 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",345 "@property (nonatomic, strong, readonly) NSArray<NSString *> *texts;",346 "@end",347 "NS_ASSUME_NONNULL_END",348 "// TestObject.m",349 "#import \"TestObject.h\"",350 "@implementation TestObject",351 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",352 " self = [super init];",353 " if (self) {",354 " _texts = ({",355 " id value = dict[@\"texts\"];",356 " NSMutableArray<NSString *> *values = nil;",357 " if ([value isKindOfClass:[NSArray class]]) {",358 " NSArray *array = value;",359 " values = [NSMutableArray arrayWithCapacity:array.count];",360 " for (id item in array) {",361 " NSString *parsedItem = [item isKindOfClass:[NSString class]] ? item : @\"\";",362 " [values addObject:parsedItem ?: (id)[NSNull null]];",363 " }",364 " }",365 " [values copy] ?: @[];",366 " });",367 " }",368 " return self;",369 "}",370 "- (instancetype)initWithJsonValue:(id)jsonValue {",371 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",372 " self = [self initWithJsonDictionary:jsonValue];",373 " } else {",374 " self = nil;",375 " }",376 " return self;",377 "}",378 "@end"379 ), modelResult)380 }381 382 func testObjectWithFieldContainingListOfTextWithReverseMapper() {383 let type: FieldType = .unnamedObject([.init(name: "texts", type: .list(.text))])384 385 var modelCreator = ObjcModelCreator()386 modelCreator.createToJson = true387 let modelResult: String = modelCreator.translate(type, name: "TestObject")388 XCTAssertEqual(String(lines:389 "// TestObject.h",390 "#import <Foundation/Foundation.h>",391 "NS_ASSUME_NONNULL_BEGIN",392 "@interface TestObject : NSObject",393 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",394 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",395 "- (NSDictionary<NSString *, id<NSObject>> *)toJson;",396 "@property (nonatomic, strong, readonly) NSArray<NSString *> *texts;",397 "@end",398 "NS_ASSUME_NONNULL_END",399 "// TestObject.m",400 "#import \"TestObject.h\"",401 "@implementation TestObject",402 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",403 " self = [super init];",404 " if (self) {",405 " _texts = ({",406 " id value = dict[@\"texts\"];",407 " NSMutableArray<NSString *> *values = nil;",408 " if ([value isKindOfClass:[NSArray class]]) {",409 " NSArray *array = value;",410 " values = [NSMutableArray arrayWithCapacity:array.count];",411 " for (id item in array) {",412 " NSString *parsedItem = [item isKindOfClass:[NSString class]] ? item : @\"\";",413 " [values addObject:parsedItem ?: (id)[NSNull null]];",414 " }",415 " }",416 " [values copy] ?: @[];",417 " });",418 " }",419 " return self;",420 "}",421 "- (instancetype)initWithJsonValue:(id)jsonValue {",422 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",423 " self = [self initWithJsonDictionary:jsonValue];",424 " } else {",425 " self = nil;",426 " }",427 " return self;",428 "}",429 "- (NSDictionary<NSString *, id<NSObject>> *)toJson {",430 " NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithCapacity:1];",431 " ret[@\"texts\"] = ({",432 " NSMutableArray<id<NSObject>> *values = nil;",433 " NSArray *array = _texts;",434 " if (array) {",435 " values = [NSMutableArray arrayWithCapacity:array.count];",436 " for (id item in array) {",437 " if (item == [NSNull null]) {",438 " [values addObject:item];",439 " } else {",440 " id json = item;",441 " [values addObject:json ?: (id)[NSNull null]];",442 " }",443 " }",444 " }",445 " [values copy] ?: @[];",446 " });",447 " return [ret copy];",448 "}",449 "@end"450 ), modelResult)451 }452 453 func testObjectWithFieldContainingOptionalListOfText() {454 let type: FieldType = .unnamedObject([.init(name: "texts", type: .optional(.list(.text)))])455 456 let modelCreator = ObjcModelCreator()457 let modelResult: String = modelCreator.translate(type, name: "TestObject")458 XCTAssertEqual(String(lines:459 "// TestObject.h",460 "#import <Foundation/Foundation.h>",461 "NS_ASSUME_NONNULL_BEGIN",462 "@interface TestObject : NSObject",463 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",464 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",465 "@property (nonatomic, strong, readonly, nullable) NSArray<NSString *> *texts;",466 "@end",467 "NS_ASSUME_NONNULL_END",468 "// TestObject.m",469 "#import \"TestObject.h\"",470 "@implementation TestObject",471 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",472 " self = [super init];",473 " if (self) {",474 " _texts = ({",475 " id value = dict[@\"texts\"];",476 " NSMutableArray<NSString *> *values = nil;",477 " if ([value isKindOfClass:[NSArray class]]) {",478 " NSArray *array = value;",479 " values = [NSMutableArray arrayWithCapacity:array.count];",480 " for (id item in array) {",481 " NSString *parsedItem = [item isKindOfClass:[NSString class]] ? item : @\"\";",482 " [values addObject:parsedItem ?: (id)[NSNull null]];",483 " }",484 " }",485 " [values copy];",486 " });",487 " }",488 " return self;",489 "}",490 "- (instancetype)initWithJsonValue:(id)jsonValue {",491 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",492 " self = [self initWithJsonDictionary:jsonValue];",493 " } else {",494 " self = nil;",495 " }",496 " return self;",497 "}",498 "@end"499 ), modelResult)500 }501 func testObjectWithDifferentFields() {502 let modelCreator = ObjcModelCreator()503 let modelResult: String = modelCreator.translate(.unnamedObject([504 .init(name: "listOfListsOfText", type: .list(.list(.text))),505 .init(name: "numbers", type: .list(.number(.int))),506 .init(name: "int", type: .number(.int)),507 .init(name: "optionalText", type: .optional(.text))508 ]), name: "TestObject")509 XCTAssertEqual(String(lines:510 "// TestObject.h",511 "#import <Foundation/Foundation.h>",512 "NS_ASSUME_NONNULL_BEGIN",513 "@interface TestObject : NSObject",514 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",515 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",516 "@property (nonatomic, strong, readonly) NSArray<NSArray<NSString *> *> *listOfListsOfText;",517 "@property (nonatomic, strong, readonly) NSArray<NSNumber/*NSInteger*/ *> *numbers;",518 "@property (nonatomic, assign, readonly) NSInteger $int;",519 "@property (nonatomic, strong, readonly, nullable) NSString *optionalText;",520 "@end",521 "NS_ASSUME_NONNULL_END",522 "// TestObject.m",523 "#import \"TestObject.h\"",524 "@implementation TestObject",525 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",526 " self = [super init];",527 " if (self) {",528 " _listOfListsOfText = ({",529 " id value = dict[@\"listOfListsOfText\"];",530 " NSMutableArray<NSArray<NSString *> *> *values = nil;",531 " if ([value isKindOfClass:[NSArray class]]) {",532 " NSArray *array = value;",533 " values = [NSMutableArray arrayWithCapacity:array.count];",534 " for (id item in array) {",535 " NSArray<NSString *> *parsedItem = ({",536 " id value = item;",537 " NSMutableArray<NSString *> *values = nil;",538 " if ([value isKindOfClass:[NSArray class]]) {",539 " NSArray *array = value;",540 " values = [NSMutableArray arrayWithCapacity:array.count];",541 " for (id item in array) {",542 " NSString *parsedItem = [item isKindOfClass:[NSString class]] ? item : @\"\";",543 " [values addObject:parsedItem ?: (id)[NSNull null]];",544 " }",545 " }",546 " [values copy] ?: @[];",547 " });",548 " [values addObject:parsedItem ?: (id)[NSNull null]];",549 " }",550 " }",551 " [values copy] ?: @[];",552 " });",553 " _numbers = ({",554 " id value = dict[@\"numbers\"];",555 " NSMutableArray<NSNumber/*NSInteger*/ *> *values = nil;",556 " if ([value isKindOfClass:[NSArray class]]) {",557 " NSArray *array = value;",558 " values = [NSMutableArray arrayWithCapacity:array.count];",559 " for (id item in array) {",560 " NSNumber/*NSInteger*/ *parsedItem = [item isKindOfClass:[NSNumber class]] ? item : nil;",561 " [values addObject:parsedItem ?: (id)[NSNull null]];",562 " }",563 " }",564 " [values copy] ?: @[];",565 " });",566 " _$int = [dict[@\"int\"] isKindOfClass:[NSNumber class]] ? [dict[@\"int\"] integerValue] : 0;",567 " _optionalText = [dict[@\"optionalText\"] isKindOfClass:[NSString class]] ? dict[@\"optionalText\"] : nil;",568 " }",569 " return self;",570 "}",571 "- (instancetype)initWithJsonValue:(id)jsonValue {",572 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",573 " self = [self initWithJsonDictionary:jsonValue];",574 " } else {",575 " self = nil;",576 " }",577 " return self;",578 "}",579 "@end"580 ), modelResult)581 }582 583 func testObjectWithOneFieldWithSubDeclaration() {584 let modelCreator = ObjcModelCreator()585 let modelResult: String = modelCreator.translate(.unnamedObject([586 .init(name: "subObject", type: .unnamedObject([]))587 ]), name: "TestObject")588 XCTAssertEqual(String(lines:589 "// TestObject.h",590 "#import <Foundation/Foundation.h>",591 "@class TestObjectSubObject;",592 "NS_ASSUME_NONNULL_BEGIN",593 "@interface TestObject : NSObject",594 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",595 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",596 "@property (nonatomic, strong, readonly) TestObjectSubObject *subObject;",597 "@end",598 "NS_ASSUME_NONNULL_END",599 "// TestObjectSubObject.h",600 "#import <Foundation/Foundation.h>",601 "NS_ASSUME_NONNULL_BEGIN",602 "@interface TestObjectSubObject : NSObject",603 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",604 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",605 "@end",606 "NS_ASSUME_NONNULL_END",607 "// TestObject.m",608 "#import \"TestObject.h\"",609 "#import \"TestObjectSubObject.h\"",610 "@implementation TestObject",611 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",612 " self = [super init];",613 " if (self) {",614 " _subObject = ([[TestObjectSubObject alloc] initWithJsonValue:dict[@\"subObject\"]] ?: [[TestObjectSubObject alloc] initWithJsonDictionary:@{}]);",615 " }",616 " return self;",617 "}",618 "- (instancetype)initWithJsonValue:(id)jsonValue {",619 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",620 " self = [self initWithJsonDictionary:jsonValue];",621 " } else {",622 " self = nil;",623 " }",624 " return self;",625 "}",626 "@end",627 "// TestObjectSubObject.m",628 "#import \"TestObjectSubObject.h\"",629 "@implementation TestObjectSubObject",630 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",631 " self = [super init];",632 " if (self) {",633 " }",634 " return self;",635 "}",636 "- (instancetype)initWithJsonValue:(id)jsonValue {",637 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",638 " self = [self initWithJsonDictionary:jsonValue];",639 " } else {",640 " self = nil;",641 " }",642 " return self;",643 "}",644 "@end"645 ), modelResult)646 }647 648 func testEnumWithOneCase() {649 let type: FieldType = .unnamedEnum([.text])650 651 let modelCreator = ObjcModelCreator()652 let modelResult: String = modelCreator.translate(type, name: "TestObject")653 XCTAssertEqual(String(lines:654 "// TestObject.h",655 "#import <Foundation/Foundation.h>",656 "NS_ASSUME_NONNULL_BEGIN",657 "@interface TestObject : NSObject",658 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",659 "@property (nonatomic, copy, readonly) NSString *text;",660 "@end",661 "NS_ASSUME_NONNULL_END",662 "// TestObject.m",663 "#import \"TestObject.h\"",664 "@implementation TestObject",665 "- (instancetype)initWithJsonValue:(id)jsonValue {",666 " self = [super init];",667 " if (self) {",668 " _text = [jsonValue isKindOfClass:[NSString class]] ? jsonValue : @\"\";",669 " }",670 " return self;",671 "}",672 "@end"673 ), modelResult)674 }675 676 func testEnumWithOneCaseAndReverseMapping() {677 let type: FieldType = .unnamedEnum([.text])678 679 var modelCreator = ObjcModelCreator()680 modelCreator.createToJson = true681 let modelResult: String = modelCreator.translate(type, name: "TestObject")682 XCTAssertEqual(String(lines:683 "// TestObject.h",684 "#import <Foundation/Foundation.h>",685 "NS_ASSUME_NONNULL_BEGIN",686 "@interface TestObject : NSObject",687 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",688 "- (id<NSObject>)toJson;",689 "@property (nonatomic, copy, readonly) NSString *text;",690 "@end",691 "NS_ASSUME_NONNULL_END",692 "// TestObject.m",693 "#import \"TestObject.h\"",694 "@implementation TestObject",695 "- (instancetype)initWithJsonValue:(id)jsonValue {",696 " self = [super init];",697 " if (self) {",698 " _text = [jsonValue isKindOfClass:[NSString class]] ? jsonValue : @\"\";",699 " }",700 " return self;",701 "}",702 "- (id<NSObject>)toJson {",703 " if (_text) {",704 " return _text;",705 " }",706 " return nil;",707 "}",708 "@end"709 ), modelResult)710 }711 712 func testEnumWithTwoCases() {713 let type: FieldType = .unnamedEnum([714 .optional(.unnamedObject([])),715 .number(.int)716 ])717 718 let modelCreator = ObjcModelCreator()719 let modelResult: String = modelCreator.translate(type, name: "TestObject")720 XCTAssertEqual(String(lines:721 "// TestObject.h",722 "#import <Foundation/Foundation.h>",723 "@class TestObjectObject;",724 "NS_ASSUME_NONNULL_BEGIN",725 "@interface TestObject : NSObject",726 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",727 "@property (nonatomic, copy, readonly, nullable) NSNumber/*NSInteger*/ *number;",728 "@property (nonatomic, strong, readonly, nullable) TestObjectObject *object;",729 "@end",730 "NS_ASSUME_NONNULL_END",731 "// TestObjectObject.h",732 "#import <Foundation/Foundation.h>",733 "NS_ASSUME_NONNULL_BEGIN",734 "@interface TestObjectObject : NSObject",735 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",736 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",737 "@end",738 "NS_ASSUME_NONNULL_END",739 "// TestObject.m",740 "#import \"TestObject.h\"",741 "#import \"TestObjectObject.h\"",742 "@implementation TestObject",743 "- (instancetype)initWithJsonValue:(id)jsonValue {",744 " self = [super init];",745 " if (self) {",746 " _number = [jsonValue isKindOfClass:[NSNumber class]] ? jsonValue : nil;",747 " _object = [[TestObjectObject alloc] initWithJsonValue:jsonValue];",748 " }",749 " return self;",750 "}",751 "@end",752 "// TestObjectObject.m",753 "#import \"TestObjectObject.h\"",754 "@implementation TestObjectObject",755 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",756 " self = [super init];",757 " if (self) {",758 " }",759 " return self;",760 "}",761 "- (instancetype)initWithJsonValue:(id)jsonValue {",762 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",763 " self = [self initWithJsonDictionary:jsonValue];",764 " } else {",765 " self = nil;",766 " }",767 " return self;",768 "}",769 "@end"770 ), modelResult)771 }772 func testEnumWithTwoCasesAndReverseMapping() {773 let type: FieldType = .unnamedEnum([774 .optional(.unnamedObject([])),775 .number(.int)776 ])777 778 var modelCreator = ObjcModelCreator()779 modelCreator.createToJson = true780 let modelResult: String = modelCreator.translate(type, name: "TestObject")781 XCTAssertEqual(String(lines:782 "// TestObject.h",783 "#import <Foundation/Foundation.h>",784 "@class TestObjectObject;",785 "NS_ASSUME_NONNULL_BEGIN",786 "@interface TestObject : NSObject",787 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",788 "- (id<NSObject>)toJson;",789 "@property (nonatomic, copy, readonly, nullable) NSNumber/*NSInteger*/ *number;",790 "@property (nonatomic, strong, readonly, nullable) TestObjectObject *object;",791 "@end",792 "NS_ASSUME_NONNULL_END",793 "// TestObjectObject.h",794 "#import <Foundation/Foundation.h>",795 "NS_ASSUME_NONNULL_BEGIN",796 "@interface TestObjectObject : NSObject",797 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",798 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",799 "- (NSDictionary<NSString *, id<NSObject>> *)toJson;",800 "@end",801 "NS_ASSUME_NONNULL_END",802 "// TestObject.m",803 "#import \"TestObject.h\"",804 "#import \"TestObjectObject.h\"",805 "@implementation TestObject",806 "- (instancetype)initWithJsonValue:(id)jsonValue {",807 " self = [super init];",808 " if (self) {",809 " _number = [jsonValue isKindOfClass:[NSNumber class]] ? jsonValue : nil;",810 " _object = [[TestObjectObject alloc] initWithJsonValue:jsonValue];",811 " }",812 " return self;",813 "}",814 "- (id<NSObject>)toJson {",815 " if (_number) {",816 " return _number;",817 " } else if (_object) {",818 " return [_object toJson];",819 " }",820 " return nil;",821 "}",822 "@end",823 "// TestObjectObject.m",824 "#import \"TestObjectObject.h\"",825 "@implementation TestObjectObject",826 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",827 " self = [super init];",828 " if (self) {",829 " }",830 " return self;",831 "}",832 "- (instancetype)initWithJsonValue:(id)jsonValue {",833 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",834 " self = [self initWithJsonDictionary:jsonValue];",835 " } else {",836 " self = nil;",837 " }",838 " return self;",839 "}",840 "- (NSDictionary<NSString *, id<NSObject>> *)toJson {",841 " NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithCapacity:0];",842 " return [ret copy];",843 "}",844 "@end"845 ), modelResult)846 }847 848 func testNamedEnumWithTwoCasesAndReverseMapping() {849 let type: FieldType = .enum(name: "CustomEnumName", [850 .optional(.object(name: "CustomObjectName", [])),851 .number(.int)852 ])853 854 var modelCreator = ObjcModelCreator()855 modelCreator.createToJson = true856 let modelResult: String = modelCreator.translate(type, name: "TestObject")857 XCTAssertEqual(String(lines:858 "// CustomEnumName.h",859 "#import <Foundation/Foundation.h>",860 "@class CustomObjectName;",861 "NS_ASSUME_NONNULL_BEGIN",862 "@interface CustomEnumName : NSObject",863 "- (instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",864 "- (id<NSObject>)toJson;",865 "@property (nonatomic, strong, readonly, nullable) CustomObjectName *customObjectName;",866 "@property (nonatomic, copy, readonly, nullable) NSNumber/*NSInteger*/ *number;",867 "@end",868 "NS_ASSUME_NONNULL_END",869 "// CustomObjectName.h",870 "#import <Foundation/Foundation.h>",871 "NS_ASSUME_NONNULL_BEGIN",872 "@interface CustomObjectName : NSObject",873 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",874 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",875 "- (NSDictionary<NSString *, id<NSObject>> *)toJson;",876 "@end",877 "NS_ASSUME_NONNULL_END",878 "// CustomEnumName.m",879 "#import \"CustomEnumName.h\"",880 "#import \"CustomObjectName.h\"",881 "@implementation CustomEnumName",882 "- (instancetype)initWithJsonValue:(id)jsonValue {",883 " self = [super init];",884 " if (self) {",885 " _customObjectName = [[CustomObjectName alloc] initWithJsonValue:jsonValue];",886 " _number = [jsonValue isKindOfClass:[NSNumber class]] ? jsonValue : nil;",887 " }",888 " return self;",889 "}",890 "- (id<NSObject>)toJson {",891 " if (_customObjectName) {",892 " return [_customObjectName toJson];",893 " } else if (_number) {",894 " return _number;",895 " }",896 " return nil;",897 "}",898 "@end",899 "// CustomObjectName.m",900 "#import \"CustomObjectName.h\"",901 "@implementation CustomObjectName",902 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",903 " self = [super init];",904 " if (self) {",905 " }",906 " return self;",907 "}",908 "- (instancetype)initWithJsonValue:(id)jsonValue {",909 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",910 " self = [self initWithJsonDictionary:jsonValue];",911 " } else {",912 " self = nil;",913 " }",914 " return self;",915 "}",916 "- (NSDictionary<NSString *, id<NSObject>> *)toJson {",917 " NSMutableDictionary *ret = [NSMutableDictionary dictionaryWithCapacity:0];",918 " return [ret copy];",919 "}",920 "@end"921 ), modelResult)922 }923 func testAtomicFieldsFlag() {924 let type: FieldType = .unnamedObject([.init(name: "text", type: .text)])925 926 var modelCreator = ObjcModelCreator()927 modelCreator.atomic = true928 let modelResult: String = modelCreator.translate(type, name: "TestObject")929 let expected = String(lines:930 "// TestObject.h",931 "#import <Foundation/Foundation.h>",932 "NS_ASSUME_NONNULL_BEGIN",933 "@interface TestObject : NSObject",934 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",935 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",936 "@property (atomic, copy, readonly) NSString *text;",937 "@end",938 "NS_ASSUME_NONNULL_END",939 "// TestObject.m",940 "#import \"TestObject.h\"",941 "@implementation TestObject",942 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",943 " self = [super init];",944 " if (self) {",945 " _text = [dict[@\"text\"] isKindOfClass:[NSString class]] ? dict[@\"text\"] : @\"\";",946 " }",947 " return self;",948 "}",949 "- (instancetype)initWithJsonValue:(id)jsonValue {",950 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",951 " self = [self initWithJsonDictionary:jsonValue];",952 " } else {",953 " self = nil;",954 " }",955 " return self;",956 "}",957 "@end"958 )959 XCTAssertEqual(expected, modelResult)960 }961 962 func testMutableFieldsFlag() {963 let type: FieldType = .unnamedObject([.init(name: "text", type: .text)])964 965 var modelCreator = ObjcModelCreator()966 modelCreator.readonly = false967 let modelResult: String = modelCreator.translate(type, name: "TestObject")968 let expected = String(lines:969 "// TestObject.h",970 "#import <Foundation/Foundation.h>",971 "NS_ASSUME_NONNULL_BEGIN",972 "@interface TestObject : NSObject",973 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",974 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",975 "@property (nonatomic, copy) NSString *text;",976 "@end",977 "NS_ASSUME_NONNULL_END",978 "// TestObject.m",979 "#import \"TestObject.h\"",980 "@implementation TestObject",981 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",982 " self = [super init];",983 " if (self) {",984 " _text = [dict[@\"text\"] isKindOfClass:[NSString class]] ? dict[@\"text\"] : @\"\";",985 " }",986 " return self;",987 "}",988 "- (instancetype)initWithJsonValue:(id)jsonValue {",989 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",990 " self = [self initWithJsonDictionary:jsonValue];",991 " } else {",992 " self = nil;",993 " }",994 " return self;",995 "}",996 "@end"997 )998 XCTAssertEqual(expected, modelResult)999 }1000 1001 1002 func testPrefixOption() {1003 let type: FieldType = .unnamedObject([.init(name: "text", type: .text)])1004 1005 var modelCreator = ObjcModelCreator()1006 modelCreator.typePrefix = "ABC"1007 let modelResult: String = modelCreator.translate(type, name: "TestObject")1008 let expected = [1009 "// ABCTestObject.h",1010 "#import <Foundation/Foundation.h>",1011 "NS_ASSUME_NONNULL_BEGIN",1012 "@interface ABCTestObject : NSObject",1013 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id<NSObject>> *)dictionary;",1014 "- (nullable instancetype)initWithJsonValue:(nullable id<NSObject>)jsonValue;",1015 "@property (nonatomic, copy, readonly) NSString *text;",1016 "@end",1017 "NS_ASSUME_NONNULL_END",1018 "// ABCTestObject.m",1019 "#import \"ABCTestObject.h\"",1020 "@implementation ABCTestObject",1021 "- (instancetype)initWithJsonDictionary:(NSDictionary<NSString *, id> *)dict {",1022 " self = [super init];",1023 " if (self) {",1024 " _text = [dict[@\"text\"] isKindOfClass:[NSString class]] ? dict[@\"text\"] : @\"\";",1025 " }",1026 " return self;",1027 "}",1028 "- (instancetype)initWithJsonValue:(id)jsonValue {",1029 " if ([jsonValue isKindOfClass:[NSDictionary class]]) {",1030 " self = [self initWithJsonDictionary:jsonValue];",1031 " } else {",1032 " self = nil;",1033 " }",1034 " return self;",1035 "}",1036 "@end"1037 ].joined(separator: "\n")1038 XCTAssertEqual(expected, modelResult)1039 }1040 1041}...
JsapiRest.swift
Source:JsapiRest.swift
1//2// JsapiRest.swift3// JsapiApi4//5// Created by youssef on 3/12/15.6// Copyright (c) 2015 Knetik. All rights reserved.7//8import Foundation9fileprivate func < <T : Comparable>(lhs: T?, rhs: T?) -> Bool {10 switch (lhs, rhs) {11 case let (l?, r?):12 return l < r13 case (nil, _?):14 return true15 default:16 return false17 }18}19fileprivate func <= <T : Comparable>(lhs: T?, rhs: T?) -> Bool {20 switch (lhs, rhs) {21 case let (l?, r?):22 return l <= r23 default:24 return !(rhs < lhs)25 }26}27class JsapiRest :NSObject,URLSessionDelegate28{29 30 private static var __once: () = {31 Statics.instance=JsapiRest()32 33 }()34 35 fileprivate var requests:Dictionary<String,NSMutableURLRequest> = Dictionary<String,NSMutableURLRequest>()36 struct Statics37 {38 static var instance:JsapiRest?39 static var token:Int=040 41 }42 43 class var sharedInstance:JsapiRest44 {45 46 _ = JsapiRest.__once47 return Statics.instance!48 }49 50 //51 /**52 postRequet53 @param functionURL : function URL Example http://localhost:8080/jsapi/oauth/token54 @param postParams : post string55 @param isJson should sent true in case of json request56 @param callback block called once you got the response57 */58 func postrequest(_ functionURL:String,postParams:String,isJson:Bool,callback:@escaping (NSDictionary,Bool)->Void)59 {60 61 let request = NSMutableURLRequest(url: URL(string: functionURL)!)62 63 request.httpMethod = "POST"64 let postString = postParams65 request.httpBody = postString.data(using: String.Encoding.utf8)66 if(isJson)67 {68 request.setValue("application/json", forHTTPHeaderField: "Content-Type")69 request.setValue("application/json", forHTTPHeaderField: "Accept")70 71 72 if(!JsapiAPi.sharedInstance.getJsapiOriginalToken().isEmpty &&73 JsapiAPi.sharedInstance.getJsapiToken() != JSAPIConstant.TOKENBREAR74 && !functionURL.contains("google")75 )76 {77 request.setValue(JsapiAPi.sharedInstance.getJsapiToken(),forHTTPHeaderField:"Authorization")78 }79 }else{80 81 request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")82 }83 self.requests[functionURL] = request84 85 let session = Foundation.URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)86 87 88 let task = session.dataTask(with: request as URLRequest, completionHandler: {89 data, response, error in90 if error != nil {91 92 var res = NSMutableDictionary();93 94 res.setValue(JSAPIConstant.CONNECTION_ERROR, forKey: "message")95 96 callback(res,false)97 return98 }99 //self.requests.removeValueForKey(request.URL!.absoluteString)100 101 let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)102 103 let httpResponse = response as! HTTPURLResponse104 105 106 if(httpResponse.statusCode >= 200 && httpResponse.statusCode < 300 && (responseString as! String) .isEmpty)107 {108 callback(NSDictionary(),true)109 110 return111 }112 113 //Redirection114 115 116 if(responseString == "")117 {118 callback(NSDictionary(),true)119 120 return;121 }122 let jsonResult2: AnyObject! = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers ) as AnyObject!123 124 if(jsonResult2 == nil ){125 callback(NSDictionary(),false)126 127 return128 }129 130 131 let jsonResult : NSDictionary = (jsonResult2 as?NSDictionary)!;132 133 134 if(httpResponse.statusCode == 301 || httpResponse.statusCode == 307){135 136 self.postrequest(httpResponse.url!.absoluteString , postParams: postParams, isJson: isJson, callback: callback)137 }138 139 140 if(jsonResult["error"] != nil && isJson)141 {142 if(jsonResult ["error"] as?String == "invalid_token") {143 144 JsapiAPi.sharedInstance.sessionExpired()145 146 callback(jsonResult,false)147 }148 149 if jsonResult["error"] is Dictionary<String,Bool>{150 let errorObject = jsonResult["error"] as! Dictionary<String,Bool>151 152 let isSuccess=errorObject["success"]153 callback(jsonResult,isSuccess!)154 155 }else156 {157 158 let isSuccess = false159 if let _ = jsonResult["error"] as? String {160 161 let errorObject = jsonResult["error"] as! String162 163 let error_description = jsonResult["error_description"] as! String164 var dictionary = Dictionary<String ,String>()165 dictionary.updateValue(errorObject,forKey: "error")166 dictionary.updateValue(error_description,forKey: "error_description")167 }168 callback(jsonResult , isSuccess)169 }170 171 }else172 if(jsonResult["error"] != nil || httpResponse.statusCode >= 400)173 {174 callback(jsonResult,false)175 176 }else177 {178 callback(jsonResult,true)179 }180 }) 181 task.resume()182 }183 184 185 //186 /**187 getRequet188 @param functionURL : function URL Example http://localhost:8080/jsapi/services/latest/carts/e9486b32-674189 @param callback block called once you got the response190 */191 func getRequest(_ functionURL:String,postParams:String,callback:@escaping (NSDictionary,Bool)->Void)192 {193 var endpoint:String = functionURL + postParams194 endpoint = endpoint.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!195 196 let request = NSMutableURLRequest(url: URL(string: endpoint )!)197 request.httpMethod = "GET"198 request.setValue("application/json", forHTTPHeaderField: "Content-Type")199 request.setValue("application/json", forHTTPHeaderField: "Accept")200 201 202 if(!JsapiAPi.sharedInstance.getJsapiToken().isEmpty&&JsapiAPi.sharedInstance.getJsapiToken() != JSAPIConstant.TOKENBREAR){203 204 request.setValue(JsapiAPi.sharedInstance.getJsapiToken(),forHTTPHeaderField:"Authorization")205 206 }207 self.requests[functionURL] = request208 209 let session = Foundation.URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)210 211 let task = session.dataTask(with: request as URLRequest, completionHandler: {212 data, response, error in213 if error != nil {214 215 let res = NSMutableDictionary();216 217 res.setValue(JSAPIConstant.CONNECTION_ERROR, forKey: "message")218 callback(res,false)219 return220 }221 222 223 let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)224 let httpResponse = response as! HTTPURLResponse225 if(httpResponse.statusCode == 301 || httpResponse.statusCode == 307 ){226 self.getRequest(httpResponse.url!.absoluteString , postParams: postParams,callback: callback)227 return;228 }229 if(data == nil || data?.count <= 0 ){230 231 callback(NSDictionary(),false)232 return;233 }234 235 let jsonResult2: AnyObject! = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject!236 if(jsonResult2 == nil)237 {238 callback(NSDictionary(),false)239 return;240 }241 var jsonResult:NSDictionary = NSDictionary();242 243 if jsonResult2 is Array<Any> {244 245 jsonResult = ["result":jsonResult2]246 247 callback(jsonResult as! NSDictionary,false)248 249 }else{250 251 jsonResult = (jsonResult2 as? NSDictionary)!252 253 }254 255 256 257 if(jsonResult["error"] != nil || httpResponse.statusCode >= 400)258 {259 if(jsonResult ["error"] as?String == "invalid_token") {260 261 JsapiAPi.sharedInstance.sessionExpired()262 263 callback(jsonResult,false)264 265 }else{266 267 if ((jsonResult["error"] as? NSDictionary) != nil) {268 269 let errorObject = jsonResult["error"] as! Dictionary<String,Bool>270 271 let isSuccess=errorObject["success"]272 callback(jsonResult,isSuccess!)273 }else{274 275 callback(jsonResult,false)276 277 }278 }279 }else280 {281 callback(jsonResult,true)282 }283 }) 284 task.resume()285 }286 287 288 289 //290 /**291 DELETERequet292 @param functionURL : function URL Example293 @param callback block called once you got the response294 */295 func deleteRequest(_ functionURL:String,deleteParams:String,callback:@escaping (NSDictionary,Bool)->Void)296 {297 let request = NSMutableURLRequest(url: URL(string: functionURL)!)298 request.httpMethod = "DELETE"299 request.setValue("application/json", forHTTPHeaderField: "Content-Type")300 request.setValue("application/json", forHTTPHeaderField: "Accept")301 302 303 if(!JsapiAPi.sharedInstance.getJsapiToken().isEmpty&&JsapiAPi.sharedInstance.getJsapiToken() != JSAPIConstant.TOKENBREAR){304 request.setValue(JsapiAPi.sharedInstance.getJsapiToken(),forHTTPHeaderField:"Authorization")305 306 }307 308 self.requests[functionURL] = request309 310 let session = Foundation.URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)311 312 let task = session.dataTask(with: request as URLRequest, completionHandler: {313 data, response, error in314 315 316 if error != nil {317 318 var res = NSMutableDictionary();319 320 res.setValue(JSAPIConstant.CONNECTION_ERROR, forKey: "message")321 callback(res,false)322 return323 }324 325 let httpResponse = response as! HTTPURLResponse326 327 // self.requests.removeValueForKey(request.URL!.absoluteString)328 329 let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)330 331 if(httpResponse.statusCode >= 200 && httpResponse.statusCode < 300 && (responseString as! String) .isEmpty)332 {333 callback(NSDictionary(),true)334 335 return336 }337 338 let jsonResult: NSDictionary! = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers ) as? NSDictionary339 340 if(httpResponse.url!.absoluteString != functionURL && httpResponse.statusCode > 301 ){341 self.deleteRequest(httpResponse.url!.absoluteString , deleteParams: deleteParams, callback: callback)342 return343 }344 345 if(jsonResult == nil)346 {347 callback(NSDictionary(),true)348 return;349 }350 351 if(jsonResult["error"] != nil )352 {353 if(jsonResult ["error"] as?String == "invalid_token") {354 355 JsapiAPi.sharedInstance.sessionExpired()356 357 callback(jsonResult,false)358 359 }else{360 361 if ((jsonResult["error"] as? NSDictionary) != nil) {362 363 let errorObject = jsonResult["error"] as! Dictionary<String,Bool>364 let isSuccess=errorObject["success"]365 callback(jsonResult,isSuccess!)366 }else{367 368 callback(jsonResult,false)369 }370 371 372 }373 }else374 {375 callback(jsonResult,true)376 }377 }) 378 task.resume()379 }380 //381 /**382 putRequest383 @param functionURL : function URL Example http://localhost:8080/jsapi/oauth/token384 @param postParams : post string385 @param isJson should sent true in case of json request386 @param callback block called once you got the response387 */388 func putRequest(_ functionURL:String,postParams:String,isJson:Bool,callback:@escaping (NSDictionary,Bool)->Void)389 {390 let request = NSMutableURLRequest(url: URL(string: functionURL)!)391 request.httpMethod = "PUT"392 let postString = postParams393 request.httpBody = postString.data(using: String.Encoding.utf8)394 if(isJson)395 {396 request.setValue("application/json", forHTTPHeaderField: "Content-Type")397 request.setValue("application/json", forHTTPHeaderField: "Accept")398 if(!JsapiAPi.sharedInstance.getJsapiToken().isEmpty&&JsapiAPi.sharedInstance.getJsapiToken() != JSAPIConstant.TOKENBREAR){399 400 request.setValue(JsapiAPi.sharedInstance.getJsapiToken(),forHTTPHeaderField:"Authorization")401 402 }403 404 }else{405 406 request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")407 }408 409 self.requests[functionURL] = request410 411 let session = Foundation.URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)412 413 414 let task = session.dataTask(with: request as URLRequest , completionHandler: {415 data, response, error in416 if error != nil {417 418 var res = NSMutableDictionary();419 res.setValue(JSAPIConstant.CONNECTION_ERROR, forKey: "message")420 callback(res,false)421 return422 }423 424 // self.requests.removeValueForKey(request.URL!.absoluteString)425 426 let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)427 428 let httpResponse = response as! HTTPURLResponse429 430 431 if(httpResponse.statusCode >= 200 && httpResponse.statusCode < 300 && (responseString as! String) .isEmpty)432 {433 callback(NSDictionary(),true)434 435 return436 }437 if(httpResponse.url!.absoluteString != functionURL && httpResponse.statusCode > 301 ){438 self.putRequest(httpResponse.url!.absoluteString , postParams: postParams, isJson: isJson, callback: callback)439 }440 if(responseString=="")441 {442 callback(NSDictionary(),true)443 return;444 }445 446 let jsonResult2: AnyObject! = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject!447 448 if(jsonResult2 == nil)449 {450 callback(NSDictionary(),false)451 return;452 }453 let jsonResult : NSDictionary = (jsonResult2 as?NSDictionary)!;454 455// if(jsonResult == nil)456// {457// callback(NSDictionary(),true)458// return;459// }460 461 if(jsonResult["error"] != nil || ( jsonResult["code"] != nil && jsonResult["code"] as?Int != 0 ) )462 {463 if(jsonResult ["error"] as?String == "invalid_token") {464 465 JsapiAPi.sharedInstance.sessionExpired()466 467 callback(jsonResult,false)468 469 }else{470 471 if ((jsonResult["error"] as? NSDictionary) != nil) {472 473 let errorObject = jsonResult["error"] as! Dictionary<String,Bool>474 475 let isSuccess=errorObject["success"]476 callback(jsonResult,isSuccess!)477 }else{478 479 callback(jsonResult,false)480 481 }482 }483 }else484 {485 callback(jsonResult,true)486 }487 488 }) 489 task.resume()490 }491 var taskWillPerformHTTPRedirection: ((Foundation.URLSession, URLSessionTask, HTTPURLResponse, URLRequest) -> URLRequest?)?492 493 func URLSession(_ session: Foundation.URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest, completionHandler: (URLRequest?) -> Void){494 495 496 let originalUrl:String = (response.url?.absoluteString)!497 498 let redirectRequest: NSMutableURLRequest = self.requests[originalUrl]!499 500 redirectRequest.url = request.url501 502 completionHandler(redirectRequest as URLRequest)503 }504 505 506 507 //508 /**509 getRequet510 @param functionURL : function URL Example http://localhost:8080/jsapi/services/latest/carts/e9486b32-674511 @param callback block called once you got the response512 */513 func getRequestWithoutAuthorization(_ functionURL:String,postParams:String,callback:@escaping (NSDictionary,Bool)->Void)514 {515 516 var endpoint:String = functionURL + postParams517 518 endpoint = endpoint.replacingOccurrences(of: " ", with: "%20")519 520 let request = NSMutableURLRequest(url: URL(string: endpoint )!)521 request.httpMethod = "GET"522 request.setValue("application/json", forHTTPHeaderField: "Content-Type")523 request.setValue("application/json", forHTTPHeaderField: "Accept")524 525 526 self.requests[functionURL] = request527 528 let session = Foundation.URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: nil)529 530 let task = session.dataTask(with: request as URLRequest, completionHandler: {531 data, response, error in532 if error != nil {533 534 var res = NSMutableDictionary();535 res.setValue(JSAPIConstant.CONNECTION_ERROR, forKey: "message")536 callback(res,false)537 return538 }539 540 let responseString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)541 542 let httpResponse = response as! HTTPURLResponse543 544 if(httpResponse.statusCode == 301 || httpResponse.statusCode == 307 ){545 self.getRequest(httpResponse.url!.absoluteString , postParams: postParams,callback: callback)546 return;547 }548 549 if(data == nil || data?.count <= 0 ){550 551 callback(NSDictionary(),false)552 return;553 554 }555 556 let jsonResult2: AnyObject! = try? JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject!557 558 if(jsonResult2 == nil)559 {560 callback(NSDictionary(),false)561 return;562 }563 564 565 let jsonResult:NSDictionary = (jsonResult2 as? NSDictionary)!566 567 568 569 if(jsonResult["error"] != nil )570 {571 if(jsonResult ["error"] as?String == "invalid_token") {572 573 JsapiAPi.sharedInstance.sessionExpired()574 575 callback(jsonResult,false)576 577 }else{578 579 if ((jsonResult["error"] as? NSDictionary) != nil) {580 581 let errorObject = jsonResult["error"] as! Dictionary<String,Bool>582 583 let isSuccess=errorObject["success"]584 callback(jsonResult,isSuccess!)585 }else{586 587 callback(jsonResult,false)588 589 }590 }591 }else592 {593 callback(jsonResult,true)594 }595 }) 596 task.resume()597 }598}...
DictionaryToModel.swift
Source:DictionaryToModel.swift
1//2// DictionaryToModel.swift3// Swift3ExentionDemo4//5// Created by éº»é³ on 16/11/01.6// Copyright © 2016å¹´ 麻é³. All rights reserved.7//8import Foundation9@objc public protocol DicModelProtocol{10 static func keyObjectClassMapping() -> [String: String]?11}12extension NSObject{13 14 //dic: è¦è¿è¡è½¬æ¢çåå
¸15 class func objectWithKeyValues(dict: NSDictionary)->AnyObject?{16 if BaseFoundation.isClassFromFoundation(c: self) {17 18 return nil19 }20 21 let obj:AnyObject = self.init()22 var cls:AnyClass = self.classForCoder() //å½åç±»çç±»å23 24 while("NSObject" != "\(cls)"){25 var count:UInt32 = 026 let properties = class_copyPropertyList(cls, &count) //è·åå±æ§å表27 for i in 0..<count{28 29 let property = properties?[Int(i)]30 31 32 var propertyType = String(cString:property_getAttributes(property)) //å±æ§ç±»å33 let propertyKey = String(cString:property_getName(property))34 35 if propertyKey == "description"{ continue } //descriptionæ¯è®¡ç®åå±æ§36 37 38 var value:AnyObject! = dict.object(forKey: propertyKey) as AnyObject!//åå¾åå
¸ä¸çå¼39 40 if value == nil {continue}41 42 let valueType = "\(value.classForCoder)" //åå
¸ä¸ä¿åçå¼å¾ç±»å43 if valueType == "NSDictionary"{ //1ï¼å¼æ¯åå
¸ã è¿ä¸ªåå
¸è¦å¯¹åºä¸ä¸ªèªå®ä¹ç模å类并ä¸è¿ä¸ªç±»ä¸æ¯Foundationä¸å®ä¹çç±»åã44 let subModelStr:String! = BaseFoundation.getType(code: &propertyType)45 if subModelStr == nil{46 print("åå
¸ä¸çé®\(propertyKey)å模åä¸çä¸å¹é
")47 assert(true)48 }49 if let subModelClass = NSClassFromString(subModelStr){50 value = subModelClass.objectWithKeyValues(dict:value as! NSDictionary) //éå½51 52 }53 }else if valueType == "NSArray"{ //å¼æ¯æ°ç»ã æ°ç»ä¸åæ¾åå
¸ã å°åå
¸è½¬æ¢æ模åã å¦æåè®®ä¸æ²¡æå®ä¹æ å°å
³ç³»ï¼å°±ä¸åå¤ç54 55 if self.responds(to: Selector("keyObjectClassMapping")) {56 if var subModelClassName = cls.keyObjectClassMapping()?[propertyKey]{ //å模åçç±»å称57 subModelClassName = BaseFoundation.bundlePath+"."+subModelClassName58 if let subModelClass = NSClassFromString(subModelClassName){59 value = subModelClass.objectArrayWithKeyValuesArray(array:value as! NSArray);60 61 }62 }63 }64 65 }66 67 obj.setValue(value, forKey: propertyKey)68 }69 free(properties) //éæ¾å
å70 cls = cls.superclass()! //å¤çç¶ç±»71 }72 return obj73 }74 75 /**76 å°åå
¸æ°ç»è½¬æ¢æ模åæ°ç»77 array: è¦è½¬æ¢çæ°ç», æ°ç»ä¸å
å«çåå
¸æ对åºç模åç±»å°±æ¯ è°ç¨è¿ä¸ªç±»æ¹æ³çç±»78 79 å½æ°ç»ä¸åµå¥æ°ç»ï¼ å
é¨çæ°ç»å
å«åå
¸ï¼clså°±æ¯å
é¨æ°ç»ä¸çåå
¸å¯¹åºç模å80 */81 class func objectArrayWithKeyValuesArray(array: NSArray)->NSArray?{82 if array.count == 0{83 return nil84 }85 var result = [AnyObject]()86 for item in array{87 let type = "\(((item as AnyObject).classForCoder)!)"88 if type == "NSDictionary" || type == "Dictionary" || type == "NSMutableDictionary"{89 if let model = objectWithKeyValues(dict: item as! NSDictionary){90 result.append(model)91 92 }93 }else if type == "NSArray" || type == "Array" || type == "NSMutableArray"{94 if let model = objectArrayWithKeyValuesArray(array: item as! NSArray){95 result.append(model)96 }97 }else{98 result.append(item as AnyObject)99 }100 }101 if result.count==0{102 return nil103 }else{104 return result as NSArray?105 }106 }107}...
Foundation.NSDictionary
Using AI Code Generation
1import Foundation2import Foundation3import Foundation4import Foundation5import Foundation6import Foundation7import Foundation8import Foundation9import Foundation10import Foundation11import Foundation12import Foundation13import Foundation14import Foundation15import Foundation16import Foundation17import Foundation18import Foundation19import Foundation20import Foundation21import Foundation22import Foundation23import Foundation24import Foundation25import Foundation26import Foundation27import Foundation28import Foundation
Foundation.NSDictionary
Using AI Code Generation
1import Foundation2let dict = NSDictionary()3print(dict)4import Foundation5let dict = NSDictionary()6print(dict)7import Foundation8let dict = NSDictionary()9print(dict)10import Foundation11let dict = NSDictionary()12print(dict)13import Foundation14let dict = NSDictionary()15print(dict)16import Foundation17let dict = NSDictionary()18print(dict)19import Foundation20let dict = NSDictionary()21print(dict)22import Foundation23let dict = NSDictionary()24print(dict)25import Foundation26let dict = NSDictionary()27print(dict)28import Foundation29let dict = NSDictionary()30print(dict)31import Foundation32let dict = NSDictionary()33print(dict)34import Foundation35let dict = NSDictionary()36print(dict)37import Foundation38let dict = NSDictionary()39print(dict)40import Foundation41let dict = NSDictionary()42print(dict)43import Foundation44let dict = NSDictionary()45print(dict)46import Foundation47let dict = NSDictionary()48print(dict)49import Foundation50let dict = NSDictionary()51print(dict
Foundation.NSDictionary
Using AI Code Generation
1import Foundation2class Foo {3 func bar() {4 let dict = NSDictionary()5 }6}7import Foundation8class Foo {9 func bar() {10 let dict = NSDictionary()11 }12}13Is there a way to specify which framework I want to use for a particular class? I know that in Objective-C I can use #import <Nimble/NSDictionary.h> to specify which framework to use. Is there a similar syntax in Swift?14clang: error: linker command failed with exit code 1 (use -v to see invocation)15clang: error: linker command failed with exit code 1 (use -v to see invocation)
Foundation.NSDictionary
Using AI Code Generation
1import Foundation2import Nimble3var dict = NSDictionary()4expect(dict["key"]).to(equal("value"))5import Foundation6import Nimble7var dict = NSDictionary()8expect(dict["key"]).to(equal("value"))9import Foundation10import Nimble11var dict = NSDictionary()12expect(dict["key"]).to(equal("value"))13import Foundation14import Nimble15var dict = NSDictionary()16expect(dict["key"]).to(equal("value"))17import Foundation18import Nimble19var dict = NSDictionary()20expect(dict["key"]).to(equal("value"))21import Foundation22import Nimble23var dict = NSDictionary()24expect(dict["key"]).to(equal("value"))25import Foundation26import Nimble27var dict = NSDictionary()28expect(dict["key"]).to(equal("value"))29import Foundation30import Nimble31var dict = NSDictionary()32expect(dict["key"]).to(equal("value"))33import Foundation34import Nimble35var dict = NSDictionary()36expect(dict["key"]).to(equal("value"))37import Foundation38import Nimble39var dict = NSDictionary()40expect(dict["key"]).to(equal("value"))
Foundation.NSDictionary
Using AI Code Generation
1import Foundation2class Foo {3 init(bar: String) {4 }5}6var dict = [String: Foo]()7dict["foo"] = Foo(bar: "bar")8print(foo.bar)9import Foundation10class Foo {11 init(bar: String) {12 }13}14var dict = [String: Foo]()15dict["foo"] = Foo(bar: "bar")16print(foo.bar)17import Foundation18class Foo {19 init(bar: String) {20 }21}22var dict = [String: Foo]()23dict["foo"] = Foo(bar: "bar")24print(foo.bar)25import Foundation26class Foo {27 init(bar: String) {28 }29}30var dict = [String: Foo]()31dict["foo"] = Foo(bar: "bar")32print(foo.bar)33import Foundation34class Foo {35 init(bar: String) {36 }37}38var dict = [String: Foo]()39dict["foo"] = Foo(bar: "bar")40print(foo.bar)41import Foundation42class Foo {43 init(bar: String) {44 }45}46var dict = [String: Foo]()47dict["foo"] = Foo(bar: "bar")48print(foo.bar)49import Foundation50class Foo {51 init(bar: String) {52 }53}
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!