Commit 5c1bd07b authored by Guillaume BIENKOWSKI's avatar Guillaume BIENKOWSKI

Add a unit-test framework for iOS.

Launch using the following command:

   xcodebuild -sdk iphonesimulator -project linphone.xcodeproj -scheme "LinphoneTester" test RUN_UNIT_TEST_WITH_IOS_SIM=YES
parent 5d162519
//
// DTObjectBlockExecutor.h
// DTFoundation
//
// Created by Oliver Drobnik on 12.02.13.
// Copyright (c) 2013 Cocoanetics. All rights reserved.
//
/**
This class is used by [NSObject addDeallocBlock:] to execute blocks on dealloc
*/
@interface DTObjectBlockExecutor : NSObject
/**
Convenience method to create a block executor with a deallocation block
@param block The block to execute when the created receiver is being deallocated
*/
+ (id)blockExecutorWithDeallocBlock:(void(^)())block;
/**
Block to execute when dealloc of the receiver is called
*/
@property (nonatomic, copy) void (^deallocBlock)();
@end
//
// DTObjectBlockExecutor.m
// DTFoundation
//
// Created by Oliver Drobnik on 12.02.13.
// Copyright (c) 2013 Cocoanetics. All rights reserved.
//
#import "DTObjectBlockExecutor.h"
@implementation DTObjectBlockExecutor
+ (id)blockExecutorWithDeallocBlock:(void(^)())block
{
DTObjectBlockExecutor *executor = [[DTObjectBlockExecutor alloc] init];
executor.deallocBlock = block; // copy
return executor;
}
- (void)dealloc
{
if (_deallocBlock)
{
_deallocBlock();
_deallocBlock = nil;
}
}
@end
//
// Prefix header
//
// The contents of this file are implicitly included at the beginning of every source file.
//
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
//
// LinphoneTester_Tests.m
// LinphoneTester Tests
//
// Created by guillaume on 10/09/2014.
//
//
#import <XCTest/XCTest.h>
#include "linphone/linphonecore.h"
#include "linphone/liblinphone_tester.h"
#import "NSObject+DTRuntime.h"
@interface LinphoneTester_Tests : XCTestCase
@end
@implementation LinphoneTester_Tests {
NSString* bundlePath;
NSString* documentPath;
}
static void linphone_log_function(OrtpLogLevel lev, const char *fmt, va_list args) {
NSString* log = [[NSString alloc] initWithFormat:[NSString stringWithUTF8String:fmt] arguments:args];
NSLog(@"%@",log);
}
void LSLog(NSString* fmt, ...){
va_list args;
va_start(args, fmt);
linphone_log_function(ORTP_MESSAGE, [fmt UTF8String], args);
va_end(args);
}
- (id)init {
self = [super init];
if( self ){
bundlePath = [[NSBundle mainBundle] bundlePath];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentPath = [paths objectAtIndex:0];
LSLog(@"Bundle path: %@", bundlePath);
LSLog(@"Document path: %@", documentPath);
liblinphone_tester_set_fileprefix([bundlePath UTF8String]);
liblinphone_tester_set_writable_dir_prefix( ms_strdup([documentPath UTF8String]) );
}
return self;
}
+ (NSArray*)skippedSuites {
NSArray* skipped_suites = @[@"Flexisip"];
return skipped_suites;
}
+ (void)initialize {
liblinphone_tester_init();
int count = liblinphone_tester_nb_test_suites();
for (int i=0; i<count; i++) {
const char* suite = liblinphone_tester_test_suite_name(i);
LSLog(@"Running '%s' suite", suite);
int test_count = liblinphone_tester_nb_tests(suite);
for( int k = 0; k<test_count; k++){
const char* test =liblinphone_tester_test_name(suite, k);
NSString* sSuite = [NSString stringWithUTF8String:suite];
NSString* sTest = [NSString stringWithUTF8String:test];
if( [[LinphoneTester_Tests skippedSuites] containsObject:sSuite] ) continue;
// prepend test_ so that it gets found by introspection
NSString* safesTest = [sTest stringByReplacingOccurrencesOfString:@" " withString:@"_"];
NSString* safesSuite = [sSuite stringByReplacingOccurrencesOfString:@" " withString:@"_"];
NSString *selectorName = [NSString stringWithFormat:@"test_%@__%@", safesSuite, safesTest];
[LinphoneTester_Tests addInstanceMethodWithSelectorName:selectorName block:^(LinphoneTester_Tests* myself) {
[myself testForSuite:sSuite andTest:sTest];
}];
}
}
}
- (void)setUp
{
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testForSuite:(NSString*)suite andTest:(NSString*)test
{
XCTAssertFalse(liblinphone_tester_run_tests([suite UTF8String], [test UTF8String]), @"Suite '%@' / Test '%@' failed", suite, test);
}
@end
//
// NSObject+DTRuntime.h
// DTFoundation
//
// Created by Oliver Drobnik on 4/25/12.
// Copyright (c) 2012 Cocoanetics. All rights reserved.
//
/**
Methods to dynamically modify objects at runtime
*/
@interface NSObject (DTRuntime)
/**-------------------------------------------------------------------------------------
@name Blocks
---------------------------------------------------------------------------------------
*/
/**
Adds a block to be executed as soon as the receiver's memory is deallocated
@param block The block to execute when the receiver is being deallocated
*/
- (void)addDeallocBlock:(void(^)())block;
/**
Adds a new instance method to a class. All instances of this class will have this method.
The block captures `self` in the calling context. To allow access to the instance from within the block it is passed as parameter to the block.
@param selectorName The name of the method.
@param block The block to execute for the instance method, a pointer to the instance is passed as the only parameter.
@returns `YES` if the operation was successful
*/
+ (BOOL)addInstanceMethodWithSelectorName:(NSString *)selectorName block:(void(^)(id))block;
/**-------------------------------------------------------------------------------------
@name Method Swizzling
---------------------------------------------------------------------------------------
*/
/**
Exchanges two method implementations. After the call methods to the first selector will now go to the second one and vice versa.
@param selector The first method
@param otherSelector The second method
*/
+ (void)swizzleMethod:(SEL)selector withMethod:(SEL)otherSelector;
/**
Exchanges two class method implementations. After the call methods to the first selector will now go to the second one and vice versa.
@param selector The first method
@param otherSelector The second method
*/
+ (void)swizzleClassMethod:(SEL)selector withMethod:(SEL)otherSelector;
@end
//
// NSObject_DTRuntime.h
// DTFoundation
//
// Created by Oliver Drobnik on 4/25/12.
// Copyright (c) 2012 Cocoanetics. All rights reserved.
//
#import <objc/runtime.h>
#import "DTObjectBlockExecutor.h"
@implementation NSObject (DTRuntime)
static char DTRuntimeDeallocBlocks;
#pragma mark - Blocks
- (void)addDeallocBlock:(void(^)())block
{
// don't accept NULL block
NSParameterAssert(block);
NSMutableArray *deallocBlocks = objc_getAssociatedObject(self, &DTRuntimeDeallocBlocks);
// add array of dealloc blocks if not existing yet
if (!deallocBlocks)
{
deallocBlocks = [[NSMutableArray alloc] init];
objc_setAssociatedObject(self, &DTRuntimeDeallocBlocks, deallocBlocks, OBJC_ASSOCIATION_RETAIN);
}
DTObjectBlockExecutor *executor = [DTObjectBlockExecutor blockExecutorWithDeallocBlock:block];
[deallocBlocks addObject:executor];
}
+ (BOOL)addInstanceMethodWithSelectorName:(NSString *)selectorName block:(void(^)(id))block
{
// don't accept nil name
NSParameterAssert(selectorName);
// don't accept NULL block
NSParameterAssert(block);
// See http://stackoverflow.com/questions/6357663/casting-a-block-to-a-void-for-dynamic-class-method-resolution
#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7
void *impBlockForIMP = (void *)objc_unretainedPointer(block);
#else
id impBlockForIMP = (__bridge id)objc_unretainedPointer(block);
#endif
IMP myIMP = imp_implementationWithBlock(impBlockForIMP);
SEL selector = NSSelectorFromString(selectorName);
return class_addMethod(self, selector, myIMP, "v@:");
}
#pragma mark - Method Swizzling
+ (void)swizzleMethod:(SEL)selector withMethod:(SEL)otherSelector
{
// my own class is being targetted
Class c = [self class];
// get the methods from the selectors
Method originalMethod = class_getInstanceMethod(c, selector);
Method otherMethod = class_getInstanceMethod(c, otherSelector);
if (class_addMethod(c, selector, method_getImplementation(otherMethod), method_getTypeEncoding(otherMethod)))
{
class_replaceMethod(c, otherSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
}
else
{
method_exchangeImplementations(originalMethod, otherMethod);
}
}
+ (void)swizzleClassMethod:(SEL)selector withMethod:(SEL)otherSelector
{
// my own class is being targetted
Class c = [self class];
// get the methods from the selectors
Method originalMethod = class_getClassMethod(c, selector);
Method otherMethod = class_getClassMethod(c, otherSelector);
// if (class_addMethod(c, selector, method_getImplementation(otherMethod), method_getTypeEncoding(otherMethod)))
// {
// class_replaceMethod(c, otherSelector, method_getImplementation(originalMethod), method_getTypeEncoding(originalMethod));
// }
// else
// {
method_exchangeImplementations(originalMethod, otherMethod);
// }
}
@end
......@@ -47,20 +47,20 @@ static void linphone_log_function(OrtpLogLevel lev, const char *fmt, va_list arg
NSString* log = [[NSString alloc] initWithFormat:[NSString stringWithUTF8String:fmt] arguments:args];
NSLog(@"%@",log);
[logsBuffer addObject:log];
if (logsBuffer.count >= kLogsBufferCapacity ) {
[lastLogs addObjectsFromArray:logsBuffer];
if( lastLogs.count >= kLastLogsCapacity - kLogsBufferCapacity ){
[lastLogs removeObjectsInRange:NSMakeRange(0, kLogsBufferCapacity)];
}
[[NSNotificationCenter defaultCenter] postNotificationName:kLogsUpdateNotification
object:nil
userInfo:@{@"newlogs": [logsBuffer copy]}];
[logsBuffer removeAllObjects];
}
// [logsBuffer addObject:log];
//
// if (logsBuffer.count >= kLogsBufferCapacity ) {
// [lastLogs addObjectsFromArray:logsBuffer];
//
// if( lastLogs.count >= kLastLogsCapacity - kLogsBufferCapacity ){
// [lastLogs removeObjectsInRange:NSMakeRange(0, kLogsBufferCapacity)];
// }
// [[NSNotificationCenter defaultCenter] postNotificationName:kLogsUpdateNotification
// object:nil
// userInfo:@{@"newlogs": [logsBuffer copy]}];
// [logsBuffer removeAllObjects];
// }
}
......
//
// LinphoneTesterTests.m
// LinphoneTesterTests
//
// Created by guillaume on 28/05/2014.
//
//
#import <XCTest/XCTest.h>
@interface LinphoneTesterTests : XCTestCase
@end
@implementation LinphoneTesterTests
- (void)setUp
{
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown
{
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample
{
XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
}
@end
......@@ -1355,6 +1355,15 @@
F0818E7F17FC51D8005A3330 /* linphone_icon_76.png in Resources */ = {isa = PBXBuildFile; fileRef = F0818E7C17FC51D8005A3330 /* linphone_icon_76.png */; };
F0818E8017FC51D8005A3330 /* linphone_icon_152.png in Resources */ = {isa = PBXBuildFile; fileRef = F0818E7D17FC51D8005A3330 /* linphone_icon_152.png */; };
F0818E8117FC51D8005A3330 /* linphone_icon_152.png in Resources */ = {isa = PBXBuildFile; fileRef = F0818E7D17FC51D8005A3330 /* linphone_icon_152.png */; };
F08F118519C09C6B007D70C2 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F03A9B3318C0CF7000C4D7FE /* XCTest.framework */; };
F08F118619C09C6B007D70C2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
F08F118719C09C6B007D70C2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
F08F118D19C09C6B007D70C2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F08F118B19C09C6B007D70C2 /* InfoPlist.strings */; };
F08F118F19C09C6B007D70C2 /* LinphoneTester_Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = F08F118E19C09C6B007D70C2 /* LinphoneTester_Tests.m */; };
F08F119919C09D88007D70C2 /* flexisip in Resources */ = {isa = PBXBuildFile; fileRef = F08F119819C09D88007D70C2 /* flexisip */; };
F08F119A19C09D88007D70C2 /* flexisip in Resources */ = {isa = PBXBuildFile; fileRef = F08F119819C09D88007D70C2 /* flexisip */; };
F08F119D19C0A65B007D70C2 /* NSObject+DTRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = F08F119C19C0A65B007D70C2 /* NSObject+DTRuntime.m */; };
F08F11A019C0A6CB007D70C2 /* DTObjectBlockExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = F08F119F19C0A6CB007D70C2 /* DTObjectBlockExecutor.m */; };
F0938159188E629800A55DFA /* iTunesArtwork in Resources */ = {isa = PBXBuildFile; fileRef = F0938158188E629800A55DFA /* iTunesArtwork */; };
F093815A188E629800A55DFA /* iTunesArtwork in Resources */ = {isa = PBXBuildFile; fileRef = F0938158188E629800A55DFA /* iTunesArtwork */; };
F0A2759C18157A6000B6D61A /* linphone_icon_120.png in Resources */ = {isa = PBXBuildFile; fileRef = F0818E7B17FC5160005A3330 /* linphone_icon_120.png */; };
......@@ -1417,11 +1426,9 @@
F0BB8C3C19362C2200974404 /* certificates in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3919362C2200974404 /* certificates */; };
F0BB8C3D19362C2200974404 /* images in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3A19362C2200974404 /* images */; };
F0BB8C3E19362C2200974404 /* sounds in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3B19362C2200974404 /* sounds */; };
F0BB8C44193630CA00974404 /* flexisip.conf in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C3F193630CA00974404 /* flexisip.conf */; };
F0BB8C45193630CA00974404 /* local_tester_hosts in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C40193630CA00974404 /* local_tester_hosts */; };
F0BB8C46193630CA00974404 /* marie_xml in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C41193630CA00974404 /* marie_xml */; };
F0BB8C47193630CA00974404 /* tester_hosts in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C42193630CA00974404 /* tester_hosts */; };
F0BB8C48193630CA00974404 /* userdb.conf in Resources */ = {isa = PBXBuildFile; fileRef = F0BB8C43193630CA00974404 /* userdb.conf */; };
F0BB8C4C193631D200974404 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22276E8813C73DC000210156 /* CoreMedia.framework */; };
F0BB8C4D193631DF00974404 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 224567C1107B968500F10948 /* AVFoundation.framework */; };
F476004B147AAF2800FFF19B /* liblinphone.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2211DB911475562600DEE054 /* liblinphone.a */; };
......@@ -1474,6 +1481,13 @@
remoteGlobalIDString = D2AAC07D0554694100DB518D;
remoteInfo = NinePatch;
};
F08F119119C09C6B007D70C2 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
proxyType = 1;
remoteGlobalIDString = F0BB8BD41936208100974404;
remoteInfo = LinphoneTester;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
......@@ -2265,6 +2279,16 @@
F0818E7B17FC5160005A3330 /* linphone_icon_120.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = linphone_icon_120.png; path = Resources/linphone_icon_120.png; sourceTree = "<group>"; };
F0818E7C17FC51D8005A3330 /* linphone_icon_76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = linphone_icon_76.png; path = Resources/linphone_icon_76.png; sourceTree = "<group>"; };
F0818E7D17FC51D8005A3330 /* linphone_icon_152.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = linphone_icon_152.png; path = Resources/linphone_icon_152.png; sourceTree = "<group>"; };
F08F118419C09C6A007D70C2 /* LinphoneTester Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "LinphoneTester Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
F08F118A19C09C6B007D70C2 /* LinphoneTester Tests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "LinphoneTester Tests-Info.plist"; sourceTree = "<group>"; };
F08F118C19C09C6B007D70C2 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
F08F118E19C09C6B007D70C2 /* LinphoneTester_Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LinphoneTester_Tests.m; sourceTree = "<group>"; };
F08F119019C09C6B007D70C2 /* LinphoneTester Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "LinphoneTester Tests-Prefix.pch"; sourceTree = "<group>"; };
F08F119819C09D88007D70C2 /* flexisip */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flexisip; path = submodules/linphone/tester/flexisip; sourceTree = SOURCE_ROOT; };
F08F119B19C0A65A007D70C2 /* NSObject+DTRuntime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+DTRuntime.h"; sourceTree = "<group>"; };
F08F119C19C0A65B007D70C2 /* NSObject+DTRuntime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+DTRuntime.m"; sourceTree = "<group>"; };
F08F119E19C0A6CB007D70C2 /* DTObjectBlockExecutor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DTObjectBlockExecutor.h; sourceTree = "<group>"; };
F08F119F19C0A6CB007D70C2 /* DTObjectBlockExecutor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DTObjectBlockExecutor.m; sourceTree = "<group>"; };
F0938158188E629800A55DFA /* iTunesArtwork */ = {isa = PBXFileReference; lastKnownFileType = file; path = iTunesArtwork; sourceTree = "<group>"; };
F09548181883F15300E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ChatRoomViewController.xib; sourceTree = "<group>"; };
F09548191883F15300E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ChatViewController.xib; sourceTree = "<group>"; };
......@@ -2356,9 +2380,6 @@
F0BB8BEE1936208200974404 /* DetailViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DetailViewController.h; sourceTree = "<group>"; };
F0BB8BEF1936208200974404 /* DetailViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DetailViewController.m; sourceTree = "<group>"; };
F0BB8BF11936208200974404 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
F0BB8BFF1936208200974404 /* LinphoneTesterTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "LinphoneTesterTests-Info.plist"; sourceTree = "<group>"; };
F0BB8C011936208200974404 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
F0BB8C031936208200974404 /* LinphoneTesterTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LinphoneTesterTests.m; sourceTree = "<group>"; };
F0BB8C0F193623F200974404 /* liblinphonetester.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = liblinphonetester.a; path = "liblinphone-sdk/apple-darwin/lib/liblinphonetester.a"; sourceTree = "<group>"; };
F0BB8C111936240300974404 /* libcunit.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcunit.a; path = "liblinphone-sdk/apple-darwin/lib/libcunit.a"; sourceTree = "<group>"; };
F0BB8C311936246600974404 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
......@@ -2367,11 +2388,9 @@
F0BB8C3919362C2200974404 /* certificates */ = {isa = PBXFileReference; lastKnownFileType = folder; name = certificates; path = submodules/linphone/tester/certificates; sourceTree = SOURCE_ROOT; };
F0BB8C3A19362C2200974404 /* images */ = {isa = PBXFileReference; lastKnownFileType = folder; name = images; path = submodules/linphone/tester/images; sourceTree = SOURCE_ROOT; };
F0BB8C3B19362C2200974404 /* sounds */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sounds; path = submodules/linphone/tester/sounds; sourceTree = SOURCE_ROOT; };
F0BB8C3F193630CA00974404 /* flexisip.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = flexisip.conf; path = submodules/linphone/tester/flexisip.conf; sourceTree = SOURCE_ROOT; };
F0BB8C40193630CA00974404 /* local_tester_hosts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = local_tester_hosts; path = submodules/linphone/tester/local_tester_hosts; sourceTree = SOURCE_ROOT; };
F0BB8C41193630CA00974404 /* marie_xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; name = marie_xml; path = submodules/linphone/tester/marie_xml; sourceTree = SOURCE_ROOT; };
F0BB8C42193630CA00974404 /* tester_hosts */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = tester_hosts; path = submodules/linphone/tester/tester_hosts; sourceTree = SOURCE_ROOT; };
F0BB8C43193630CA00974404 /* userdb.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = userdb.conf; path = submodules/linphone/tester/userdb.conf; sourceTree = SOURCE_ROOT; };
F0BB8C4A193631B300974404 /* ImageIO.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ImageIO.framework; path = System/Library/Frameworks/ImageIO.framework; sourceTree = SDKROOT; };
F84015BC1939FE37006ABAB5 /* test_failed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test_failed.png; path = Resources/test_failed.png; sourceTree = "<group>"; };
F84015BD1939FE37006ABAB5 /* test_inprogress.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = test_inprogress.png; path = Resources/test_inprogress.png; sourceTree = "<group>"; };
......@@ -2498,6 +2517,16 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
F08F118119C09C6A007D70C2 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F08F118519C09C6B007D70C2 /* XCTest.framework in Frameworks */,
F08F118719C09C6B007D70C2 /* UIKit.framework in Frameworks */,
F08F118619C09C6B007D70C2 /* Foundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
F0BB8BD21936208100974404 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
......@@ -2643,6 +2672,7 @@
1D6058910D05DD3D006BFB54 /* linphone.app */,
22D8F187147548E2008C97DB /* linphone-no-gpl-thirdparties.app */,
F0BB8BD51936208100974404 /* LinphoneTester.app */,
F08F118419C09C6A007D70C2 /* LinphoneTester Tests.xctest */,
);
name = Products;
sourceTree = "<group>";
......@@ -2739,15 +2769,15 @@
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
isa = PBXGroup;
children = (
F0938158188E629800A55DFA /* iTunesArtwork */,
2258633C11410BAC00C5A737 /* README */,
F04892FE180C3296002FED35 /* ImageOptim.sh */,
080E96DDFE201D6D7F000001 /* Classes */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
F04892FE180C3296002FED35 /* ImageOptim.sh */,
F0938158188E629800A55DFA /* iTunesArtwork */,
F0BB8BD91936208100974404 /* LinphoneTester */,
F0BB8BFD1936208200974404 /* LinphoneTesterTests */,
F08F118819C09C6B007D70C2 /* LinphoneTester Tests */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
19C28FACFE9D520D11CA2CBB /* Products */,
2258633C11410BAC00C5A737 /* README */,
29B97317FDCFA39411CA2CEA /* Resources */,
D398D3031594B0FB00FD553C /* Settings */,
);
......@@ -3038,6 +3068,29 @@
name = UACellBackgroundView;
sourceTree = "<group>";
};
F08F118819C09C6B007D70C2 /* LinphoneTester Tests */ = {
isa = PBXGroup;
children = (
F08F118E19C09C6B007D70C2 /* LinphoneTester_Tests.m */,
F08F119E19C0A6CB007D70C2 /* DTObjectBlockExecutor.h */,
F08F119F19C0A6CB007D70C2 /* DTObjectBlockExecutor.m */,
F08F119B19C0A65A007D70C2 /* NSObject+DTRuntime.h */,
F08F119C19C0A65B007D70C2 /* NSObject+DTRuntime.m */,
F08F118919C09C6B007D70C2 /* Supporting Files */,
);
path = "LinphoneTester Tests";
sourceTree = "<group>";
};
F08F118919C09C6B007D70C2 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F08F118A19C09C6B007D70C2 /* LinphoneTester Tests-Info.plist */,
F08F118B19C09C6B007D70C2 /* InfoPlist.strings */,
F08F119019C09C6B007D70C2 /* LinphoneTester Tests-Prefix.pch */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
F0B89C2318DC90850050B60E /* images */ = {
isa = PBXGroup;
children = (
......@@ -3555,11 +3608,10 @@
F0BB8BDA1936208100974404 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F0BB8C3F193630CA00974404 /* flexisip.conf */,
F08F119819C09D88007D70C2 /* flexisip */,
F0BB8C40193630CA00974404 /* local_tester_hosts */,
F0BB8C41193630CA00974404 /* marie_xml */,
F0BB8C42193630CA00974404 /* tester_hosts */,
F0BB8C43193630CA00974404 /* userdb.conf */,
F0BB8C3919362C2200974404 /* certificates */,
F0BB8C3A19362C2200974404 /* images */,
F0BB8C3B19362C2200974404 /* sounds */,
......@@ -3572,24 +3624,6 @@
name = "Supporting Files";
sourceTree = "<group>";
};
F0BB8BFD1936208200974404 /* LinphoneTesterTests */ = {
isa = PBXGroup;
children = (
F0BB8C031936208200974404 /* LinphoneTesterTests.m */,
F0BB8BFE1936208200974404 /* Supporting Files */,
);
path = LinphoneTesterTests;
sourceTree = "<group>";
};
F0BB8BFE1936208200974404 /* Supporting Files */ = {
isa = PBXGroup;
children = (
F0BB8BFF1936208200974404 /* LinphoneTesterTests-Info.plist */,
F0BB8C001936208200974404 /* InfoPlist.strings */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
......@@ -3635,6 +3669,24 @@
productReference = 22D8F187147548E2008C97DB /* linphone-no-gpl-thirdparties.app */;
productType = "com.apple.product-type.application";
};
F08F118319C09C6A007D70C2 /* LinphoneTester Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = F08F119319C09C6B007D70C2 /* Build configuration list for PBXNativeTarget "LinphoneTester Tests" */;
buildPhases = (
F08F118019C09C6A007D70C2 /* Sources */,
F08F118119C09C6A007D70C2 /* Frameworks */,
F08F118219C09C6A007D70C2 /* Resources */,
);
buildRules = (
);
dependencies = (
F08F119219C09C6B007D70C2 /* PBXTargetDependency */,
);
name = "LinphoneTester Tests";
productName = "LinphoneTester Tests";
productReference = F08F118419C09C6A007D70C2 /* LinphoneTester Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
F0BB8BD41936208100974404 /* LinphoneTester */ = {
isa = PBXNativeTarget;
buildConfigurationList = F0BB8C051936208200974404 /* Build configuration list for PBXNativeTarget "LinphoneTester" */;
......@@ -3642,6 +3694,7 @@
F0BB8BD11936208100974404 /* Sources */,
F0BB8BD21936208100974404 /* Frameworks */,
F0BB8BD31936208100974404 /* Resources */,
F08F11A219C0AC2F007D70C2 /* ShellScript */,
);
buildRules = (
);
......@@ -3666,6 +3719,9 @@
22D8F11D147548E2008C97DB = {
DevelopmentTeam = Z2V957B3D6;
};
F08F118319C09C6A007D70C2 = {
TestTargetID = F0BB8BD41936208100974404;
};
F0BB8BD41936208100974404 = {
DevelopmentTeam = Z2V957B3D6;
};
......@@ -3702,6 +3758,7 @@
1D6058900D05DD3D006BFB54 /* linphone */,
22D8F11D147548E2008C97DB /* linphone-no-gpl-thirdparties */,
F0BB8BD41936208100974404 /* LinphoneTester */,
F08F118319C09C6A007D70C2 /* LinphoneTester Tests */,
);
};
/* End PBXProject section */
......@@ -4816,16 +4873,24 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
F08F118219C09C6A007D70C2 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F08F119A19C09D88007D70C2 /* flexisip in Resources */,
F08F118D19C09C6B007D70C2 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
F0BB8BD31936208100974404 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F0BB8C3819362C1500974404 /* rcfiles in Resources */,
F84015C11939FE37006ABAB5 /* test_passed.png in Resources */,
F0BB8C44193630CA00974404 /* flexisip.conf in Resources */,
F08F119919C09D88007D70C2 /* flexisip in Resources */,
F0BB8C46193630CA00974404 /* marie_xml in Resources */,
F0BB8BEA1936208200974404 /* Main_iPad.storyboard in Resources */,
F0BB8C48193630CA00974404 /* userdb.conf in Resources */,
F0BB8C3E19362C2200974404 /* sounds in Resources */,
F84015BF1939FE37006ABAB5 /* test_failed.png in Resources */,
F0BB8BF21936208200974404 /* Images.xcassets in Resources */,
......@@ -4868,6 +4933,19 @@
shellPath = /bin/sh;
shellScript = $SRCROOT/ImageOptim.sh;
};
F08F11A219C0AC2F007D70C2 /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 12;
files = (
);
inputPaths = (