This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  ef88ba3fe1f16d8663109eb77b1931a3fedba443 (commit)
       via  3e99af4494665fae90e08cf383eda8a5722e17cd (commit)
       via  ce5ecc52eb22a4745d46efebd00efbccf2b3507e (commit)
       via  36fefe29966b33505d9d4abbc4df7c41ea103e40 (commit)
       via  7b9453f8d22753bcd47204cdc5021de351d3d2f8 (commit)
       via  54a5cdbb4c35aa8847d3eb0f7f418fad72563992 (commit)
       via  380db3de00bd74f01781ea93e9ba9cebdea000cc (commit)
      from  e8d6f02cf4aa532f9a67d143c3f09d4f3f085119 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ef88ba3fe1f16d8663109eb77b1931a3fedba443
commit ef88ba3fe1f16d8663109eb77b1931a3fedba443
Merge: e8d6f02 3e99af4
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Wed Mar 18 10:49:55 2015 -0400
Commit:     CMake Topic Stage <kwro...@kitware.com>
CommitDate: Wed Mar 18 10:49:55 2015 -0400

    Merge topic 'xcode-xctest' into next
    
    3e99af44 Help: Add notes for topic 'xcode-xctest'
    ce5ecc52 Tests: Add XCTest example to test Frameworks and Cocoa App Bundles
    36fefe29 OS X: Add FindXCTest module
    7b9453f8 OS X: Add handling for XCTest bundles
    54a5cdbb Tests: Compute Xcode version for any generator on OS X
    380db3de CMake Nightly Date Stamp


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3e99af4494665fae90e08cf383eda8a5722e17cd
commit 3e99af4494665fae90e08cf383eda8a5722e17cd
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Fri Feb 27 09:09:25 2015 -0500
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Wed Mar 18 15:36:07 2015 +0100

    Help: Add notes for topic 'xcode-xctest'

diff --git a/Help/release/dev/xcode-xctest.rst 
b/Help/release/dev/xcode-xctest.rst
new file mode 100644
index 0000000..7a2f07b
--- /dev/null
+++ b/Help/release/dev/xcode-xctest.rst
@@ -0,0 +1,6 @@
+xcode-xctest
+------------
+
+* On OS X, CMake learned to create XCTest bundles to test Frameworks
+  and App Bundles within Xcode.  The :module:`FindXCTest` module
+  provides convenience functions to handle :prop_tgt:`XCTEST` bundles.

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ce5ecc52eb22a4745d46efebd00efbccf2b3507e
commit ce5ecc52eb22a4745d46efebd00efbccf2b3507e
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Thu Feb 26 21:55:46 2015 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Wed Mar 18 15:36:06 2015 +0100

    Tests: Add XCTest example to test Frameworks and Cocoa App Bundles
    
    Signed-off-by: Gregor Jasny <gja...@googlemail.com>

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 765fc80..71cdb0f 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -1505,6 +1505,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P 
${CMake_SOURCE_DIR}/Utilities/Release
       )
   endif()
 
+  if(CMake_TEST_XCODE_VERSION AND NOT CMake_TEST_XCODE_VERSION VERSION_LESS 5)
+    ADD_TEST_MACRO(XCTest ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> -V)
+  endif()
+
   add_test(linkorder1 ${CMAKE_CTEST_COMMAND}
     --build-and-test
     "${CMake_SOURCE_DIR}/Tests/LinkLineOrder"
diff --git a/Tests/XCTest/CMakeLists.txt b/Tests/XCTest/CMakeLists.txt
new file mode 100644
index 0000000..e866623
--- /dev/null
+++ b/Tests/XCTest/CMakeLists.txt
@@ -0,0 +1,57 @@
+cmake_minimum_required(VERSION 3.1)
+project(XCTest)
+enable_testing()
+
+find_package(XCTest REQUIRED)
+
+# Framework
+
+add_library(FrameworkExample SHARED
+  FrameworkExample/FrameworkExample.c
+  FrameworkExample/FrameworkExample.h
+  FrameworkExample/Info.plist)
+
+target_include_directories(FrameworkExample PUBLIC .)
+
+set_target_properties(FrameworkExample PROPERTIES
+  FRAMEWORK TRUE
+  VERSION "1.0.0"
+  SOVERSION "1.0.0"
+  FRAMEWORK_VERSION "A"
+  MACOSX_FRAMEWORK_INFO_PLIST 
${CMAKE_CURRENT_SOURCE_DIR}/FrameworkExample/Info.plist
+  PUBLIC_HEADER FrameworkExample/FrameworkExample.h)
+
+# XCTest for Framework
+
+xctest_add_bundle(FrameworkExampleTests FrameworkExample
+  FrameworkExampleTests/FrameworkExampleTests.m
+  FrameworkExampleTests/Info.plist)
+
+set_target_properties(FrameworkExampleTests PROPERTIES
+  MACOSX_BUNDLE_INFO_PLIST 
${CMAKE_CURRENT_SOURCE_DIR}/FrameworkExampleTests/Info.plist
+  )
+
+xctest_add_test(XCTest.FrameworkExample FrameworkExampleTests)
+
+# Cocoa App Bundle
+
+add_executable(CocoaExample MACOSX_BUNDLE
+  CocoaExample/main.m
+  CocoaExample/AppDelegate.m
+  CocoaExample/AppDelegate.h
+  CocoaExample/MainMenu.xib
+)
+
+target_link_libraries(CocoaExample PRIVATE "-framework Foundation")
+target_link_libraries(CocoaExample PRIVATE "-framework AppKit")
+
+set_target_properties(CocoaExample PROPERTIES
+  MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/CocoaExample/Info.plist
+  RESOURCE "CocoaExample/MainMenu.xib")
+
+# XCTest for Cocoa App Bundle
+
+xctest_add_bundle(CocoaExampleTests CocoaExample
+  CocoaExampleTests/CocoaExampleTests.m)
+
+xctest_add_test(XCTest.CocoaExample CocoaExampleTests)
diff --git a/Tests/XCTest/CocoaExample/AppDelegate.h 
b/Tests/XCTest/CocoaExample/AppDelegate.h
new file mode 100644
index 0000000..4bf4101
--- /dev/null
+++ b/Tests/XCTest/CocoaExample/AppDelegate.h
@@ -0,0 +1,6 @@
+#import <Cocoa/Cocoa.h>
+
+@interface AppDelegate : NSObject <NSApplicationDelegate>
+
+
+@end
diff --git a/Tests/XCTest/CocoaExample/AppDelegate.m 
b/Tests/XCTest/CocoaExample/AppDelegate.m
new file mode 100644
index 0000000..07af62f
--- /dev/null
+++ b/Tests/XCTest/CocoaExample/AppDelegate.m
@@ -0,0 +1,18 @@
+#import "AppDelegate.h"
+
+@interface AppDelegate ()
+
+@property (assign) IBOutlet NSWindow *window;
+@end
+
+@implementation AppDelegate
+
+- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
+    // Insert code here to initialize your application
+}
+
+- (void)applicationWillTerminate:(NSNotification *)aNotification {
+    // Insert code here to tear down your application
+}
+
+@end
diff --git a/Tests/XCTest/CocoaExample/Info.plist 
b/Tests/XCTest/CocoaExample/Info.plist
new file mode 100644
index 0000000..5267c63
--- /dev/null
+++ b/Tests/XCTest/CocoaExample/Info.plist
@@ -0,0 +1,30 @@
+<?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>CFBundleExecutable</key>
+       <string>CocoaExample</string>
+       <key>CFBundleIconFile</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>org.cmake.CocoaExample</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>CocoaExample</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1</string>
+       <key>NSMainNibFile</key>
+       <string>MainMenu</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/Tests/XCTest/CocoaExample/MainMenu.xib 
b/Tests/XCTest/CocoaExample/MainMenu.xib
new file mode 100644
index 0000000..9498a0a
--- /dev/null
+++ b/Tests/XCTest/CocoaExample/MainMenu.xib
@@ -0,0 +1,680 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" 
toolsVersion="6233" systemVersion="14A329f" targetRuntime="MacOSX.Cocoa" 
propertyAccessControl="none" useAutolayout="YES" 
customObjectInstantitationMethod="direct">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" 
version="6233"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" 
customClass="NSApplication">
+            <connections>
+                <outlet property="delegate" destination="Voe-Tx-rLC" 
id="GzC-gU-4Uq"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" 
customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customObject id="Voe-Tx-rLC" customClass="AppDelegate" 
customModuleProvider="">
+            <connections>
+                <outlet property="window" destination="QvC-M9-y7g" 
id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="YLy-65-1bz" customClass="NSFontManager"/>
+        <menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
+            <items>
+                <menuItem title="CocoaExample" id="1Xt-HY-uBw">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="CocoaExample" 
systemMenu="apple" id="uQy-DD-JDr">
+                        <items>
+                            <menuItem title="About CocoaExample" 
id="5kV-Vb-QxS">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action 
selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
+                            <menuItem title="Preferences…" keyEquivalent="," 
id="BOF-NM-1cW"/>
+                            <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
+                            <menuItem title="Services" id="NMo-om-nkz">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Services" 
systemMenu="services" id="hz9-B4-Xy5"/>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
+                            <menuItem title="Hide CocoaExample" 
keyEquivalent="h" id="Olw-nP-bQN">
+                                <connections>
+                                    <action selector="hide:" target="-1" 
id="PnN-Uc-m68"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Hide Others" keyEquivalent="h" 
id="Vdr-fp-XzO">
+                                <modifierMask key="keyEquivalentModifierMask" 
option="YES" command="YES"/>
+                                <connections>
+                                    <action selector="hideOtherApplications:" 
target="-1" id="VT4-aY-XCT"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Show All" id="Kd2-mp-pUS">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="unhideAllApplications:" 
target="-1" id="Dhg-Le-xox"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
+                            <menuItem title="Quit CocoaExample" 
keyEquivalent="q" id="4sb-4s-VLi">
+                                <connections>
+                                    <action selector="terminate:" target="-1" 
id="Te7-pn-YzF"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="File" id="dMs-cI-mzQ">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="File" id="bib-Uj-vzu">
+                        <items>
+                            <menuItem title="New" keyEquivalent="n" 
id="Was-JA-tGl">
+                                <connections>
+                                    <action selector="newDocument:" 
target="-1" id="4Si-XN-c54"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Open…" keyEquivalent="o" 
id="IAo-SY-fd9">
+                                <connections>
+                                    <action selector="openDocument:" 
target="-1" id="bVn-NM-KNZ"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Open Recent" id="tXI-mr-wws">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Open Recent" 
systemMenu="recentDocuments" id="oas-Oc-fiZ">
+                                    <items>
+                                        <menuItem title="Clear Menu" 
id="vNY-rz-j42">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
+                            <menuItem title="Close" keyEquivalent="w" 
id="DVo-aG-piG">
+                                <connections>
+                                    <action selector="performClose:" 
target="-1" id="HmO-Ls-i7Q"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Save…" keyEquivalent="s" 
id="pxx-59-PXV">
+                                <connections>
+                                    <action selector="saveDocument:" 
target="-1" id="teZ-XB-qJY"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Save As…" keyEquivalent="S" 
id="Bw7-FT-i3A">
+                                <connections>
+                                    <action selector="saveDocumentAs:" 
target="-1" id="mDf-zr-I0C"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Revert to Saved" id="KaW-ft-85H">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="revertDocumentToSaved:" 
target="-1" id="iJ3-Pv-kwq"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
+                            <menuItem title="Page Setup…" keyEquivalent="P" 
id="qIS-W8-SiK">
+                                <modifierMask key="keyEquivalentModifierMask" 
shift="YES" command="YES"/>
+                                <connections>
+                                    <action selector="runPageLayout:" 
target="-1" id="Din-rz-gC5"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Print…" keyEquivalent="p" 
id="aTl-1u-JFS">
+                                <connections>
+                                    <action selector="print:" target="-1" 
id="qaZ-4w-aoO"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Edit" id="5QF-Oa-p0T">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Edit" id="W48-6f-4Dl">
+                        <items>
+                            <menuItem title="Undo" keyEquivalent="z" 
id="dRJ-4n-Yzg">
+                                <connections>
+                                    <action selector="undo:" target="-1" 
id="M6e-cu-g7V"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Redo" keyEquivalent="Z" 
id="6dh-zS-Vam">
+                                <connections>
+                                    <action selector="redo:" target="-1" 
id="oIA-Rs-6OD"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
+                            <menuItem title="Cut" keyEquivalent="x" 
id="uRl-iY-unG">
+                                <connections>
+                                    <action selector="cut:" target="-1" 
id="YJe-68-I9s"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Copy" keyEquivalent="c" 
id="x3v-GG-iWU">
+                                <connections>
+                                    <action selector="copy:" target="-1" 
id="G1f-GL-Joy"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Paste" keyEquivalent="v" 
id="gVA-U4-sdL">
+                                <connections>
+                                    <action selector="paste:" target="-1" 
id="UvS-8e-Qdg"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Paste and Match Style" 
keyEquivalent="V" id="WeT-3V-zwk">
+                                <modifierMask key="keyEquivalentModifierMask" 
option="YES" command="YES"/>
+                                <connections>
+                                    <action selector="pasteAsPlainText:" 
target="-1" id="cEh-KX-wJQ"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Delete" id="pa3-QI-u2k">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="delete:" target="-1" 
id="0Mk-Ml-PaM"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Select All" keyEquivalent="a" 
id="Ruw-6m-B2m">
+                                <connections>
+                                    <action selector="selectAll:" target="-1" 
id="VNm-Mi-diN"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
+                            <menuItem title="Find" id="4EN-yA-p0u">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Find" 
id="1b7-l0-nxx">
+                                    <items>
+                                        <menuItem title="Find…" tag="1" 
keyEquivalent="f" id="Xz5-n4-O0W">
+                                            <connections>
+                                                <action 
selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Find and Replace…" 
tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
+                                            <modifierMask 
key="keyEquivalentModifierMask" option="YES" command="YES"/>
+                                            <connections>
+                                                <action 
selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Find Next" tag="2" 
keyEquivalent="g" id="q09-fT-Sye">
+                                            <connections>
+                                                <action 
selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Find Previous" 
tag="3" keyEquivalent="G" id="OwM-mh-QMV">
+                                            <connections>
+                                                <action 
selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Use Selection for 
Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
+                                            <connections>
+                                                <action 
selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Jump to Selection" 
keyEquivalent="j" id="S0p-oC-mLd">
+                                            <connections>
+                                                <action 
selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem title="Spelling and Grammar" 
id="Dv1-io-Yv7">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Spelling" 
id="3IN-sU-3Bg">
+                                    <items>
+                                        <menuItem title="Show Spelling and 
Grammar" keyEquivalent=":" id="HFo-cy-zxI">
+                                            <connections>
+                                                <action 
selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Check Document Now" 
keyEquivalent=";" id="hz2-CU-CR7">
+                                            <connections>
+                                                <action 
selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="bNw-od-mp5"/>
+                                        <menuItem title="Check Spelling While 
Typing" id="rbD-Rh-wIN">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Check Grammar With 
Spelling" id="mK6-2p-4JG">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Correct Spelling 
Automatically" id="78Y-hA-62v">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem title="Substitutions" id="9ic-FL-obx">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Substitutions" 
id="FeM-D8-WVr">
+                                    <items>
+                                        <menuItem title="Show Substitutions" 
id="z6F-FW-3nz">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="gPx-C9-uUO"/>
+                                        <menuItem title="Smart Copy/Paste" 
id="9yt-4B-nSM">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Smart Quotes" 
id="hQb-2v-fYv">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Smart Dashes" 
id="rgM-f4-ycn">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Smart Links" 
id="cwL-P1-jid">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Data Detectors" 
id="tRr-pd-1PS">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Text Replacement" 
id="HFQ-gK-NFA">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem title="Transformations" id="2oI-Rn-ZJC">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Transformations" 
id="c8a-y6-VQd">
+                                    <items>
+                                        <menuItem title="Make Upper Case" 
id="vmV-6d-7jI">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Make Lower Case" 
id="d9M-CD-aMd">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Capitalize" 
id="UEZ-Bs-lqG">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem title="Speech" id="xrE-MZ-jX0">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Speech" 
id="3rS-ZA-NoH">
+                                    <items>
+                                        <menuItem title="Start Speaking" 
id="Ynk-f8-cLZ">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Stop Speaking" 
id="Oyz-dy-DGm">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Format" id="jxT-CU-nIS">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Format" id="GEO-Iw-cKr">
+                        <items>
+                            <menuItem title="Font" id="Gi5-1S-RQB">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Font" 
systemMenu="font" id="aXa-aM-Jaq">
+                                    <items>
+                                        <menuItem title="Show Fonts" 
keyEquivalent="t" id="Q5e-8K-NDq">
+                                            <connections>
+                                                <action 
selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Bold" tag="2" 
keyEquivalent="b" id="GB9-OM-e27">
+                                            <connections>
+                                                <action 
selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Italic" tag="1" 
keyEquivalent="i" id="Vjx-xi-njq">
+                                            <connections>
+                                                <action 
selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Underline" 
keyEquivalent="u" id="WRG-CD-K1S">
+                                            <connections>
+                                                <action selector="underline:" 
target="-1" id="FYS-2b-JAY"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="5gT-KC-WSO"/>
+                                        <menuItem title="Bigger" tag="3" 
keyEquivalent="+" id="Ptp-SP-VEL">
+                                            <connections>
+                                                <action selector="modifyFont:" 
target="YLy-65-1bz" id="Uc7-di-UnL"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Smaller" tag="4" 
keyEquivalent="-" id="i1d-Er-qST">
+                                            <connections>
+                                                <action selector="modifyFont:" 
target="YLy-65-1bz" id="HcX-Lf-eNd"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="kx3-Dk-x3B"/>
+                                        <menuItem title="Kern" id="jBQ-r6-VK2">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" title="Kern" 
id="tlD-Oa-oAM">
+                                                <items>
+                                                    <menuItem title="Use 
Default" id="GUa-eO-cwY">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="useStandardKerning:" target="-1" id="6dk-9l-Ckg"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Use None" 
id="cDB-IK-hbR">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="turnOffKerning:" target="-1" id="U8a-gz-Maa"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Tighten" 
id="46P-cB-AYj">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="tightenKerning:" target="-1" id="hr7-Nz-8ro"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Loosen" 
id="ogc-rX-tC1">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="loosenKerning:" target="-1" id="8i4-f9-FKE"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem title="Ligatures" 
id="o6e-r0-MWq">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" 
title="Ligatures" id="w0m-vy-SC9">
+                                                <items>
+                                                    <menuItem title="Use 
Default" id="agt-UL-0e3">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="useStandardLigatures:" target="-1" id="7uR-wd-Dx6"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Use None" 
id="J7y-lM-qPV">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="turnOffLigatures:" target="-1" id="iX2-gA-Ilz"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Use All" 
id="xQD-1f-W4t">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="useAllLigatures:" target="-1" id="KcB-kA-TuK"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem title="Baseline" 
id="OaQ-X3-Vso">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" 
title="Baseline" id="ijk-EB-dga">
+                                                <items>
+                                                    <menuItem title="Use 
Default" id="3Om-Ey-2VK">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="unscript:" target="-1" id="0vZ-95-Ywn"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem 
title="Superscript" id="Rqc-34-cIF">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="superscript:" target="-1" id="3qV-fo-wpU"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem 
title="Subscript" id="I0S-gh-46l">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="subscript:" target="-1" id="Q6W-4W-IGz"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Raise" 
id="2h7-ER-AoG">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="raiseBaseline:" target="-1" id="4sk-31-7Q9"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem title="Lower" 
id="1tx-W0-xDw">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="lowerBaseline:" target="-1" id="OF1-bc-KW4"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="Ndw-q3-faq"/>
+                                        <menuItem title="Show Colors" 
keyEquivalent="C" id="bgn-CT-cEk">
+                                            <connections>
+                                                <action 
selector="orderFrontColorPanel:" target="-1" id="mSX-Xz-DV3"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="iMs-zA-UFJ"/>
+                                        <menuItem title="Copy Style" 
keyEquivalent="c" id="5Vv-lz-BsD">
+                                            <modifierMask 
key="keyEquivalentModifierMask" option="YES" command="YES"/>
+                                            <connections>
+                                                <action selector="copyFont:" 
target="-1" id="GJO-xA-L4q"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Paste Style" 
keyEquivalent="v" id="vKC-jM-MkH">
+                                            <modifierMask 
key="keyEquivalentModifierMask" option="YES" command="YES"/>
+                                            <connections>
+                                                <action selector="pasteFont:" 
target="-1" id="JfD-CL-leO"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                            <menuItem title="Text" id="Fal-I4-PZk">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <menu key="submenu" title="Text" 
id="d9c-me-L2H">
+                                    <items>
+                                        <menuItem title="Align Left" 
keyEquivalent="{" id="ZM1-6Q-yy1">
+                                            <connections>
+                                                <action selector="alignLeft:" 
target="-1" id="zUv-R1-uAa"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Center" 
keyEquivalent="|" id="VIY-Ag-zcb">
+                                            <connections>
+                                                <action 
selector="alignCenter:" target="-1" id="spX-mk-kcS"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Justify" 
id="J5U-5w-g23">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="alignJustified:" target="-1" id="ljL-7U-jND"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Align Right" 
keyEquivalent="}" id="wb2-vD-lq4">
+                                            <connections>
+                                                <action selector="alignRight:" 
target="-1" id="r48-bG-YeY"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="4s2-GY-VfK"/>
+                                        <menuItem title="Writing Direction" 
id="H1b-Si-o9J">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <menu key="submenu" title="Writing 
Direction" id="8mr-sm-Yjd">
+                                                <items>
+                                                    <menuItem 
title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                    </menuItem>
+                                                    <menuItem id="YGs-j5-SAR">
+                                                        <string key="title">   
Default</string>
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeBaseWritingDirectionNatural:" target="-1" id="qtV-5e-UBP"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="Lbh-J2-qVU">
+                                                        <string key="title">   
Left to Right</string>
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeBaseWritingDirectionLeftToRight:" target="-1" id="S0X-9S-QSf"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="jFq-tB-4Kx">
+                                                        <string key="title">   
Right to Left</string>
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeBaseWritingDirectionRightToLeft:" target="-1" id="5fk-qB-AqJ"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem 
isSeparatorItem="YES" id="swp-gr-a21"/>
+                                                    <menuItem 
title="Selection" enabled="NO" id="cqv-fj-IhA">
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                    </menuItem>
+                                                    <menuItem id="Nop-cj-93Q">
+                                                        <string key="title">   
Default</string>
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeTextWritingDirectionNatural:" target="-1" id="lPI-Se-ZHp"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="BgM-ve-c93">
+                                                        <string key="title">   
Left to Right</string>
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeTextWritingDirectionLeftToRight:" target="-1" id="caW-Bv-w94"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                    <menuItem id="RB4-Sm-HuC">
+                                                        <string key="title">   
Right to Left</string>
+                                                        <modifierMask 
key="keyEquivalentModifierMask"/>
+                                                        <connections>
+                                                            <action 
selector="makeTextWritingDirectionRightToLeft:" target="-1" id="EXD-6r-ZUu"/>
+                                                        </connections>
+                                                    </menuItem>
+                                                </items>
+                                            </menu>
+                                        </menuItem>
+                                        <menuItem isSeparatorItem="YES" 
id="fKy-g9-1gm"/>
+                                        <menuItem title="Show Ruler" 
id="vLm-3I-IUL">
+                                            <modifierMask 
key="keyEquivalentModifierMask"/>
+                                            <connections>
+                                                <action 
selector="toggleRuler:" target="-1" id="FOx-HJ-KwY"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Copy Ruler" 
keyEquivalent="c" id="MkV-Pr-PK5">
+                                            <modifierMask 
key="keyEquivalentModifierMask" control="YES" command="YES"/>
+                                            <connections>
+                                                <action selector="copyRuler:" 
target="-1" id="71i-fW-3W2"/>
+                                            </connections>
+                                        </menuItem>
+                                        <menuItem title="Paste Ruler" 
keyEquivalent="v" id="LVM-kO-fVI">
+                                            <modifierMask 
key="keyEquivalentModifierMask" control="YES" command="YES"/>
+                                            <connections>
+                                                <action selector="pasteRuler:" 
target="-1" id="cSh-wd-qM2"/>
+                                            </connections>
+                                        </menuItem>
+                                    </items>
+                                </menu>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="View" id="H8h-7b-M4v">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="View" id="HyV-fh-RgO">
+                        <items>
+                            <menuItem title="Show Toolbar" keyEquivalent="t" 
id="snW-S8-Cw5">
+                                <modifierMask key="keyEquivalentModifierMask" 
option="YES" command="YES"/>
+                                <connections>
+                                    <action selector="toggleToolbarShown:" 
target="-1" id="BXY-wc-z0C"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Customize Toolbar…" 
id="1UK-8n-QPP">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action 
selector="runToolbarCustomizationPalette:" target="-1" id="pQI-g3-MTW"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Window" id="aUF-d1-5bR">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Window" systemMenu="window" 
id="Td7-aD-5lo">
+                        <items>
+                            <menuItem title="Minimize" keyEquivalent="m" 
id="OY7-WF-poV">
+                                <connections>
+                                    <action selector="performMiniaturize:" 
target="-1" id="VwT-WD-YPe"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem title="Zoom" id="R4o-n2-Eq4">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="performZoom:" 
target="-1" id="DIl-cC-cCs"/>
+                                </connections>
+                            </menuItem>
+                            <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
+                            <menuItem title="Bring All to Front" 
id="LE2-aR-0XJ">
+                                <modifierMask key="keyEquivalentModifierMask"/>
+                                <connections>
+                                    <action selector="arrangeInFront:" 
target="-1" id="DRN-fu-gQh"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+                <menuItem title="Help" id="wpr-3q-Mcd">
+                    <modifierMask key="keyEquivalentModifierMask"/>
+                    <menu key="submenu" title="Help" systemMenu="help" 
id="F2S-fz-NVQ">
+                        <items>
+                            <menuItem title="CocoaExample Help" 
keyEquivalent="?" id="FKE-Sm-Kum">
+                                <connections>
+                                    <action selector="showHelp:" target="-1" 
id="y7X-2Q-9no"/>
+                                </connections>
+                            </menuItem>
+                        </items>
+                    </menu>
+                </menuItem>
+            </items>
+        </menu>
+        <window title="CocoaExample" 
allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" 
releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" 
miniaturizable="YES" resizable="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" 
rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="335" y="390" width="480" height="360"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
+            <view key="contentView" id="EiT-Mj-1SZ">
+                <rect key="frame" x="0.0" y="0.0" width="480" height="360"/>
+                <autoresizingMask key="autoresizingMask"/>
+            </view>
+        </window>
+    </objects>
+</document>
diff --git a/Tests/XCTest/CocoaExample/main.m b/Tests/XCTest/CocoaExample/main.m
new file mode 100644
index 0000000..8a6799b
--- /dev/null
+++ b/Tests/XCTest/CocoaExample/main.m
@@ -0,0 +1,5 @@
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, const char * argv[]) {
+    return NSApplicationMain(argc, argv);
+}
diff --git a/Tests/XCTest/CocoaExampleTests/CocoaExampleTests.m 
b/Tests/XCTest/CocoaExampleTests/CocoaExampleTests.m
new file mode 100644
index 0000000..70d61d6
--- /dev/null
+++ b/Tests/XCTest/CocoaExampleTests/CocoaExampleTests.m
@@ -0,0 +1,13 @@
+#import <XCTest/XCTest.h>
+
+@interface CocoaExampleTests : XCTestCase
+
+@end
+
+@implementation CocoaExampleTests
+
+- (void)testExample {
+    XCTAssert(YES, @"Pass");
+}
+
+@end
diff --git a/Tests/XCTest/FrameworkExample/FrameworkExample.c 
b/Tests/XCTest/FrameworkExample/FrameworkExample.c
new file mode 100644
index 0000000..2da78da
--- /dev/null
+++ b/Tests/XCTest/FrameworkExample/FrameworkExample.c
@@ -0,0 +1,6 @@
+#include "FrameworkExample.h"
+
+int FourtyTwo()
+{
+    return 42;
+}
diff --git a/Tests/XCTest/FrameworkExample/FrameworkExample.h 
b/Tests/XCTest/FrameworkExample/FrameworkExample.h
new file mode 100644
index 0000000..2e0b499
--- /dev/null
+++ b/Tests/XCTest/FrameworkExample/FrameworkExample.h
@@ -0,0 +1 @@
+int FourtyTwo();
diff --git a/Tests/XCTest/FrameworkExample/Info.plist 
b/Tests/XCTest/FrameworkExample/Info.plist
new file mode 100644
index 0000000..a22acea
--- /dev/null
+++ b/Tests/XCTest/FrameworkExample/Info.plist
@@ -0,0 +1,28 @@
+<?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>CFBundleExecutable</key>
+       <string>FrameworkExample</string>
+       <key>CFBundleIdentifier</key>
+       <string>org.cmake.FrameworkExample</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>FrameworkExample</string>
+       <key>CFBundlePackageType</key>
+       <string>FMWK</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string></string>
+       <key>NSHumanReadableCopyright</key>
+       <string></string>
+       <key>NSPrincipalClass</key>
+       <string></string>
+</dict>
+</plist>
diff --git a/Tests/XCTest/FrameworkExampleTests/FrameworkExampleTests.m 
b/Tests/XCTest/FrameworkExampleTests/FrameworkExampleTests.m
new file mode 100644
index 0000000..7cba23e
--- /dev/null
+++ b/Tests/XCTest/FrameworkExampleTests/FrameworkExampleTests.m
@@ -0,0 +1,16 @@
+#import <XCTest/XCTest.h>
+
+#import "FrameworkExample/FrameworkExample.h"
+
+@interface FrameworkExampleTests : XCTestCase
+
+@end
+
+@implementation FrameworkExampleTests
+
+- (void)testFourtyTwo {
+    // This is an example of a functional test case.
+    XCTAssertEqual(42, FourtyTwo());
+}
+
+@end
diff --git a/Tests/XCTest/FrameworkExampleTests/Info.plist 
b/Tests/XCTest/FrameworkExampleTests/Info.plist
new file mode 100644
index 0000000..293921b
--- /dev/null
+++ b/Tests/XCTest/FrameworkExampleTests/Info.plist
@@ -0,0 +1,24 @@
+<?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>CFBundleExecutable</key>
+       <string>FrameworkExampleTests</string>
+       <key>CFBundleIdentifier</key>
+       <string>org.cmake.FrameworkExampleTests</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>FrameworkExampleTests</string>
+       <key>CFBundlePackageType</key>
+       <string>BNDL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1</string>
+</dict>
+</plist>

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=36fefe29966b33505d9d4abbc4df7c41ea103e40
commit 36fefe29966b33505d9d4abbc4df7c41ea103e40
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Thu Feb 26 21:55:45 2015 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Wed Mar 18 15:36:06 2015 +0100

    OS X: Add FindXCTest module
    
    Add a module to lookup XCTest Framework and xctest utility.
    It also provides APIs for creating 'xctest' targets.
    
    Signed-off-by: Gregor Jasny <gja...@googlemail.com>

diff --git a/Help/manual/cmake-modules.7.rst b/Help/manual/cmake-modules.7.rst
index 2b26cc9..c9219d5 100644
--- a/Help/manual/cmake-modules.7.rst
+++ b/Help/manual/cmake-modules.7.rst
@@ -212,6 +212,7 @@ All Modules
    /module/FindWish
    /module/FindwxWidgets
    /module/FindwxWindows
+   /module/FindXCTest
    /module/FindXercesC
    /module/FindX11
    /module/FindXMLRPC
diff --git a/Help/module/FindXCTest.rst b/Help/module/FindXCTest.rst
new file mode 100644
index 0000000..ff6273c
--- /dev/null
+++ b/Help/module/FindXCTest.rst
@@ -0,0 +1 @@
+.. cmake-module:: ../../Modules/FindXCTest.cmake
diff --git a/Modules/FindXCTest.cmake b/Modules/FindXCTest.cmake
new file mode 100644
index 0000000..2a341ce
--- /dev/null
+++ b/Modules/FindXCTest.cmake
@@ -0,0 +1,196 @@
+#[=======================================================================[.rst:
+FindXCTest
+----------
+
+Functions to help creating and executing XCTest bundles.
+
+An XCTest bundle is a CFBundle with a special product-type
+and bundle extension. For more information about XCTest visit
+the Mac Developer library at:
+http://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/
+
+Module Functions
+^^^^^^^^^^^^^^^^
+
+.. command:: xctest_add_bundle
+
+  The ``xctest_add_bundle`` function creates a XCTest bundle named
+  <target> which will test the target <testee>. Supported target types
+  for testee are Frameworks and App Bundles::
+
+    xctest_add_bundle(
+      <target>  # Name of the XCTest bundle
+      <testee>  # Target name of the testee
+      )
+
+.. command:: xctest_add_test
+
+  The ``xctest_add_test`` function adds an XCTest bundle to the
+  project to be run by :manual:`ctest(1)`. The test will be named
+  <name> and tests <bundle>::
+
+    xctest_add_test(
+      <name>    # Test name
+      <bundle>  # Target name of XCTest bundle
+      )
+
+Module Variables
+^^^^^^^^^^^^^^^^
+
+The following variables are set by including this module:
+
+.. variable:: XCTest_FOUND
+
+  True if the XCTest Framework and executable were found.
+
+.. variable:: XCTest_EXECUTABLE
+
+  The ``XCTEST_EXECUTABLE`` variable contains the path to the xctest
+  command line tool used to execute XCTest bundles.
+
+.. variable:: XCTest_INCLUDE_DIRS
+
+  The directory containing the XCTest Framework headers.
+
+.. variable:: XCTest_LIBRARIES
+
+  The location of the XCTest Framework.
+
+#]=======================================================================]
+
+#=============================================================================
+# Copyright 2015 Gregor Jasny
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+find_path(XCTest_INCLUDE_DIR
+  NAMES "XCTest/XCTest.h"
+  DOC "XCTest include directory")
+mark_as_advanced(XCTest_INCLUDE_DIR)
+
+find_library(XCTest_LIBRARY
+  NAMES XCTest
+  DOC "XCTest Framework library")
+mark_as_advanced(XCTest_LIBRARY)
+
+execute_process(
+  COMMAND xcrun --find xctest
+  OUTPUT_VARIABLE _xcrun_out OUTPUT_STRIP_TRAILING_WHITESPACE
+  ERROR_VARIABLE _xcrun_err)
+if(_xcrun_out)
+  set(XCTest_EXECUTABLE "${_xcrun_out}" CACHE FILEPATH "XCTest executable")
+  mark_as_advanced(XCTest_EXECUTABLE)
+endif()
+
+include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
+find_package_handle_standard_args(XCTest
+  FOUND_VAR XCTest_FOUND
+  REQUIRED_VARS XCTest_LIBRARY XCTest_INCLUDE_DIR XCTest_EXECUTABLE)
+
+if(XCTest_FOUND)
+  set(XCTest_INCLUDE_DIRS "${XCTest_INCLUDE_DIR}")
+  set(XCTest_LIBRARIES "${XCTest_LIBRARY}")
+endif(XCTest_FOUND)
+
+
+function(xctest_add_bundle target testee)
+  if(NOT XCTest_FOUND)
+    message(FATAL_ERROR "XCTest is required to create a XCTest Bundle.")
+  endif(NOT XCTest_FOUND)
+
+  if(NOT CMAKE_OSX_SYSROOT)
+    message(FATAL_ERROR "Adding XCTest bundles requires CMAKE_OSX_SYSROOT to 
be set.")
+  endif()
+
+  add_library(${target} MODULE ${ARGN})
+
+  set_target_properties(${target} PROPERTIES
+    BUNDLE TRUE
+    XCTEST TRUE
+    XCTEST_TESTEE ${testee})
+
+  target_link_libraries(${target} PRIVATE "-framework Foundation")
+  target_link_libraries(${target} PRIVATE ${XCTest_LIBRARIES})
+  target_include_directories(${target} PRIVATE ${XCTest_INCLUDE_DIRS})
+
+  # retrieve testee target type
+  if(NOT TARGET ${testee})
+    message(FATAL_ERROR "${testee} is not a target.")
+  endif()
+  get_property(_testee_type TARGET ${testee} PROPERTY TYPE)
+  get_property(_testee_framework TARGET ${testee} PROPERTY FRAMEWORK)
+  get_property(_testee_macosx_bundle TARGET ${testee} PROPERTY MACOSX_BUNDLE)
+
+  if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
+    # testee is a Framework
+    target_link_libraries(${target} PRIVATE ${testee})
+
+  elseif(_testee_type STREQUAL "EXECUTABLE" AND _testee_macosx_bundle)
+    # testee is an App Bundle
+    add_dependencies(${target} ${testee})
+    if(XCODE)
+      set_target_properties(${target} PROPERTIES
+        XCODE_ATTRIBUTE_BUNDLE_LOADER "$(TEST_HOST)"
+        XCODE_ATTRIBUTE_TEST_HOST "$<TARGET_FILE:${testee}>")
+    else(XCODE)
+      target_link_libraries(${target}
+        PRIVATE -bundle_loader $<TARGET_FILE:${testee}>)
+    endif(XCODE)
+
+  else()
+    message(FATAL_ERROR "Testee ${testee} is of unsupported type.")
+  endif()
+endfunction(xctest_add_bundle)
+
+
+function(xctest_add_test name bundle)
+  if(NOT XCTest_EXECUTABLE)
+    message(FATAL_ERROR "XCTest executable is required to register a test.")
+  endif()
+
+  # check that bundle is a XCTest Bundle
+
+  if(NOT TARGET ${bundle})
+    message(FATAL_ERROR "${bundle} is not a target.")
+  endif(NOT TARGET ${bundle})
+
+  get_property(_test_type TARGET ${bundle} PROPERTY TYPE)
+  get_property(_test_bundle TARGET ${bundle} PROPERTY BUNDLE)
+  get_property(_test_xctest TARGET ${bundle} PROPERTY XCTEST)
+
+  if(NOT _test_type STREQUAL "MODULE_LIBRARY"
+       OR NOT _test_xctest OR NOT _test_bundle)
+    message(FATAL_ERROR "Test ${bundle} is not an XCTest Bundle")
+  endif()
+
+  # get and check testee properties
+
+  get_property(_testee TARGET ${bundle} PROPERTY XCTEST_TESTEE)
+  if(NOT TARGET ${_testee})
+    message(FATAL_ERROR "${_testee} is not a target.")
+  endif()
+
+  get_property(_testee_type TARGET ${_testee} PROPERTY TYPE)
+  get_property(_testee_framework TARGET ${_testee} PROPERTY FRAMEWORK)
+
+  # register test
+
+  add_test(
+    NAME ${name}
+    COMMAND ${XCTest_EXECUTABLE} $<TARGET_LINKER_FILE_DIR:${bundle}>/../..)
+
+  # point loader to testee in case rpath is disabled
+
+  if(_testee_type STREQUAL "SHARED_LIBRARY" AND _testee_framework)
+    set_property(TEST ${name} APPEND PROPERTY
+      ENVIRONMENT DYLD_FRAMEWORK_PATH=$<TARGET_LINKER_FILE_DIR:${_testee}>/..)
+  endif()
+endfunction(xctest_add_test)

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7b9453f8d22753bcd47204cdc5021de351d3d2f8
commit 7b9453f8d22753bcd47204cdc5021de351d3d2f8
Author:     Gregor Jasny <gja...@googlemail.com>
AuthorDate: Wed Feb 25 21:07:43 2015 +0100
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Wed Mar 18 15:23:53 2015 +0100

    OS X: Add handling for XCTest bundles
    
    An XCTest bundle is a CFBundle with a special product-type and bundle
    extension.  For more information about XCTest visit the Mac Developer
    library at:
    
      
http://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/
    
    Signed-off-by: Gregor Jasny <gja...@googlemail.com>

diff --git a/Help/manual/cmake-properties.7.rst 
b/Help/manual/cmake-properties.7.rst
index 19fdf23..1dff33e 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -243,6 +243,7 @@ Properties on Targets
    /prop_tgt/VS_WINRT_REFERENCES
    /prop_tgt/WIN32_EXECUTABLE
    /prop_tgt/XCODE_ATTRIBUTE_an-attribute
+   /prop_tgt/XCTEST
 
 Properties on Tests
 ===================
diff --git a/Help/prop_tgt/XCTEST.rst b/Help/prop_tgt/XCTEST.rst
new file mode 100644
index 0000000..f3ff474
--- /dev/null
+++ b/Help/prop_tgt/XCTEST.rst
@@ -0,0 +1,13 @@
+XCTEST
+------
+
+This target is a XCTest CFBundle on the Mac.
+
+This property will usually get set via the ``add_xctest`` macro in
+:module:`FindXCTest` module.
+
+If a module library target has this property set to true it will be
+built as a CFBundle when built on the Mac.  It will have the directory
+structure required for a CFBundle.
+
+This property depends on :prop_tgt:`BUNDLE` to be effective.
diff --git a/Source/cmGlobalXCodeGenerator.cxx 
b/Source/cmGlobalXCodeGenerator.cxx
index bd8a1f5..d340e72 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -804,6 +804,10 @@ GetSourcecodeValueFromFileExtension(const std::string& 
_ext,
     {
     sourcecode = "compiled.mach-o.objfile";
     }
+  else if(ext == "xctest")
+    {
+    sourcecode = "wrapper.cfbundle";
+    }
   else if(ext == "xib")
     {
     keepLastKnownFileType = true;
@@ -2598,7 +2602,9 @@ const char* 
cmGlobalXCodeGenerator::GetTargetFileType(cmTarget& cmtarget)
     case cmTarget::STATIC_LIBRARY:
       return "archive.ar";
     case cmTarget::MODULE_LIBRARY:
-      if (cmtarget.IsCFBundleOnApple())
+      if (cmtarget.IsXCTestOnApple())
+        return "wrapper.cfbundle";
+      else if (cmtarget.IsCFBundleOnApple())
         return "wrapper.plug-in";
       else
         return ((this->XcodeVersion >= 22)?
@@ -2622,7 +2628,9 @@ const char* 
cmGlobalXCodeGenerator::GetTargetProductType(cmTarget& cmtarget)
     case cmTarget::STATIC_LIBRARY:
       return "com.apple.product-type.library.static";
     case cmTarget::MODULE_LIBRARY:
-      if (cmtarget.IsCFBundleOnApple())
+      if (cmtarget.IsXCTestOnApple())
+        return "com.apple.product-type.bundle.unit-test";
+      else if (cmtarget.IsCFBundleOnApple())
         return "com.apple.product-type.bundle";
       else
         return ((this->XcodeVersion >= 22)?
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index b70f60d..b3d1155 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -616,6 +616,13 @@ bool cmTarget::IsCFBundleOnApple() const
 }
 
 //----------------------------------------------------------------------------
+bool cmTarget::IsXCTestOnApple() const
+{
+  return (this->IsCFBundleOnApple() &&
+          this->GetPropertyAsBool("XCTEST"));
+}
+
+//----------------------------------------------------------------------------
 bool cmTarget::IsBundleOnApple() const
 {
   return this->IsFrameworkOnApple() || this->IsAppBundleOnApple() ||
@@ -6791,7 +6798,14 @@ std::string cmTarget::GetCFBundleDirectory(const 
std::string& config,
   const char *ext = this->GetProperty("BUNDLE_EXTENSION");
   if (!ext)
     {
-    ext = "bundle";
+    if (this->IsXCTestOnApple())
+      {
+      ext = "xctest";
+      }
+    else
+      {
+      ext = "bundle";
+      }
     }
   fpath += ext;
   fpath += "/Contents";
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index 5170b31..a4ef977 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -527,6 +527,9 @@ public:
   /** Return whether this target is a CFBundle (plugin) on Apple.  */
   bool IsCFBundleOnApple() const;
 
+  /** Return whether this target is a XCTest on Apple.  */
+  bool IsXCTestOnApple() const;
+
   /** Return whether this target is an executable Bundle on Apple.  */
   bool IsAppBundleOnApple() const;
 

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=54a5cdbb4c35aa8847d3eb0f7f418fad72563992
commit 54a5cdbb4c35aa8847d3eb0f7f418fad72563992
Author:     Brad King <brad.k...@kitware.com>
AuthorDate: Fri Feb 27 09:35:50 2015 -0500
Commit:     Gregor Jasny <gja...@googlemail.com>
CommitDate: Wed Mar 18 15:23:53 2015 +0100

    Tests: Compute Xcode version for any generator on OS X
    
    Store the version in CMake_TEST_XCODE_VERSION for use by tests that work
    with any generator on OS X but may depend on the Xcode version providing
    the tools.

diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 40bea51..765fc80 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -172,6 +172,7 @@ if(BUILD_TESTING)
     ON)
   mark_as_advanced(CTEST_TEST_CPACK)
   set(CTEST_TEST_OSX_ARCH 0)
+  set(CMake_TEST_XCODE_VERSION 0)
   if(APPLE)
     execute_process(
       COMMAND sw_vers -productVersion
@@ -185,6 +186,17 @@ if(BUILD_TESTING)
     else()
       set(CTEST_TEST_OSX_ARCH 1)
     endif()
+    if(XCODE_VERSION)
+      set(CMake_TEST_XCODE_VERSION "${XCODE_VERSION}")
+    else()
+      execute_process(
+        COMMAND xcodebuild -version
+        OUTPUT_VARIABLE _version ERROR_VARIABLE _version
+        )
+      if(_version MATCHES "^Xcode ([0-9]+(\\.[0-9]+)*)")
+        set(CMake_TEST_XCODE_VERSION "${CMAKE_MATCH_1}")
+      endif()
+    endif()
   endif()
 
   # Use 1500 or CTEST_TEST_TIMEOUT for long test timeout value,

-----------------------------------------------------------------------

Summary of changes:
 Help/manual/cmake-modules.7.rst                    |    1 +
 Help/manual/cmake-properties.7.rst                 |    1 +
 Help/module/FindXCTest.rst                         |    1 +
 Help/prop_tgt/XCTEST.rst                           |   13 +
 Help/release/dev/xcode-xctest.rst                  |    6 +
 Modules/FindXCTest.cmake                           |  196 ++++++
 Source/CMakeVersion.cmake                          |    2 +-
 Source/cmGlobalXCodeGenerator.cxx                  |   12 +-
 Source/cmTarget.cxx                                |   16 +-
 Source/cmTarget.h                                  |    3 +
 Tests/CMakeLists.txt                               |   16 +
 Tests/XCTest/CMakeLists.txt                        |   57 ++
 Tests/XCTest/CocoaExample/AppDelegate.h            |    6 +
 Tests/XCTest/CocoaExample/AppDelegate.m            |   18 +
 .../CocoaExample/Info.plist}                       |   22 +-
 Tests/XCTest/CocoaExample/MainMenu.xib             |  680 ++++++++++++++++++++
 Tests/XCTest/CocoaExample/main.m                   |    5 +
 Tests/XCTest/CocoaExampleTests/CocoaExampleTests.m |   13 +
 Tests/XCTest/FrameworkExample/FrameworkExample.c   |    6 +
 Tests/XCTest/FrameworkExample/FrameworkExample.h   |    1 +
 .../FrameworkExample/Info.plist}                   |   28 +-
 .../FrameworkExampleTests/FrameworkExampleTests.m  |   16 +
 .../FrameworkExampleTests/Info.plist}              |   24 +-
 23 files changed, 1095 insertions(+), 48 deletions(-)
 create mode 100644 Help/module/FindXCTest.rst
 create mode 100644 Help/prop_tgt/XCTEST.rst
 create mode 100644 Help/release/dev/xcode-xctest.rst
 create mode 100644 Modules/FindXCTest.cmake
 create mode 100644 Tests/XCTest/CMakeLists.txt
 create mode 100644 Tests/XCTest/CocoaExample/AppDelegate.h
 create mode 100644 Tests/XCTest/CocoaExample/AppDelegate.m
 copy Tests/{iOSNavApp/Info.plist.in => XCTest/CocoaExample/Info.plist} (66%)
 create mode 100644 Tests/XCTest/CocoaExample/MainMenu.xib
 create mode 100644 Tests/XCTest/CocoaExample/main.m
 create mode 100644 Tests/XCTest/CocoaExampleTests/CocoaExampleTests.m
 create mode 100644 Tests/XCTest/FrameworkExample/FrameworkExample.c
 create mode 100644 Tests/XCTest/FrameworkExample/FrameworkExample.h
 copy Tests/{iOSNavApp/Info.plist.in => XCTest/FrameworkExample/Info.plist} 
(58%)
 create mode 100644 Tests/XCTest/FrameworkExampleTests/FrameworkExampleTests.m
 copy Tests/{iOSNavApp/Info.plist.in => 
XCTest/FrameworkExampleTests/Info.plist} (56%)


hooks/post-receive
-- 
CMake
_______________________________________________
Cmake-commits mailing list
Cmake-commits@cmake.org
http://public.kitware.com/mailman/listinfo/cmake-commits

Reply via email to