aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-03-29 20:03:14 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-03-29 20:03:14 -0700
commitc51a8a2b44e6934de9d45d74ddec4b70b00f1abb (patch)
treeeec1e324fa1384f054aa8f73a52ec11c1e9dc396
parent8adf0c2d16d1567ff830bf72460cb75deb7eb022 (diff)
Build for iOS.
-rw-r--r--build-mac/mailcore2.xcodeproj/project.pbxproj217
-rw-r--r--src/core/basetypes/MCData.cc4
-rw-r--r--src/objc/utils/MCOObjectWrapper.mm15
-rw-r--r--src/objc/utils/NSArray+MCO.mm5
-rw-r--r--src/objc/utils/NSData+MCO.mm5
-rw-r--r--src/objc/utils/NSDictionary+MCO.mm5
-rw-r--r--src/objc/utils/NSObject+MCO.mm20
-rw-r--r--src/objc/utils/NSString+MCO.mm5
-rw-r--r--src/objc/utils/NSValue+MCO.mm5
-rw-r--r--tests-ios/AppDelegate.h15
-rw-r--r--tests-ios/AppDelegate.mm60
-rw-r--r--tests-ios/main.m18
-rw-r--r--tests-ios/tests-ios-Info.plist45
-rw-r--r--tests/main.mm327
-rw-r--r--tests/test-all.h16
-rw-r--r--tests/test-all.mm336
16 files changed, 767 insertions, 331 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj
index 0dcea825..f7612fbc 100644
--- a/build-mac/mailcore2.xcodeproj/project.pbxproj
+++ b/build-mac/mailcore2.xcodeproj/project.pbxproj
@@ -211,6 +211,15 @@
C64EA82C16A2A08B00778456 /* MCIMAPFetchNamespaceOperation.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64EA82A16A29FAA00778456 /* MCIMAPFetchNamespaceOperation.cc */; };
C64FF39116B3C13000F8C162 /* MCOObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */; };
C64FF39316B3C25200F8C162 /* MCOObjectWrapper.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */; };
+ C6A81B931706840C00882C15 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6A81B921706840C00882C15 /* UIKit.framework */; };
+ C6A81B941706840C00882C15 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C64EA78F169F259200778456 /* Foundation.framework */; };
+ C6A81B961706840C00882C15 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6A81B951706840C00882C15 /* CoreGraphics.framework */; };
+ C6A81BAE1706847900882C15 /* test-all.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BAC1706847900882C15 /* test-all.mm */; };
+ C6A81BAF170684D300882C15 /* test-all.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BAC1706847900882C15 /* test-all.mm */; };
+ C6A81BB2170685A700882C15 /* libmailcore2-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C6BA2C191705F4E6003F0E9E /* libmailcore2-ios.a */; };
+ C6A81BB41706891B00882C15 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6A81BB31706891B00882C15 /* CFNetwork.framework */; };
+ C6A81BBA17068C0600882C15 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BB717068C0600882C15 /* AppDelegate.mm */; };
+ C6A81BBB17068C0600882C15 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C6A81BB817068C0600882C15 /* main.m */; };
C6BA2B0C1705F4E6003F0E9E /* MCHTMLRendererCallback.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C63CD68516BE148B00DB18F1 /* MCHTMLRendererCallback.h */; };
C6BA2B0D1705F4E6003F0E9E /* MCOMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB26816FD44C2000DB34C /* MCOMultipart.h */; };
C6BA2B0E1705F4E6003F0E9E /* MCOMessageBuilder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25F16FD438F000DB34C /* MCOMessageBuilder.h */; };
@@ -549,6 +558,13 @@
remoteGlobalIDString = C64EA536169E772200778456;
remoteInfo = mailcore2;
};
+ C6A81BB01706852200882C15 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = C64EA52E169E772200778456 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C6BA2B091705F4E6003F0E9E;
+ remoteInfo = "mailcore2 ios";
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -1092,6 +1108,16 @@
C64EA82B16A2A01400778456 /* MCIMAPFetchNamespaceOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPFetchNamespaceOperation.h; sourceTree = "<group>"; };
C64FF38F16B3C13000F8C162 /* MCOObjectWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOObjectWrapper.h; sourceTree = "<group>"; };
C64FF39016B3C13000F8C162 /* MCOObjectWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOObjectWrapper.mm; sourceTree = "<group>"; };
+ C6A81B911706840C00882C15 /* test-ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "test-ios.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ C6A81B921706840C00882C15 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+ C6A81B951706840C00882C15 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; };
+ C6A81BAC1706847900882C15 /* test-all.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "test-all.mm"; sourceTree = "<group>"; };
+ C6A81BAD1706847900882C15 /* test-all.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "test-all.h"; sourceTree = "<group>"; };
+ C6A81BB31706891B00882C15 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; };
+ C6A81BB617068C0600882C15 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ C6A81BB717068C0600882C15 /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = "<group>"; };
+ C6A81BB817068C0600882C15 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ C6A81BB917068C0600882C15 /* tests-ios-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "tests-ios-Info.plist"; sourceTree = "<group>"; };
C6BA2C191705F4E6003F0E9E /* libmailcore2-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmailcore2-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; };
C6CCC5C616FFE5190077A5FC /* MCORange.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCORange.mm; sourceTree = "<group>"; };
C6CCC5C816FFE54F0077A5FC /* MCORange.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCORange.h; sourceTree = "<group>"; };
@@ -1173,6 +1199,18 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ C6A81B8E1706840C00882C15 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C6A81BB41706891B00882C15 /* CFNetwork.framework in Frameworks */,
+ C6A81BB2170685A700882C15 /* libmailcore2-ios.a in Frameworks */,
+ C6A81B931706840C00882C15 /* UIKit.framework in Frameworks */,
+ C6A81B941706840C00882C15 /* Foundation.framework in Frameworks */,
+ C6A81B961706840C00882C15 /* CoreGraphics.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
C6BA2C151705F4E6003F0E9E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -1251,8 +1289,10 @@
C64EA52C169E772200778456 = {
isa = PBXGroup;
children = (
+ C6A81BB31706891B00882C15 /* CFNetwork.framework */,
C64EA545169E78B100778456 /* src */,
C64EA7A916A00AF400778456 /* tests */,
+ C6A81BB517068C0600882C15 /* tests-ios */,
C64EA78E169F259200778456 /* Frameworks */,
C64EA538169E772200778456 /* Products */,
);
@@ -1264,6 +1304,7 @@
C64EA537169E772200778456 /* libmailcore2.a */,
C64EA78C169F259200778456 /* tests */,
C6BA2C191705F4E6003F0E9E /* libmailcore2-ios.a */,
+ C6A81B911706840C00882C15 /* test-ios.app */,
);
name = Products;
sourceTree = "<group>";
@@ -1539,6 +1580,8 @@
children = (
C64EA7B016A00BBB00778456 /* CoreServices.framework */,
C64EA78F169F259200778456 /* Foundation.framework */,
+ C6A81B921706840C00882C15 /* UIKit.framework */,
+ C6A81B951706840C00882C15 /* CoreGraphics.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -1547,11 +1590,25 @@
isa = PBXGroup;
children = (
C64EA7AA16A00AF600778456 /* main.mm */,
+ C6A81BAC1706847900882C15 /* test-all.mm */,
+ C6A81BAD1706847900882C15 /* test-all.h */,
);
name = tests;
path = ../tests;
sourceTree = "<group>";
};
+ C6A81BB517068C0600882C15 /* tests-ios */ = {
+ isa = PBXGroup;
+ children = (
+ C6A81BB617068C0600882C15 /* AppDelegate.h */,
+ C6A81BB717068C0600882C15 /* AppDelegate.mm */,
+ C6A81BB817068C0600882C15 /* main.m */,
+ C6A81BB917068C0600882C15 /* tests-ios-Info.plist */,
+ );
+ name = "tests-ios";
+ path = "../tests-ios";
+ sourceTree = "<group>";
+ };
C6D42C0016ADF5AF002BB4F9 /* objc */ = {
isa = PBXGroup;
children = (
@@ -1705,6 +1762,24 @@
productReference = C64EA78C169F259200778456 /* tests */;
productType = "com.apple.product-type.tool";
};
+ C6A81B901706840C00882C15 /* test-ios */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C6A81BA91706840C00882C15 /* Build configuration list for PBXNativeTarget "test-ios" */;
+ buildPhases = (
+ C6A81B8D1706840C00882C15 /* Sources */,
+ C6A81B8E1706840C00882C15 /* Frameworks */,
+ C6A81B8F1706840C00882C15 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ C6A81BB11706852200882C15 /* PBXTargetDependency */,
+ );
+ name = "test-ios";
+ productName = "test ios";
+ productReference = C6A81B911706840C00882C15 /* test-ios.app */;
+ productType = "com.apple.product-type.application";
+ };
C6BA2B091705F4E6003F0E9E /* mailcore2 ios */ = {
isa = PBXNativeTarget;
buildConfigurationList = C6BA2C161705F4E6003F0E9E /* Build configuration list for PBXNativeTarget "mailcore2 ios" */;
@@ -1747,10 +1822,21 @@
C64EA536169E772200778456 /* mailcore2 */,
C6BA2B091705F4E6003F0E9E /* mailcore2 ios */,
C64EA78B169F259200778456 /* tests */,
+ C6A81B901706840C00882C15 /* test-ios */,
);
};
/* End PBXProject section */
+/* Begin PBXResourcesBuildPhase section */
+ C6A81B8F1706840C00882C15 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
/* Begin PBXShellScriptBuildPhase section */
C64EA780169E867600778456 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
@@ -1917,6 +2003,17 @@
buildActionMask = 2147483647;
files = (
C64EA7AB16A00AF600778456 /* main.mm in Sources */,
+ C6A81BAF170684D300882C15 /* test-all.mm in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C6A81B8D1706840C00882C15 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C6A81BAE1706847900882C15 /* test-all.mm in Sources */,
+ C6A81BBA17068C0600882C15 /* AppDelegate.mm in Sources */,
+ C6A81BBB17068C0600882C15 /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2059,6 +2156,11 @@
target = C64EA536169E772200778456 /* mailcore2 */;
targetProxy = C64EA7A2169F2A1D00778456 /* PBXContainerItemProxy */;
};
+ C6A81BB11706852200882C15 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = C6BA2B091705F4E6003F0E9E /* mailcore2 ios */;
+ targetProxy = C6A81BB01706852200882C15 /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
@@ -2119,6 +2221,25 @@
"\"$(SRCROOT)/../Externals/icu4c/lib\"",
"\"$(SRCROOT)/../Externals/ctemplate/lib\"",
);
+ "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = (
+ "\"$(SRCROOT)/../Externals/libetpan-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/icu4c-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/ctemplate-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/libsasl-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/tidy-html5/lib\"",
+ );
+ "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = (
+ "\"$(SRCROOT)/../Externals/libetpan-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/icu4c-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/ctemplate-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/libsasl-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/tidy-html5/lib\"",
+ );
+ "LIBRARY_SEARCH_PATHS[sdk=macosx*]" = (
+ "\"$(SRCROOT)/../Externals/libetpan-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/icu4c-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/ctemplate-ios/lib\"",
+ );
MACOSX_DEPLOYMENT_TARGET = 10.8;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
@@ -2176,6 +2297,25 @@
"\"$(SRCROOT)/../Externals/icu4c/lib\"",
"\"$(SRCROOT)/../Externals/ctemplate/lib\"",
);
+ "LIBRARY_SEARCH_PATHS[sdk=iphoneos*]" = (
+ "\"$(SRCROOT)/../Externals/libetpan-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/icu4c-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/ctemplate-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/libsasl-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/tidy-html5/lib\"",
+ );
+ "LIBRARY_SEARCH_PATHS[sdk=iphonesimulator*]" = (
+ "\"$(SRCROOT)/../Externals/libetpan-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/icu4c-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/ctemplate-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/libsasl-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/tidy-html5/lib\"",
+ );
+ "LIBRARY_SEARCH_PATHS[sdk=macosx*]" = (
+ "\"$(SRCROOT)/../Externals/libetpan-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/icu4c-ios/lib\"",
+ "\"$(SRCROOT)/../Externals/ctemplate-ios/lib\"",
+ );
MACOSX_DEPLOYMENT_TARGET = 10.8;
SDKROOT = macosx;
};
@@ -2239,6 +2379,75 @@
};
name = Release;
};
+ C6A81BAA1706840C00882C15 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libstdc++";
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"",
+ );
+ INFOPLIST_FILE = "../tests-ios/tests-ios-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 6.1;
+ OTHER_LDFLAGS = (
+ "-lctemplate-ios",
+ "-letpan-ios",
+ "-licudata",
+ "-licui18n",
+ "-licuuc",
+ "-lxml2",
+ "-lsasl2",
+ "-liconv",
+ "-all_load",
+ "-ltidy",
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Debug;
+ };
+ C6A81BAB1706840C00882C15 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libstdc++";
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Library/Frameworks\"",
+ );
+ INFOPLIST_FILE = "../tests-ios/tests-ios-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 6.1;
+ OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
+ OTHER_LDFLAGS = (
+ "-lctemplate-ios",
+ "-letpan-ios",
+ "-licudata",
+ "-licui18n",
+ "-licuuc",
+ "-lxml2",
+ "-lsasl2",
+ "-liconv",
+ "-all_load",
+ "-ltidy",
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ WRAPPER_EXTENSION = app;
+ };
+ name = Release;
+ };
C6BA2C171705F4E6003F0E9E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -2293,6 +2502,14 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ C6A81BA91706840C00882C15 /* Build configuration list for PBXNativeTarget "test-ios" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C6A81BAA1706840C00882C15 /* Debug */,
+ C6A81BAB1706840C00882C15 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ };
C6BA2C161705F4E6003F0E9E /* Build configuration list for PBXNativeTarget "mailcore2 ios" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/src/core/basetypes/MCData.cc b/src/core/basetypes/MCData.cc
index f98f57c7..7ae63988 100644
--- a/src/core/basetypes/MCData.cc
+++ b/src/core/basetypes/MCData.cc
@@ -353,9 +353,9 @@ Data * Data::dataWithContentsOfFile(String * filename)
return NULL;
}
- buf = (char *) malloc(stat_buf.st_size);
+ buf = (char *) malloc((size_t) stat_buf.st_size);
- read_items = fread(buf, 1, stat_buf.st_size, f);
+ read_items = fread(buf, 1, (size_t) stat_buf.st_size, f);
if ((off_t) read_items != stat_buf.st_size) {
free(buf);
fclose(f);
diff --git a/src/objc/utils/MCOObjectWrapper.mm b/src/objc/utils/MCOObjectWrapper.mm
index e4fda2ae..e0a162b4 100644
--- a/src/objc/utils/MCOObjectWrapper.mm
+++ b/src/objc/utils/MCOObjectWrapper.mm
@@ -8,13 +8,26 @@
#import "MCOObjectWrapper.h"
+#include <typeinfo>
+
#include "MCUtils.h"
-#include "MCObject.h"
+#include "MCBaseTypes.h"
+
+#import "NSObject+MCO.h"
@implementation MCOObjectWrapper {
mailcore::Object * mObject;
}
++ (void) load
+{
+ MCORegisterClass([NSValue class], &typeid(mailcore::Value));
+ MCORegisterClass([NSData class], &typeid(mailcore::Data));
+ MCORegisterClass([NSString class], &typeid(mailcore::String));
+ MCORegisterClass([NSDictionary class], &typeid(mailcore::HashMap));
+ MCORegisterClass([NSArray class], &typeid(mailcore::Array));
+}
+
- (void) dealloc
{
MC_SAFE_RELEASE(mObject);
diff --git a/src/objc/utils/NSArray+MCO.mm b/src/objc/utils/NSArray+MCO.mm
index 4b9eaab7..0b8b21bf 100644
--- a/src/objc/utils/NSArray+MCO.mm
+++ b/src/objc/utils/NSArray+MCO.mm
@@ -14,6 +14,11 @@
@implementation NSArray (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_arrayWithMCArray:(mailcore::Array *) object];
+}
+
+ (NSArray *) mco_arrayWithMCArray:(mailcore::Array *)array
{
NSMutableArray * result = [NSMutableArray array];
diff --git a/src/objc/utils/NSData+MCO.mm b/src/objc/utils/NSData+MCO.mm
index dd279554..daea94c9 100644
--- a/src/objc/utils/NSData+MCO.mm
+++ b/src/objc/utils/NSData+MCO.mm
@@ -12,6 +12,11 @@
@implementation NSData (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_dataWithMCData:(mailcore::Data *) object];
+}
+
+ (NSData *) mco_dataWithMCData:(mailcore::Data *)cppData
{
if (cppData == NULL)
diff --git a/src/objc/utils/NSDictionary+MCO.mm b/src/objc/utils/NSDictionary+MCO.mm
index 8ba2f7a5..5745955a 100644
--- a/src/objc/utils/NSDictionary+MCO.mm
+++ b/src/objc/utils/NSDictionary+MCO.mm
@@ -14,6 +14,11 @@
@implementation NSDictionary (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_dictionaryWithMCHashMap:(mailcore::HashMap *) object];
+}
+
+ (NSDictionary *) mco_dictionaryWithMCHashMap:(mailcore::HashMap *)hashmap
{
NSMutableDictionary * result = [NSMutableDictionary dictionary];
diff --git a/src/objc/utils/NSObject+MCO.mm b/src/objc/utils/NSObject+MCO.mm
index 27a9befe..5f1726e2 100644
--- a/src/objc/utils/NSObject+MCO.mm
+++ b/src/objc/utils/NSObject+MCO.mm
@@ -31,11 +31,16 @@ void MCORegisterClass(Class aClass, const std::type_info * info)
{
init();
- size_t hash_value = info->hash_code();
chashdatum key;
chashdatum value;
+#ifdef __LIBCPP_TYPEINFO
+ size_t hash_value = info->hash_code();
key.data = &hash_value;
key.len = sizeof(hash_value);
+#else
+ key.data = (void *) info->name();
+ key.len = strlen(info->name());
+#endif
value.data = aClass;
value.len = 0;
chash_set(classHash, &key, &value, NULL);
@@ -45,12 +50,17 @@ static Class classWithTypeInfo(const std::type_info * info)
{
init();
- size_t hash_value = info->hash_code();
int r;
chashdatum key;
chashdatum value;
+#ifdef __LIBCPP_TYPEINFO
+ size_t hash_value = info->hash_code();
key.data = &hash_value;
key.len = sizeof(hash_value);
+#else
+ key.data = (void *) info->name();
+ key.len = strlen(info->name());
+#endif
r = chash_get(classHash, &key, &value);
if (r < 0)
return nil;
@@ -66,6 +76,7 @@ static Class classWithTypeInfo(const std::type_info * info)
return nil;
//fprintf(stderr, "typeid: %i %i\n", typeid(* object).hash_code(), typeid(mailcore::Array).hash_code());
+#ifdef __LIBCPP_TYPEINFO
size_t objectType = typeid(* object).hash_code();
if (objectType == typeid(mailcore::Value).hash_code()) {
return [NSValue mco_valueWithMCValue:(mailcore::Value *) object];
@@ -87,6 +98,11 @@ static Class classWithTypeInfo(const std::type_info * info)
MCAssert(aClass != nil);
return [aClass mco_objectWithMCObject:object];
}
+#else
+ Class aClass = classWithTypeInfo(&typeid(* object));
+ MCAssert(aClass != nil);
+ return [aClass mco_objectWithMCObject:object];
+#endif
}
- (mailcore::Object *) mco_mcObject
diff --git a/src/objc/utils/NSString+MCO.mm b/src/objc/utils/NSString+MCO.mm
index 3d692b76..3b8253ce 100644
--- a/src/objc/utils/NSString+MCO.mm
+++ b/src/objc/utils/NSString+MCO.mm
@@ -12,6 +12,11 @@
@implementation NSString (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_stringWithMCString:(mailcore::String *) object];
+}
+
+ (NSString *) mco_stringWithMCString:(mailcore::String *)cppString
{
if (cppString == NULL)
diff --git a/src/objc/utils/NSValue+MCO.mm b/src/objc/utils/NSValue+MCO.mm
index 81bcebd7..9781534a 100644
--- a/src/objc/utils/NSValue+MCO.mm
+++ b/src/objc/utils/NSValue+MCO.mm
@@ -14,6 +14,11 @@
@implementation NSValue (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_valueWithMCValue:(mailcore::Value *) object];
+}
+
+ (NSNumber *) mco_valueWithMCValue:(mailcore::Value *)value
{
switch (value->type()) {
diff --git a/tests-ios/AppDelegate.h b/tests-ios/AppDelegate.h
new file mode 100644
index 00000000..6bf4f082
--- /dev/null
+++ b/tests-ios/AppDelegate.h
@@ -0,0 +1,15 @@
+//
+// AppDelegate.h
+// test ios
+//
+// Created by DINH Viêt Hoà on 3/29/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@end
diff --git a/tests-ios/AppDelegate.mm b/tests-ios/AppDelegate.mm
new file mode 100644
index 00000000..5872d3bc
--- /dev/null
+++ b/tests-ios/AppDelegate.mm
@@ -0,0 +1,60 @@
+//
+// AppDelegate.m
+// test ios
+//
+// Created by DINH Viêt Hoà on 3/29/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "AppDelegate.h"
+
+#import "test-all.h"
+
+@implementation AppDelegate
+
+- (void)dealloc
+{
+ [_window release];
+ [super dealloc];
+}
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
+ // Override point for customization after application launch.
+ self.window.backgroundColor = [UIColor whiteColor];
+ [self.window makeKeyAndVisible];
+
+ testAll();
+
+ return YES;
+}
+
+- (void)applicationWillResignActive:(UIApplication *)application
+{
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
+}
+
+- (void)applicationDidEnterBackground:(UIApplication *)application
+{
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+}
+
+- (void)applicationWillEnterForeground:(UIApplication *)application
+{
+ // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
+}
+
+- (void)applicationDidBecomeActive:(UIApplication *)application
+{
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+}
+
+- (void)applicationWillTerminate:(UIApplication *)application
+{
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+}
+
+@end
diff --git a/tests-ios/main.m b/tests-ios/main.m
new file mode 100644
index 00000000..6eadda2f
--- /dev/null
+++ b/tests-ios/main.m
@@ -0,0 +1,18 @@
+//
+// main.m
+// test ios
+//
+// Created by DINH Viêt Hoà on 3/29/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "AppDelegate.h"
+
+int main(int argc, char *argv[])
+{
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/tests-ios/tests-ios-Info.plist b/tests-ios/tests-ios-Info.plist
new file mode 100644
index 00000000..0627bf66
--- /dev/null
+++ b/tests-ios/tests-ios-Info.plist
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.mailcore.${PRODUCT_NAME:rfc1034identifier}</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1.0</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/tests/main.mm b/tests/main.mm
index c82fca2e..10be4c02 100644
--- a/tests/main.mm
+++ b/tests/main.mm
@@ -8,338 +8,13 @@
#import <Foundation/Foundation.h>
-#include <unicode/putil.h>
-#include <unicode/uclean.h>
-#include <unicode/ucnv.h>
-#include <mailcore/mailcore.h>
-
-extern "C" {
- extern int mailstream_debug;
-}
-
-static mailcore::String * password = NULL;
-static mailcore::String * displayName = NULL;
-static mailcore::String * email = NULL;
-
-class TestOperation : public mailcore::Operation {
- void main()
- {
- MCLog("coin %p", this);
- }
-};
-
-class TestCallback : public mailcore::Object, public mailcore::OperationCallback {
- virtual void operationFinished(mailcore::Operation * op)
- {
- MCLog("callback coin %p %p %s", this, op, MCUTF8DESC(this));
- }
-};
-
-static mailcore::Data * testMessageBuilder()
-{
- mailcore::Address * address = new mailcore::Address();
- address->setDisplayName(displayName);
- address->setMailbox(email);
-
- address->release();
-
- mailcore::MessageBuilder * msg = new mailcore::MessageBuilder();
-
- msg->header()->setFrom(mailcore::Address::addressWithDisplayName(displayName, email));
- mailcore::Array * to = new mailcore::Array();
- mailcore::Array * bcc = new mailcore::Array();
- to->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Foo Bar"), MCSTR("foobar@to-recipient.org")));
- to->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Other Recipient"), MCSTR("another-foobar@to-recipient.org")));
- bcc->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Hidden Recipient"), MCSTR("foobar@bcc-recipient.org")));
- msg->header()->setTo(to);
- msg->header()->setBcc(bcc);
- to->release();
- bcc->release();
- msg->header()->setSubject(MCSTR("Mon projet d'été"));
- msg->setHTMLBody(MCSTR("<div>Hello <img src=\"cid:1234\"></div>"));
- msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("first-filename")));
- msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("second-filename")));
- mailcore::Attachment * attachment = mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("third-image-attachment"));
- attachment->setContentID(MCSTR("1234"));
- msg->addRelatedAttachment(attachment);
-
- mailcore::Data * data = msg->data();
-
- MCLog("%s", data->bytes());
-
- msg->release();
-
- return data;
-}
-
-static void testMessageParser(mailcore::Data * data)
-{
- mailcore::MessageParser * parser = mailcore::MessageParser::messageParserWithData(data);
- MCLog("%s", MCUTF8DESC(parser));
- MCLog("HTML rendering");
- MCLog("%s", MCUTF8(parser->htmlRendering()));
-}
-
-static void testIMAP()
-{
- mailcore::IMAPSession * session;
- mailcore::ErrorCode error;
-
- session = new mailcore::IMAPSession();
- session->setHostname(MCSTR("imap.gmail.com"));
- session->setPort(993);
- session->setUsername(email);
- session->setPassword(password);
- session->setConnectionType(mailcore::ConnectionTypeTLS);
-
- mailcore::IMAPMessagesRequestKind requestKind = (mailcore::IMAPMessagesRequestKind)
- (mailcore::IMAPMessagesRequestKindHeaders | mailcore::IMAPMessagesRequestKindStructure |
- mailcore::IMAPMessagesRequestKindInternalDate | mailcore::IMAPMessagesRequestKindHeaderSubject |
- mailcore::IMAPMessagesRequestKindFlags);
- mailcore::Array * messages = session->fetchMessagesByUID(MCSTR("INBOX"),
- requestKind, mailcore::IndexSet::indexSetWithRange(mailcore::RangeMake(1, UINT64_MAX)), NULL, &error);
- MCLog("%s", MCUTF8DESC(messages));
-
- session->release();
-}
-
-static void testSMTP(mailcore::Data * data)
-{
- mailcore::SMTPSession * smtp;
- mailcore::ErrorCode error;
-
- smtp = new mailcore::SMTPSession();
-
- smtp->setHostname(MCSTR("smtp.gmail.com"));
- smtp->setPort(25);
- smtp->setUsername(email);
- smtp->setPassword(password);
- smtp->setConnectionType(mailcore::ConnectionTypeStartTLS);
-
- smtp->sendMessage(data, NULL, &error);
-
- smtp->release();
-}
-
-static void testPOP()
-{
- mailcore::POPSession * session;
- mailcore::ErrorCode error;
-
- session = new mailcore::POPSession();
- session->setHostname(MCSTR("pop.gmail.com"));
- session->setPort(995);
- session->setUsername(email);
- session->setPassword(password);
- session->setConnectionType(mailcore::ConnectionTypeTLS);
-
- mailcore::Array * messages = session->fetchMessages(&error);
- MCLog("%s", MCUTF8DESC(messages));
-
- session->release();
-}
-
-static void testOperationQueue()
-{
- mailcore::OperationQueue * queue = new mailcore::OperationQueue();
-
- TestCallback * callback = new TestCallback();
-
- for(unsigned int i = 0 ; i < 100 ; i ++) {
- mailcore::Operation * op = new TestOperation();
- op->setCallback(callback);
- queue->addOperation(op);
- op->release();
- }
-
- [[NSRunLoop currentRunLoop] run];
-
- queue->release();
-}
-
-class TestSMTPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::SMTPOperationCallback {
- virtual void operationFinished(mailcore::Operation * op)
- {
- MCLog("callback %s %s", MCUTF8DESC(op), MCUTF8DESC(this));
- }
-
- virtual void bodyProgress(mailcore::SMTPOperation * op, unsigned int current, unsigned int maximum)
- {
- MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
- }
-};
-
-static void testAsyncSMTP(mailcore::Data * data)
-{
- mailcore::SMTPAsyncSession * smtp;
- TestSMTPCallback * callback = new TestSMTPCallback();
-
- smtp = new mailcore::SMTPAsyncSession();
-
- smtp->setHostname(MCSTR("smtp.gmail.com"));
- smtp->setPort(25);
- smtp->setUsername(email);
- smtp->setPassword(password);
- smtp->setConnectionType(mailcore::ConnectionTypeStartTLS);
-
- mailcore::SMTPOperation * op = smtp->sendMessageOperation(data);
- op->setSmtpCallback(callback);
- op->setCallback(callback);
- op->start();
-
- [[NSRunLoop currentRunLoop] run];
-
- //smtp->release();
-}
-
-class TestIMAPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::IMAPOperationCallback {
- virtual void operationFinished(mailcore::Operation * op)
- {
- mailcore::IMAPFetchMessagesOperation * fetchOp = (mailcore::IMAPFetchMessagesOperation *) op;
- //MCLog("callback %s %s %s", MCUTF8DESC(op), MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
- }
-
- virtual void bodyProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
- {
- MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
- }
-
- virtual void itemProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
- {
- MCLog("item progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
- }
-};
-
-static void testAsyncIMAP()
-{
- mailcore::IMAPAsyncSession * session;
- TestIMAPCallback * callback = new TestIMAPCallback();
-
- session = new mailcore::IMAPAsyncSession();
- session->setHostname(MCSTR("imap.gmail.com"));
- session->setPort(993);
- session->setUsername(email);
- session->setPassword(password);
- session->setConnectionType(mailcore::ConnectionTypeTLS);
-
- mailcore::IMAPMessagesRequestKind requestKind = (mailcore::IMAPMessagesRequestKind)
- (mailcore::IMAPMessagesRequestKindHeaders | mailcore::IMAPMessagesRequestKindStructure |
- mailcore::IMAPMessagesRequestKindInternalDate | mailcore::IMAPMessagesRequestKindHeaderSubject |
- mailcore::IMAPMessagesRequestKindFlags);
- mailcore::IMAPFetchMessagesOperation * op = session->fetchMessagesByUIDOperation(MCSTR("INBOX"), requestKind, mailcore::IndexSet::indexSetWithRange(mailcore::RangeMake(1, UINT64_MAX)));
- op->setCallback(callback);
- op->setImapCallback(callback);
- op->start();
- //MCLog("%s", MCUTF8DESC(messages));
- [[NSRunLoop currentRunLoop] run];
-
- //session->release();
-}
-
-class TestPOPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::POPOperationCallback {
- virtual void operationFinished(mailcore::Operation * op)
- {
- mailcore::POPFetchMessagesOperation * fetchOp = (mailcore::POPFetchMessagesOperation *) op;
- MCLog("callback %s %s", MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
- }
-
- virtual void bodyProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
- {
- MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
- }
-};
-
-static void testAsyncPOP()
-{
- mailcore::POPAsyncSession * session;
- TestPOPCallback * callback = new TestPOPCallback();
-
- session = new mailcore::POPAsyncSession();
- session->setHostname(MCSTR("pop.gmail.com"));
- session->setPort(995);
- session->setUsername(email);
- session->setPassword(password);
- session->setConnectionType(mailcore::ConnectionTypeTLS);
-
- mailcore::POPFetchMessagesOperation * op = session->fetchMessagesOperation();
- op->setCallback(callback);
- op->setPopCallback(callback);
- op->start();
-
- //mailcore::Array * messages = session->fetchMessages(&error);
- //MCLog("%s", MCUTF8DESC(messages));
-
- [[NSRunLoop currentRunLoop] run];
-}
-
-void testObjC()
-{
- MCOIMAPSession *session = [[MCOIMAPSession alloc] init];
- session.username = [NSString mco_stringWithMCString:email];
- session.password = [NSString mco_stringWithMCString:password];
- session.hostname = @"imap.gmail.com";
- session.port = 993;
- session.connectionType = MCOConnectionTypeTLS;
-
- NSLog(@"check account");
- MCOIMAPOperation *checkOp = [session checkAccountOperation];
- [checkOp start:^(NSError *err) {
- NSLog(@"check account done");
- if (err) {
- NSLog(@"Oh crap, an error %@", err);
- } else {
- NSLog(@"CONNECTED");
- NSLog(@"fetch all folders");
- MCOIMAPFetchFoldersOperation *foldersOp = [session fetchAllFoldersOperation];
- [foldersOp start:^(NSError *err, NSArray *folders) {
- NSLog(@"fetch all folders done");
- if (err) {
- NSLog(@"Oh crap, an error %@", err);
- } else {
- NSLog(@"Folder %@", folders);
- }
- }];
- }
- }];
-
-
- [[NSRunLoop currentRunLoop] run];
- [session autorelease];
-}
-
-
-void testAll()
-{
- u_setDataDirectory("/usr/local/share/icu");
-
- mailcore::AutoreleasePool * pool = new mailcore::AutoreleasePool();
-
- mailstream_debug = 1;
-
- //mailcore::Data * data = testMessageBuilder();
- //testMessageParser(data);
- //testSMTP(data);
- //testIMAP();
- //testPOP();
- //testAsyncSMTP(data);
- //testAsyncIMAP();
- //testAsyncPOP();
-
- testObjC();
-
- MCLog("pool release");
- pool->release();
-}
+#include "test-all.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
- email = MCSTR("email@gmail.com");
- password = MCSTR("MyP4ssw0rd");
- displayName = MCSTR("My Email");
-
testAll();
}
diff --git a/tests/test-all.h b/tests/test-all.h
new file mode 100644
index 00000000..2f020ae8
--- /dev/null
+++ b/tests/test-all.h
@@ -0,0 +1,16 @@
+//
+// test-all.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/29/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef __mailcore2__test_all__
+#define __mailcore2__test_all__
+
+#include <mailcore/mailcore.h>
+
+extern void testAll();
+
+#endif /* defined(__mailcore2__test_all__) */
diff --git a/tests/test-all.mm b/tests/test-all.mm
new file mode 100644
index 00000000..d9ed9249
--- /dev/null
+++ b/tests/test-all.mm
@@ -0,0 +1,336 @@
+//
+// test-all.cpp
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/29/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include "test-all.h"
+
+#include <unicode/putil.h>
+#include <unicode/uclean.h>
+#include <unicode/ucnv.h>
+#include <mailcore/mailcore.h>
+
+extern "C" {
+ extern int mailstream_debug;
+}
+
+static mailcore::String * password = NULL;
+static mailcore::String * displayName = NULL;
+static mailcore::String * email = NULL;
+
+class TestOperation : public mailcore::Operation {
+ void main()
+ {
+ MCLog("coin %p", this);
+ }
+};
+
+class TestCallback : public mailcore::Object, public mailcore::OperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ MCLog("callback coin %p %p %s", this, op, MCUTF8DESC(this));
+ }
+};
+
+static mailcore::Data * testMessageBuilder()
+{
+ mailcore::Address * address = new mailcore::Address();
+ address->setDisplayName(displayName);
+ address->setMailbox(email);
+
+ address->release();
+
+ mailcore::MessageBuilder * msg = new mailcore::MessageBuilder();
+
+ msg->header()->setFrom(mailcore::Address::addressWithDisplayName(displayName, email));
+ mailcore::Array * to = new mailcore::Array();
+ mailcore::Array * bcc = new mailcore::Array();
+ to->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Foo Bar"), MCSTR("foobar@to-recipient.org")));
+ to->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Other Recipient"), MCSTR("another-foobar@to-recipient.org")));
+ bcc->addObject(mailcore::Address::addressWithDisplayName(MCSTR("Hidden Recipient"), MCSTR("foobar@bcc-recipient.org")));
+ msg->header()->setTo(to);
+ msg->header()->setBcc(bcc);
+ to->release();
+ bcc->release();
+ msg->header()->setSubject(MCSTR("Mon projet d'été"));
+ msg->setHTMLBody(MCSTR("<div>Hello <img src=\"cid:1234\"></div>"));
+ msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("first-filename")));
+ msg->addAttachment(mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("second-filename")));
+ mailcore::Attachment * attachment = mailcore::Attachment::attachmentWithContentsOfFile(MCSTR("third-image-attachment"));
+ attachment->setContentID(MCSTR("1234"));
+ msg->addRelatedAttachment(attachment);
+
+ mailcore::Data * data = msg->data();
+
+ MCLog("%s", data->bytes());
+
+ msg->release();
+
+ return data;
+}
+
+static void testMessageParser(mailcore::Data * data)
+{
+ mailcore::MessageParser * parser = mailcore::MessageParser::messageParserWithData(data);
+ MCLog("%s", MCUTF8DESC(parser));
+ MCLog("HTML rendering");
+ MCLog("%s", MCUTF8(parser->htmlRendering()));
+}
+
+static void testIMAP()
+{
+ mailcore::IMAPSession * session;
+ mailcore::ErrorCode error;
+
+ session = new mailcore::IMAPSession();
+ session->setHostname(MCSTR("imap.gmail.com"));
+ session->setPort(993);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::IMAPMessagesRequestKind requestKind = (mailcore::IMAPMessagesRequestKind)
+ (mailcore::IMAPMessagesRequestKindHeaders | mailcore::IMAPMessagesRequestKindStructure |
+ mailcore::IMAPMessagesRequestKindInternalDate | mailcore::IMAPMessagesRequestKindHeaderSubject |
+ mailcore::IMAPMessagesRequestKindFlags);
+ mailcore::Array * messages = session->fetchMessagesByUID(MCSTR("INBOX"),
+ requestKind, mailcore::IndexSet::indexSetWithRange(mailcore::RangeMake(1, UINT64_MAX)), NULL, &error);
+ MCLog("%s", MCUTF8DESC(messages));
+
+ session->release();
+}
+
+static void testSMTP(mailcore::Data * data)
+{
+ mailcore::SMTPSession * smtp;
+ mailcore::ErrorCode error;
+
+ smtp = new mailcore::SMTPSession();
+
+ smtp->setHostname(MCSTR("smtp.gmail.com"));
+ smtp->setPort(25);
+ smtp->setUsername(email);
+ smtp->setPassword(password);
+ smtp->setConnectionType(mailcore::ConnectionTypeStartTLS);
+
+ smtp->sendMessage(data, NULL, &error);
+
+ smtp->release();
+}
+
+static void testPOP()
+{
+ mailcore::POPSession * session;
+ mailcore::ErrorCode error;
+
+ session = new mailcore::POPSession();
+ session->setHostname(MCSTR("pop.gmail.com"));
+ session->setPort(995);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::Array * messages = session->fetchMessages(&error);
+ MCLog("%s", MCUTF8DESC(messages));
+
+ session->release();
+}
+
+static void testOperationQueue()
+{
+ mailcore::OperationQueue * queue = new mailcore::OperationQueue();
+
+ TestCallback * callback = new TestCallback();
+
+ for(unsigned int i = 0 ; i < 100 ; i ++) {
+ mailcore::Operation * op = new TestOperation();
+ op->setCallback(callback);
+ queue->addOperation(op);
+ op->release();
+ }
+
+ [[NSRunLoop currentRunLoop] run];
+
+ queue->release();
+}
+
+class TestSMTPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::SMTPOperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ MCLog("callback %s %s", MCUTF8DESC(op), MCUTF8DESC(this));
+ }
+
+ virtual void bodyProgress(mailcore::SMTPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+};
+
+static void testAsyncSMTP(mailcore::Data * data)
+{
+ mailcore::SMTPAsyncSession * smtp;
+ TestSMTPCallback * callback = new TestSMTPCallback();
+
+ smtp = new mailcore::SMTPAsyncSession();
+
+ smtp->setHostname(MCSTR("smtp.gmail.com"));
+ smtp->setPort(25);
+ smtp->setUsername(email);
+ smtp->setPassword(password);
+ smtp->setConnectionType(mailcore::ConnectionTypeStartTLS);
+
+ mailcore::SMTPOperation * op = smtp->sendMessageOperation(data);
+ op->setSmtpCallback(callback);
+ op->setCallback(callback);
+ op->start();
+
+ [[NSRunLoop currentRunLoop] run];
+
+ //smtp->release();
+}
+
+class TestIMAPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::IMAPOperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ mailcore::IMAPFetchMessagesOperation * fetchOp = (mailcore::IMAPFetchMessagesOperation *) op;
+ //MCLog("callback %s %s %s", MCUTF8DESC(op), MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
+ }
+
+ virtual void bodyProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+
+ virtual void itemProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("item progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+};
+
+static void testAsyncIMAP()
+{
+ mailcore::IMAPAsyncSession * session;
+ TestIMAPCallback * callback = new TestIMAPCallback();
+
+ session = new mailcore::IMAPAsyncSession();
+ session->setHostname(MCSTR("imap.gmail.com"));
+ session->setPort(993);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::IMAPMessagesRequestKind requestKind = (mailcore::IMAPMessagesRequestKind)
+ (mailcore::IMAPMessagesRequestKindHeaders | mailcore::IMAPMessagesRequestKindStructure |
+ mailcore::IMAPMessagesRequestKindInternalDate | mailcore::IMAPMessagesRequestKindHeaderSubject |
+ mailcore::IMAPMessagesRequestKindFlags);
+ mailcore::IMAPFetchMessagesOperation * op = session->fetchMessagesByUIDOperation(MCSTR("INBOX"), requestKind, mailcore::IndexSet::indexSetWithRange(mailcore::RangeMake(1, UINT64_MAX)));
+ op->setCallback(callback);
+ op->setImapCallback(callback);
+ op->start();
+ //MCLog("%s", MCUTF8DESC(messages));
+ [[NSRunLoop currentRunLoop] run];
+
+ //session->release();
+}
+
+class TestPOPCallback : public mailcore::Object, public mailcore::OperationCallback, public mailcore::POPOperationCallback {
+ virtual void operationFinished(mailcore::Operation * op)
+ {
+ mailcore::POPFetchMessagesOperation * fetchOp = (mailcore::POPFetchMessagesOperation *) op;
+ MCLog("callback %s %s", MCUTF8DESC(fetchOp->messages()), MCUTF8DESC(this));
+ }
+
+ virtual void bodyProgress(mailcore::IMAPOperation * op, unsigned int current, unsigned int maximum)
+ {
+ MCLog("progress %s %s %i/%i", MCUTF8DESC(op), MCUTF8DESC(this), current, maximum);
+ }
+};
+
+static void testAsyncPOP()
+{
+ mailcore::POPAsyncSession * session;
+ TestPOPCallback * callback = new TestPOPCallback();
+
+ session = new mailcore::POPAsyncSession();
+ session->setHostname(MCSTR("pop.gmail.com"));
+ session->setPort(995);
+ session->setUsername(email);
+ session->setPassword(password);
+ session->setConnectionType(mailcore::ConnectionTypeTLS);
+
+ mailcore::POPFetchMessagesOperation * op = session->fetchMessagesOperation();
+ op->setCallback(callback);
+ op->setPopCallback(callback);
+ op->start();
+
+ //mailcore::Array * messages = session->fetchMessages(&error);
+ //MCLog("%s", MCUTF8DESC(messages));
+
+ [[NSRunLoop currentRunLoop] run];
+}
+
+void testObjC()
+{
+ MCOIMAPSession *session = [[MCOIMAPSession alloc] init];
+ session.username = [NSString mco_stringWithMCString:email];
+ session.password = [NSString mco_stringWithMCString:password];
+ session.hostname = @"imap.gmail.com";
+ session.port = 993;
+ session.connectionType = MCOConnectionTypeTLS;
+
+ NSLog(@"check account");
+ MCOIMAPOperation *checkOp = [session checkAccountOperation];
+ [checkOp start:^(NSError *err) {
+ NSLog(@"check account done");
+ if (err) {
+ NSLog(@"Oh crap, an error %@", err);
+ } else {
+ NSLog(@"CONNECTED");
+ NSLog(@"fetch all folders");
+ MCOIMAPFetchFoldersOperation *foldersOp = [session fetchAllFoldersOperation];
+ [foldersOp start:^(NSError *err, NSArray *folders) {
+ NSLog(@"fetch all folders done");
+ if (err) {
+ NSLog(@"Oh crap, an error %@", err);
+ } else {
+ NSLog(@"Folder %@", folders);
+ }
+ }];
+ }
+ }];
+
+
+ [[NSRunLoop currentRunLoop] run];
+ [session autorelease];
+}
+
+
+void testAll()
+{
+ u_setDataDirectory("/usr/local/share/icu");
+
+ email = MCSTR("email@gmail.com");
+ password = MCSTR("MyP4ssw0rd");
+ displayName = MCSTR("My Email");
+
+ mailcore::AutoreleasePool * pool = new mailcore::AutoreleasePool();
+
+ mailstream_debug = 1;
+
+ //mailcore::Data * data = testMessageBuilder();
+ //testMessageParser(data);
+ //testSMTP(data);
+ //testIMAP();
+ //testPOP();
+ //testAsyncSMTP(data);
+ //testAsyncIMAP();
+ //testAsyncPOP();
+
+ testObjC();
+
+ MCLog("pool release");
+ pool->release();
+}