diff --git a/source/ios/AdaptiveCards/ADCIOSVisualizer/ADCIOSVisualizerTests/ADCIOSVisualizerTests.mm b/source/ios/AdaptiveCards/ADCIOSVisualizer/ADCIOSVisualizerTests/ADCIOSVisualizerTests.mm index 1f0d47a8ba..d9b152977f 100644 --- a/source/ios/AdaptiveCards/ADCIOSVisualizer/ADCIOSVisualizerTests/ADCIOSVisualizerTests.mm +++ b/source/ios/AdaptiveCards/ADCIOSVisualizer/ADCIOSVisualizerTests/ADCIOSVisualizerTests.mm @@ -214,13 +214,17 @@ - (void)parseAndRenderDFS:(NSString *)rootPath FileManager:(NSFileManager *)fMan XCTAssertTrue(renderResult.succeeded); } @catch (NSException *exception) { - NSLog(@"Render Failed while rendering %@\n%@", fileName, exception); + NSString *exceptionMessage = [NSString stringWithFormat:@"%@", exception]; + printf("Render Failed while rendering %s\n%s", [fileName UTF8String], [exceptionMessage UTF8String]); XCTAssertTrue(NO); } } } @catch (NSException *exception) { - NSLog(@"Parsing Failed %@\n%@", fileName, exception); + printf("Parsing Failed %s\n", [fileName UTF8String]); + for (NSError *parseError in cardParseResult.parseErrors) { + printf("%s\n", [parseError.userInfo[NSLocalizedDescriptionKey] UTF8String]); + } XCTAssertTrue(NO); } } diff --git a/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards.xcodeproj/project.pbxproj b/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards.xcodeproj/project.pbxproj index dd1b615615..5e0099bc8b 100644 --- a/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards.xcodeproj/project.pbxproj +++ b/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards.xcodeproj/project.pbxproj @@ -68,6 +68,7 @@ 6B3787B720CA00D300015401 /* ACRUILabel.h in Headers */ = {isa = PBXBuildFile; fileRef = F4F44B6A203FA8EF00A2F24C /* ACRUILabel.h */; settings = {ATTRIBUTES = (Public, ); }; }; 6B3787BA20CB3E0E00015401 /* ACRContentHoldingUIScrollView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6B3787B820CB3E0E00015401 /* ACRContentHoldingUIScrollView.mm */; }; 6B3787BB20CB3E0E00015401 /* ACRContentHoldingUIScrollView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B3787B920CB3E0E00015401 /* ACRContentHoldingUIScrollView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 6B3A23192755A3EF00764971 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6B3A231B2755A3EF00764971 /* Localizable.strings */; }; 6B421CC02101503E002F401A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4CA74A320181B52002041DF /* QuartzCore.framework */; }; 6B421CC121015EDD002F401A /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F45A071C1EF4BCC3007C6503 /* CoreGraphics.framework */; }; 6B5BA8BF2707BBD000719853 /* ACOWarning.mm in Sources */ = {isa = PBXBuildFile; fileRef = 6B5BA8BE2707BBD000719853 /* ACOWarning.mm */; }; @@ -523,6 +524,7 @@ 6B377283260194000024E527 /* ACRActionExecuteRenderer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ACRActionExecuteRenderer.mm; sourceTree = ""; }; 6B3787B820CB3E0E00015401 /* ACRContentHoldingUIScrollView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ACRContentHoldingUIScrollView.mm; sourceTree = ""; }; 6B3787B920CB3E0E00015401 /* ACRContentHoldingUIScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACRContentHoldingUIScrollView.h; sourceTree = ""; }; + 6B3A231A2755A3EF00764971 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 6B5BA8BE2707BBD000719853 /* ACOWarning.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ACOWarning.mm; sourceTree = ""; }; 6B5D240A212C89E70010EB07 /* ACORemoteResourceInformation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACORemoteResourceInformation.h; sourceTree = ""; }; 6B5D240B212C89E70010EB07 /* ACORemoteResourceInformation.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ACORemoteResourceInformation.mm; sourceTree = ""; }; @@ -1038,6 +1040,7 @@ 6B8C767726461F1A009548FA /* ACRTextUrlField.xib */, 6B8C767A26461F1A009548FA /* ACRToggleInputView.xib */, 6B8C766C26461F1A009548FA /* Images */, + 6B3A231B2755A3EF00764971 /* Localizable.strings */, ); path = Resources; sourceTree = ""; @@ -1874,6 +1877,7 @@ English, en, global, + Base, ); mainGroup = F423C0AB1EE1FBA900905679; productRefGroup = F423C0B61EE1FBA900905679 /* Products */; @@ -1909,6 +1913,7 @@ 6B8C768326461F1A009548FA /* ACRTextTelelphoneField.xib in Resources */, 6B8C768226461F1A009548FA /* ACRButtonExpandable.xib in Resources */, 6B92A7F22679750D00CAE3BF /* chevronup.svg in Resources */, + 6B3A23192755A3EF00764971 /* Localizable.strings in Resources */, 6B8C768E26461F1A009548FA /* ACRChoiceSetCellChecked.xib in Resources */, 6B92A7F32679750D00CAE3BF /* chevrondown.svg in Resources */, 6B8C768A26461F1A009548FA /* ACRTextEmailField.xib in Resources */, @@ -2217,6 +2222,17 @@ }; /* End PBXTargetDependency section */ +/* Begin PBXVariantGroup section */ + 6B3A231B2755A3EF00764971 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + 6B3A231A2755A3EF00764971 /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ F423C0C71EE1FBAA00905679 /* Debug */ = { isa = XCBuildConfiguration; diff --git a/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/ACOAdaptiveCard.mm b/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/ACOAdaptiveCard.mm index a4d086ec4e..f1ed2877ad 100644 --- a/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/ACOAdaptiveCard.mm +++ b/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/ACOAdaptiveCard.mm @@ -7,6 +7,7 @@ #import "ACOAdaptiveCardParseResult.h" #import "ACOAdaptiveCardPrivate.h" #import "ACOAuthenticationPrivate.h" +#import "ACOBundle.h" #import "ACORefreshPrivate.h" #import "ACORemoteResourceInformationPrivate.h" #import "ACRErrors.h" @@ -78,11 +79,15 @@ + (ACOAdaptiveCardParseResult *)fromJson:(NSString *)payload; // converts AdaptiveCardParseException to NSError ErrorStatusCode errorStatusCode = e.GetStatusCode(); NSInteger errorCode = (long)errorStatusCode; - + NSBundle *adaptiveCardsBundle = [[ACOBundle getInstance] getBundle]; + NSString *localizedFormat = NSLocalizedStringFromTableInBundle(@"AdaptiveCards.Parsing", nil, adaptiveCardsBundle, "Parsing Error Messages"); + NSString *objectModelErrorCodeInString = [NSString stringWithCString:ErrorStatusCodeToString(errorStatusCode).c_str() encoding:NSUTF8StringEncoding]; + NSDictionary *userInfo = @{NSLocalizedDescriptionKey : [NSString localizedStringWithFormat:localizedFormat, objectModelErrorCodeInString]}; NSError *parseError = [NSError errorWithDomain:ACRParseErrorDomain code:errorCode - userInfo:nil]; + userInfo:userInfo]; NSArray *errors = @[ parseError ]; + result = [[ACOAdaptiveCardParseResult alloc] init:nil errors:errors warnings:nil]; } } diff --git a/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/Resources/en.lproj/Localizable.strings b/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/Resources/en.lproj/Localizable.strings new file mode 100644 index 0000000000..0c4756f41a --- /dev/null +++ b/source/ios/AdaptiveCards/AdaptiveCards/AdaptiveCards/Resources/en.lproj/Localizable.strings @@ -0,0 +1,10 @@ +/* + Localizable.strings + AdaptiveCards + + Copyright © 2021 Microsoft. All rights reserved. +*/ + + +"AdaptiveCards.Parsing" = "Parse Error: %@"; + diff --git a/source/shared/cpp/ObjectModel/Enums.cpp b/source/shared/cpp/ObjectModel/Enums.cpp index 7f4eca3f2e..fd9a9df662 100644 --- a/source/shared/cpp/ObjectModel/Enums.cpp +++ b/source/shared/cpp/ObjectModel/Enums.cpp @@ -377,4 +377,13 @@ namespace AdaptiveCards DEFINE_ADAPTIVECARD_ENUM(Mode, { {Mode::Primary, "primary"}, {Mode::Secondary, "secondary"}}); + + DEFINE_ADAPTIVECARD_ENUM(ErrorStatusCode, { + {ErrorStatusCode::InvalidJson, "InvalidJson"}, + {ErrorStatusCode::RenderFailed, "RenderFailed"}, + {ErrorStatusCode::RequiredPropertyMissing, "RequiredPropertyMissing"}, + {ErrorStatusCode::InvalidPropertyValue, "InvalidPropertyValue"}, + {ErrorStatusCode::UnsupportedParserOverride, "UnsupportedParserOverride"}, + {ErrorStatusCode::IdCollision, "IdCollision"}, + {ErrorStatusCode::CustomError, "CustomError"}}); } diff --git a/source/shared/cpp/ObjectModel/Enums.h b/source/shared/cpp/ObjectModel/Enums.h index 35efab326c..c29a39a70d 100644 --- a/source/shared/cpp/ObjectModel/Enums.h +++ b/source/shared/cpp/ObjectModel/Enums.h @@ -437,7 +437,7 @@ namespace AdaptiveCards IdCollision, CustomError, }; - // No mapping to string needed + DECLARE_ADAPTIVECARD_ENUM(ErrorStatusCode); enum class WarningStatusCode {