diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.pbxproj b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.pbxproj new file mode 100644 index 0000000..76a109f --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.pbxproj @@ -0,0 +1,241 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + BE9C6BAF1A253FA100EBE08A /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BE9C6BAE1A253FA100EBE08A /* main.cpp */; }; + BE9C6BB11A253FA100EBE08A /* XPC_Tests.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = BE9C6BB01A253FA100EBE08A /* XPC_Tests.1 */; }; + BE9C6BB91A25402300EBE08A /* xplaneConnect.c in Sources */ = {isa = PBXBuildFile; fileRef = BE9C6BB71A25402300EBE08A /* xplaneConnect.c */; }; + BE9C6BBA1A25402300EBE08A /* xplaneConnect.h in Sources */ = {isa = PBXBuildFile; fileRef = BE9C6BB81A25402300EBE08A /* xplaneConnect.h */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + BE9C6BA91A253FA100EBE08A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + BE9C6BB11A253FA100EBE08A /* XPC_Tests.1 in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + BE9C6BAB1A253FA100EBE08A /* Cpp Tests */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Cpp Tests"; sourceTree = BUILT_PRODUCTS_DIR; }; + BE9C6BAE1A253FA100EBE08A /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; + BE9C6BB01A253FA100EBE08A /* XPC_Tests.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = XPC_Tests.1; sourceTree = ""; }; + BE9C6BB71A25402300EBE08A /* xplaneConnect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = xplaneConnect.c; path = ../../C/src/xplaneConnect.c; sourceTree = ""; }; + BE9C6BB81A25402300EBE08A /* xplaneConnect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xplaneConnect.h; path = ../../C/src/xplaneConnect.h; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BE9C6BA81A253FA100EBE08A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BE9C6BA21A253FA100EBE08A = { + isa = PBXGroup; + children = ( + BE9C6BB71A25402300EBE08A /* xplaneConnect.c */, + BE9C6BB81A25402300EBE08A /* xplaneConnect.h */, + BE9C6BAD1A253FA100EBE08A /* Cpp Tests */, + BE9C6BAC1A253FA100EBE08A /* Products */, + ); + sourceTree = ""; + }; + BE9C6BAC1A253FA100EBE08A /* Products */ = { + isa = PBXGroup; + children = ( + BE9C6BAB1A253FA100EBE08A /* Cpp Tests */, + ); + name = Products; + sourceTree = ""; + }; + BE9C6BAD1A253FA100EBE08A /* Cpp Tests */ = { + isa = PBXGroup; + children = ( + BE9C6BAE1A253FA100EBE08A /* main.cpp */, + BE9C6BB01A253FA100EBE08A /* XPC_Tests.1 */, + ); + name = "Cpp Tests"; + path = "XPC Tests"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BE9C6BAA1A253FA100EBE08A /* Cpp Tests */ = { + isa = PBXNativeTarget; + buildConfigurationList = BE9C6BB41A253FA100EBE08A /* Build configuration list for PBXNativeTarget "Cpp Tests" */; + buildPhases = ( + BE9C6BA71A253FA100EBE08A /* Sources */, + BE9C6BA81A253FA100EBE08A /* Frameworks */, + BE9C6BA91A253FA100EBE08A /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Cpp Tests"; + productName = "XPC Tests"; + productReference = BE9C6BAB1A253FA100EBE08A /* Cpp Tests */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BE9C6BA31A253FA100EBE08A /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + ORGANIZATIONNAME = "Chris Teubert"; + }; + buildConfigurationList = BE9C6BA61A253FA100EBE08A /* Build configuration list for PBXProject "Cpp Tests" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = BE9C6BA21A253FA100EBE08A; + productRefGroup = BE9C6BAC1A253FA100EBE08A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BE9C6BAA1A253FA100EBE08A /* Cpp Tests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + BE9C6BA71A253FA100EBE08A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BE9C6BB91A25402300EBE08A /* xplaneConnect.c in Sources */, + BE9C6BBA1A25402300EBE08A /* xplaneConnect.h in Sources */, + BE9C6BAF1A253FA100EBE08A /* main.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + BE9C6BB21A253FA100EBE08A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + BE9C6BB31A253FA100EBE08A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + SDKROOT = macosx; + }; + name = Release; + }; + BE9C6BB51A253FA100EBE08A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "Cpp Tests"; + }; + name = Debug; + }; + BE9C6BB61A253FA100EBE08A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "Cpp Tests"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BE9C6BA61A253FA100EBE08A /* Build configuration list for PBXProject "Cpp Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE9C6BB21A253FA100EBE08A /* Debug */, + BE9C6BB31A253FA100EBE08A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BE9C6BB41A253FA100EBE08A /* Build configuration list for PBXNativeTarget "Cpp Tests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BE9C6BB51A253FA100EBE08A /* Debug */, + BE9C6BB61A253FA100EBE08A /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = BE9C6BA31A253FA100EBE08A /* Project object */; +} diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..f48beca --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcshareddata/Cpp Tests.xccheckout b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcshareddata/Cpp Tests.xccheckout new file mode 100644 index 0000000..b441f49 --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcshareddata/Cpp Tests.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 416D1A24-40F3-4397-8D94-7BF209A1B094 + IDESourceControlProjectName + Cpp Tests + IDESourceControlProjectOriginsDictionary + + C03F0B00-9A73-4E8C-88E5-1BC53A92AE34 + https://github.com/nasa/XPlaneConnect.git + + IDESourceControlProjectPath + TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + C03F0B00-9A73-4E8C-88E5-1BC53A92AE34 + ../../../.. + + IDESourceControlProjectURL + https://github.com/nasa/XPlaneConnect.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + C03F0B00-9A73-4E8C-88E5-1BC53A92AE34 + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + C03F0B00-9A73-4E8C-88E5-1BC53A92AE34 + IDESourceControlWCCName + XPlaneConnect + + + + diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcshareddata/XPC Tests.xccheckout b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcshareddata/XPC Tests.xccheckout new file mode 100644 index 0000000..86d7304 --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcshareddata/XPC Tests.xccheckout @@ -0,0 +1,41 @@ + + + + + IDESourceControlProjectFavoriteDictionaryKey + + IDESourceControlProjectIdentifier + 4A17B3D8-572A-4F80-980D-4FB2F0EF3BB4 + IDESourceControlProjectName + XPC Tests + IDESourceControlProjectOriginsDictionary + + 5FCAB004-C765-4A77-A8FD-03E66A1CDF6C + https://github.com/nasa/XPlaneConnect.git + + IDESourceControlProjectPath + TestScripts/XPC Tests/XPC Tests.xcodeproj/project.xcworkspace + IDESourceControlProjectRelativeInstallPathDictionary + + 5FCAB004-C765-4A77-A8FD-03E66A1CDF6C + ../../../.. + + IDESourceControlProjectURL + https://github.com/nasa/XPlaneConnect.git + IDESourceControlProjectVersion + 110 + IDESourceControlProjectWCCIdentifier + 5FCAB004-C765-4A77-A8FD-03E66A1CDF6C + IDESourceControlProjectWCConfigurations + + + IDESourceControlRepositoryExtensionIdentifierKey + public.vcs.git + IDESourceControlWCCIdentifierKey + 5FCAB004-C765-4A77-A8FD-03E66A1CDF6C + IDESourceControlWCCName + XPlaneConnect + + + + diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcuserdata/cteubert.xcuserdatad/UserInterfaceState.xcuserstate b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcuserdata/cteubert.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..537c12f Binary files /dev/null and b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcuserdata/cteubert.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcuserdata/cteubert.xcuserdatad/WorkspaceSettings.xcsettings b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcuserdata/cteubert.xcuserdatad/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..659c876 --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace/xcuserdata/cteubert.xcuserdatad/WorkspaceSettings.xcsettings @@ -0,0 +1,10 @@ + + + + + HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges + + SnapshotAutomaticallyBeforeSignificantChanges + + + diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcschemes/XPC Tests.xcscheme b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcschemes/XPC Tests.xcscheme new file mode 100644 index 0000000..294af46 --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcschemes/XPC Tests.xcscheme @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcschemes/xcschememanagement.plist b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..e8d4ac3 --- /dev/null +++ b/TestScripts/XPC Tests/Cpp Tests.xcodeproj/xcuserdata/cteubert.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + XPC Tests.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + BE9C6BAA1A253FA100EBE08A + + primary + + + + + diff --git a/TestScripts/XPC Tests/XPC Tests/XPC_Tests.1 b/TestScripts/XPC Tests/XPC Tests/XPC_Tests.1 new file mode 100644 index 0000000..6b6d039 --- /dev/null +++ b/TestScripts/XPC Tests/XPC Tests/XPC_Tests.1 @@ -0,0 +1,79 @@ +.\"Modified from man(1) of FreeBSD, the NetBSD mdoc.template, and mdoc.samples. +.\"See Also: +.\"man mdoc.samples for a complete listing of options +.\"man mdoc for the short list of editing options +.\"/usr/share/misc/mdoc.template +.Dd 11/25/14 \" DATE +.Dt XPC Tests 1 \" Program name and manual section number +.Os Darwin +.Sh NAME \" Section Header - required - don't modify +.Nm XPC Tests, +.\" The following lines are read in generating the apropos(man -k) database. Use only key +.\" words here as the database is built based on the words here and in the .ND line. +.Nm Other_name_for_same_program(), +.Nm Yet another name for the same program. +.\" Use .Nm macro to designate other names for the documented program. +.Nd This line parsed for whatis database. +.Sh SYNOPSIS \" Section Header - required - don't modify +.Nm +.Op Fl abcd \" [-abcd] +.Op Fl a Ar path \" [-a path] +.Op Ar file \" [file] +.Op Ar \" [file ...] +.Ar arg0 \" Underlined argument - use .Ar anywhere to underline +arg2 ... \" Arguments +.Sh DESCRIPTION \" Section Header - required - don't modify +Use the .Nm macro to refer to your program throughout the man page like such: +.Nm +Underlining is accomplished with the .Ar macro like this: +.Ar underlined text . +.Pp \" Inserts a space +A list of items with descriptions: +.Bl -tag -width -indent \" Begins a tagged list +.It item a \" Each item preceded by .It macro +Description of item a +.It item b +Description of item b +.El \" Ends the list +.Pp +A list of flags and their descriptions: +.Bl -tag -width -indent \" Differs from above in tag removed +.It Fl a \"-a flag as a list item +Description of -a flag +.It Fl b +Description of -b flag +.El \" Ends the list +.Pp +.\" .Sh ENVIRONMENT \" May not be needed +.\" .Bl -tag -width "ENV_VAR_1" -indent \" ENV_VAR_1 is width of the string ENV_VAR_1 +.\" .It Ev ENV_VAR_1 +.\" Description of ENV_VAR_1 +.\" .It Ev ENV_VAR_2 +.\" Description of ENV_VAR_2 +.\" .El +.Sh FILES \" File used or created by the topic of the man page +.Bl -tag -width "/Users/joeuser/Library/really_long_file_name" -compact +.It Pa /usr/share/file_name +FILE_1 description +.It Pa /Users/joeuser/Library/really_long_file_name +FILE_2 description +.El \" Ends the list +.\" .Sh DIAGNOSTICS \" May not be needed +.\" .Bl -diag +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .It Diagnostic Tag +.\" Diagnostic informtion here. +.\" .El +.Sh SEE ALSO +.\" List links in ascending order by section, alphabetically within a section. +.\" Please do not reference files that do not exist without filing a bug report +.Xr a 1 , +.Xr b 1 , +.Xr c 1 , +.Xr a 2 , +.Xr b 2 , +.Xr a 3 , +.Xr b 3 +.\" .Sh BUGS \" Document known, unremedied bugs +.\" .Sh HISTORY \" Document history if command behaves in a unique manner \ No newline at end of file diff --git a/TestScripts/XPC Tests/XPC Tests/main.cpp b/TestScripts/XPC Tests/XPC Tests/main.cpp new file mode 100644 index 0000000..7c756f3 --- /dev/null +++ b/TestScripts/XPC Tests/XPC Tests/main.cpp @@ -0,0 +1,410 @@ +// +// main.cpp +// XPC Tests +// +// Created by Chris Teubert on 11/25/14. +// Copyright (c) 2014 Chris Teubert. All rights reserved. +// + +#include +#include +#include +#include +#include +#include "xplaneconnect.h" + +int testFailed = 0; +int testPassed = 0; + +void runTest(void (*f)()) +{ + try { + std::cout << "Test " << testPassed+testFailed+1<<": "; + (*f)(); // Run Test + std::cout << "PASSED\n"; + testPassed++; + } + catch (int i) + { + std::cerr << "FAILED\n\tError: " << i << std::endl; + testFailed++; + } + catch (char c) + { + std::cerr << "FAILED\n\tError: " << c << std::endl; + testFailed++; + } + +} + +void test1() // openUDP Test +{ + std::cout << "openUDP - "; + struct xpcSocket sendPort = openUDP( 49062, "127.0.0.1", 49009 ); +} + +void test2() // closeUDP test +{ + std::cout << "closeUDP - "; + struct xpcSocket sendPort = openUDP( 49063, "127.0.0.1", 49009 ); + closeUDP(sendPort); +} + +void test3() // send/read Test +{ + std::cout << "send/readUDP - "; + + // Initialization + int i; // Iterator + char test[] = {0, 1, 2, 3}; + char buf[5] = {0}; + struct xpcSocket sendPort, recvPort; + + // Setup + sendPort = openUDP( 49064, "127.0.0.1", 49063 ); + recvPort = openUDP( 49063, "127.0.0.1", 49009 ); + + // Execution + sendUDP( sendPort, test, sizeof(test) ); + readUDP( recvPort, buf, NULL ); // Test + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Tests + for (i=0; i<4; i++) + { + if (test[i] != buf[i]) // Not received correctly + { + throw 1; + } + } + +} + +void test4() // Request DREF Test (Required for next tests) +{ + std::cout << "requestDREF - "; + + // Initialization + int i; // Iterator + char DREFArray[100][100]; + float *recDATA[100]; + short DREFSizes[100]; + struct xpcSocket sendPort, recvPort; + short result = 0; + + // Setup + for (i = 0; i < 100; i++) { + recDATA[i] = (float *) malloc(40*sizeof(float)); + memset(DREFArray[i],0,100); + } + sendPort = openUDP( 49064, "127.0.0.1", 49009 ); + recvPort = openUDP( 49008, "127.0.0.1", 49009 ); + strcpy(DREFArray[0],"sim/cockpit/switches/gear_handle_status"); + strcpy(DREFArray[1],"cockpit2/switches/panel_brightness_ratio"); + for (i=0;i<2;i++) { + DREFSizes[i] = (int) strlen(DREFArray[i]); + } + + // Execution + result = requestDREF(sendPort, recvPort, DREFArray, DREFSizes, 2, recDATA, DREFSizes); + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Tests + if ( result < 0)// Request 2 values + { + throw 1; + } + if (DREFSizes[0] != 1 || DREFSizes[1] != 4) + { + throw 2; + } +} + +void test5() // sendDREF test +{ + std::cout << "sendDREF - "; + + // Initialization + int i; // Iterator + char DREFArray[100][100]; + float *recDATA[100]; + short DREFSizes[100]; + float value = 0.0; + struct xpcSocket sendPort, recvPort; + short result = 0; + + // Setup + for (i = 0; i < 100; i++) { + recDATA[i] = (float *) malloc(40*sizeof(float)); + memset(DREFArray[i],0,100); + } + sendPort = openUDP( 49066, "127.0.0.1", 49009 ); + recvPort = openUDP( 49008, "127.0.0.1", 49009 ); + strcpy(DREFArray[0],"sim/cockpit/switches/gear_handle_status"); + for (i=0;i<1;i++) { + DREFSizes[i] = (int) strlen(DREFArray[i]); + } + + // Execution + sendDREF(sendPort, DREFArray[0], DREFSizes[0], &value, 1); + result = requestDREF(sendPort, recvPort, DREFArray, DREFSizes, 1, recDATA, DREFSizes); + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Tests + if (result < 0)// Request 1 value + { + throw 1; + } + if (DREFSizes[0] != 1) + { + throw 2; + } + if (*recDATA[0] != value) + { + throw 3; + } +} + +void test6() // sendDATA test +{ + std::cout << "sendData - "; + + // Initialize + int i,j; // Iterator + char DREFArray[100][100]; + float data[4][9] = {0}; + float *recDATA[100]; + short DREFSizes[100]; + struct xpcSocket sendPort, recvPort; + short result = 0; + + // Setup + for (i = 0; i < 100; i++) { + recDATA[i] = (float *) malloc(40*sizeof(float)); + memset(DREFArray[i],0,100); + } + sendPort = openUDP( 49066, "127.0.0.1", 49009 ); + recvPort = openUDP( 49008, "127.0.0.1", 49009 ); + strcpy(DREFArray[0],"sim/aircraft/parts/acf_gear_deploy"); + for (i=0;i<1;i++) { + DREFSizes[i] = (int) strlen(DREFArray[i]); + } + for (i=0;i<4;i++) { // Set array to -999 + for (j=0;j<9;j++) data[i][j] = -999; + } + data[0][0] = 14; // Gear + data[0][1] = 1; + data[0][2] = 0; + + // Execution + sendDATA(sendPort, data, 1); // Gear + result = requestDREF(sendPort, recvPort, DREFArray, DREFSizes, 1, recDATA, DREFSizes); // Test + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Tests + if ( result < 0 )// Request 1 value + { + throw 1; + } + if (DREFSizes[0] != 10) + { + throw 2; + } + if (*recDATA[0] != data[0][1]) + { + throw 3; + } +} + +void test7() // sendCTRL test +{ + std::cout << "sendCTRL - "; + + // Initialize + int i; // Iterator + char DREFArray[100][100]; + float CTRL[5] = {0.0}; + float *recDATA[100]; + short DREFSizes[100]; + struct xpcSocket sendPort, recvPort; + + // Setup + for (i = 0; i < 100; i++) { + recDATA[i] = (float *) malloc(40*sizeof(float)); + memset(DREFArray[i],0,100); + } + sendPort = openUDP( 49067, "127.0.0.1", 49009 ); + recvPort = openUDP( 49008, "127.0.0.1", 49009 ); + strcpy(DREFArray[0],"sim/cockpit/switches/gear_handle_status"); + for (i=0;i<1;i++) { + DREFSizes[i] = (int) strlen(DREFArray[i]); + } + CTRL[3] = 0.8; // Throttle + + // Execute + sendCTRL(sendPort, 4, CTRL); + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Test + +// if (requestDREF(sendPort, recvPort, DREFArray, DREFSizes, 1, recDATA, DREFSizes) < 0)// Request 1 value +// { +// throw 1; +// } +// if (DREFSizes[0] != 1) +// { +// throw 2; +// } +// if (*recDATA[0] != value) +// { +// throw 3; +// } +} + +void test8() // sendPOSI test +{ + std::cout << "sendPOSI - "; + + // Initialization + int i; // Iterator + char DREFArray[100][100]; + float POSI[8] = {0.0}; + float *recDATA[100]; + short DREFSizes[100]; + struct xpcSocket sendPort, recvPort; + + // Setup + for (i = 0; i < 100; i++) { + recDATA[i] = (float *) malloc(40*sizeof(float)); + memset(DREFArray[i],0,100); + } + sendPort = openUDP( 49067, "127.0.0.1", 49009 ); + recvPort = openUDP( 49008, "127.0.0.1", 49009 ); + strcpy(DREFArray[0],"sim/cockpit/switches/gear_handle_status"); + for (i=0;i<1;i++) { + DREFSizes[i] = (int) strlen(DREFArray[i]); + } + POSI[0] = 37.524; // Lat + POSI[1] = -122.06899; // Lon + POSI[2] = 2500; // Alt + POSI[3] = 0; // Pitch + POSI[4] = 0; // Roll + POSI[5] = 0; // Heading + POSI[6] = 1; // Gear + + // Execution + sendPOSI( sendPort, 0, 7, POSI ); + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Test +} + +void test9() // pauseSim test +{ + std::cout << "pauseSim - "; + + // Initialize + struct xpcSocket sendPort, recvPort; + + // Setup + sendPort = openUDP( 49067, "127.0.0.1", 49009 ); + recvPort = openUDP( 49008, "127.0.0.1", 49009 ); + + // Execute + pauseSim(sendPort, 1); + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Test +} + +void test10() // setConn test +{ + std::cout << "setConn - "; + + // Initialize + int i; // Iterator + char DREFArray[100][100]; + float *recDATA[100]; + short DREFSizes[100]; + struct xpcSocket sendPort, recvPort; + short result = 0; + usleep(0); + + // Setup + sendPort = openUDP( 49067, "127.0.0.1", 49009 ); + recvPort = openUDP( 49055, "127.0.0.1", 49009 ); + strcpy(DREFArray[0],"sim/cockpit/switches/gear_handle_status"); + for (i=0;i<1;i++) { + DREFSizes[i] = (int) strlen(DREFArray[i]); + } + + // Execution + setCONN(sendPort, 49055); + result = requestDREF(sendPort, recvPort, DREFArray, DREFSizes, 1, recDATA, DREFSizes); // Test + + // Close + closeUDP(sendPort); + closeUDP(recvPort); + + // Test + if ( result < 0 )// No data received + { + throw 1; + } + + + // Set up for next test + sendPort = openUDP( 49067, "127.0.0.1", 49009 ); + setCONN(sendPort, 49009); + closeUDP(sendPort); +} + +int main(int argc, const char * argv[]) +{ + std::cout << "XPC Tests-cpp "; + +#ifdef _WIN32 + std::cout << "(Windows)\n"; +#elif (__APPLE__) + std::cout << "(Mac) \n"; +#elif (__linux) + std::cout << "(Linux) \n"; +#endif + + runTest(test1); + runTest(test2); + runTest(test3); + runTest(test4); + runTest(test5); + runTest(test6); + runTest(test7); + runTest(test8); + runTest(test9); + runTest(test10); + + std::cout << "----------------\nTest Summary\n\tFailed: " << testFailed << "\n\tPassed: " << testPassed << std::endl; + + return 0; +} +