C++ Testing Script

This commit is contained in:
Chris Teubert
2014-11-28 10:06:07 -08:00
parent e36dcbb693
commit 6e05c4fe32
11 changed files with 942 additions and 0 deletions

View File

@@ -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 = "<group>"; };
BE9C6BB01A253FA100EBE08A /* XPC_Tests.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = XPC_Tests.1; sourceTree = "<group>"; };
BE9C6BB71A25402300EBE08A /* xplaneConnect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = xplaneConnect.c; path = ../../C/src/xplaneConnect.c; sourceTree = "<group>"; };
BE9C6BB81A25402300EBE08A /* xplaneConnect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = xplaneConnect.h; path = ../../C/src/xplaneConnect.h; sourceTree = "<group>"; };
/* 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 = "<group>";
};
BE9C6BAC1A253FA100EBE08A /* Products */ = {
isa = PBXGroup;
children = (
BE9C6BAB1A253FA100EBE08A /* Cpp Tests */,
);
name = Products;
sourceTree = "<group>";
};
BE9C6BAD1A253FA100EBE08A /* Cpp Tests */ = {
isa = PBXGroup;
children = (
BE9C6BAE1A253FA100EBE08A /* main.cpp */,
BE9C6BB01A253FA100EBE08A /* XPC_Tests.1 */,
);
name = "Cpp Tests";
path = "XPC Tests";
sourceTree = "<group>";
};
/* 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 */;
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:Cpp Tests.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,41 @@
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
<false/>
<key>IDESourceControlProjectIdentifier</key>
<string>416D1A24-40F3-4397-8D94-7BF209A1B094</string>
<key>IDESourceControlProjectName</key>
<string>Cpp Tests</string>
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>C03F0B00-9A73-4E8C-88E5-1BC53A92AE34</key>
<string>https://github.com/nasa/XPlaneConnect.git</string>
</dict>
<key>IDESourceControlProjectPath</key>
<string>TestScripts/XPC Tests/Cpp Tests.xcodeproj/project.xcworkspace</string>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>C03F0B00-9A73-4E8C-88E5-1BC53A92AE34</key>
<string>../../../..</string>
</dict>
<key>IDESourceControlProjectURL</key>
<string>https://github.com/nasa/XPlaneConnect.git</string>
<key>IDESourceControlProjectVersion</key>
<integer>110</integer>
<key>IDESourceControlProjectWCCIdentifier</key>
<string>C03F0B00-9A73-4E8C-88E5-1BC53A92AE34</string>
<key>IDESourceControlProjectWCConfigurations</key>
<array>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>C03F0B00-9A73-4E8C-88E5-1BC53A92AE34</string>
<key>IDESourceControlWCCName</key>
<string>XPlaneConnect</string>
</dict>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,41 @@
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
<false/>
<key>IDESourceControlProjectIdentifier</key>
<string>4A17B3D8-572A-4F80-980D-4FB2F0EF3BB4</string>
<key>IDESourceControlProjectName</key>
<string>XPC Tests</string>
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>5FCAB004-C765-4A77-A8FD-03E66A1CDF6C</key>
<string>https://github.com/nasa/XPlaneConnect.git</string>
</dict>
<key>IDESourceControlProjectPath</key>
<string>TestScripts/XPC Tests/XPC Tests.xcodeproj/project.xcworkspace</string>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>5FCAB004-C765-4A77-A8FD-03E66A1CDF6C</key>
<string>../../../..</string>
</dict>
<key>IDESourceControlProjectURL</key>
<string>https://github.com/nasa/XPlaneConnect.git</string>
<key>IDESourceControlProjectVersion</key>
<integer>110</integer>
<key>IDESourceControlProjectWCCIdentifier</key>
<string>5FCAB004-C765-4A77-A8FD-03E66A1CDF6C</string>
<key>IDESourceControlProjectWCConfigurations</key>
<array>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>5FCAB004-C765-4A77-A8FD-03E66A1CDF6C</string>
<key>IDESourceControlWCCName</key>
<string>XPlaneConnect</string>
</dict>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,10 @@
<?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>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
<true/>
<key>SnapshotAutomaticallyBeforeSignificantChanges</key>
<true/>
</dict>
</plist>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
</Bucket>

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0500"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BE9C6BAA1A253FA100EBE08A"
BuildableName = "Cpp Tests"
BlueprintName = "Cpp Tests"
ReferencedContainer = "container:Cpp Tests.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BE9C6BAA1A253FA100EBE08A"
BuildableName = "Cpp Tests"
BlueprintName = "Cpp Tests"
ReferencedContainer = "container:Cpp Tests.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BE9C6BAA1A253FA100EBE08A"
BuildableName = "Cpp Tests"
BlueprintName = "Cpp Tests"
ReferencedContainer = "container:Cpp Tests.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "BE9C6BAA1A253FA100EBE08A"
BuildableName = "Cpp Tests"
BlueprintName = "Cpp Tests"
ReferencedContainer = "container:Cpp Tests.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -0,0 +1,22 @@
<?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>SchemeUserState</key>
<dict>
<key>XPC Tests.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>BE9C6BAA1A253FA100EBE08A</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@@ -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

View File

@@ -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 <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <exception>
#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;
}