-- -- tests/actions/xcode/test_xcode_project.lua -- Automated test suite for Xcode project generation. -- Copyright (c) 2009 Jason Perkins and the Premake project -- T.xcode3_project = { } local suite = T.xcode3_project local xcode = premake.xcode --------------------------------------------------------------------------- -- Setup/Teardown --------------------------------------------------------------------------- local sln, tr function suite.setup() premake.action.set("xcode3") xcode.used_ids = { } -- reset the list of generated IDs sln = test.createsolution() end local function prepare() io.capture() premake.buildconfigs() local prj = premake.solution.getproject(sln, 1) tr = xcode.buildprjtree(prj) end --------------------------------------------------------------------------- -- PBXBuildFile tests --------------------------------------------------------------------------- function suite.PBXBuildFile_ListsBuildableSources() files { "source.h", "source.c", "source.cpp", "Info.plist" } prepare() xcode.PBXBuildFile(tr) test.capture [[ /* Begin PBXBuildFile section */ [source.c:build] /* source.c in Sources */ = {isa = PBXBuildFile; fileRef = [source.c] /* source.c */; }; [source.cpp:build] /* source.cpp in Sources */ = {isa = PBXBuildFile; fileRef = [source.cpp] /* source.cpp */; }; /* End PBXBuildFile section */ ]] end function suite.PBXBuildFile_ListsResourceFilesOnlyOnceWithGroupID() files { "English.lproj/MainMenu.xib", "French.lproj/MainMenu.xib" } prepare() xcode.PBXBuildFile(tr) test.capture [[ /* Begin PBXBuildFile section */ [MainMenu.xib:build] /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = [MainMenu.xib] /* MainMenu.xib */; }; /* End PBXBuildFile section */ ]] end function suite.PBXBuildFile_ListsFrameworks() links { "Cocoa.framework" } prepare() xcode.PBXBuildFile(tr) test.capture [[ /* Begin PBXBuildFile section */ [Cocoa.framework:build] /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = [Cocoa.framework] /* Cocoa.framework */; }; /* End PBXBuildFile section */ ]] end --------------------------------------------------------------------------- -- PBXFileReference tests --------------------------------------------------------------------------- function suite.PBXFileReference_ListsConsoleTarget() prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [MyProject:product] /* MyProject */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; name = "MyProject"; path = "MyProject"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ ]] end function suite.PBXFileReference_ListsWindowedTarget() kind "WindowedApp" prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [MyProject.app:product] /* MyProject.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = "MyProject.app"; path = "MyProject.app"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ ]] end function suite.PBXFileReference_ListsStaticLibTarget() kind "StaticLib" prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [libMyProject.a:product] /* libMyProject.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libMyProject.a"; path = "libMyProject.a"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ ]] end function suite.PBXFileReference_ListsSharedLibTarget() kind "SharedLib" prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [libMyProject.dylib:product] /* libMyProject.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; name = "libMyProject.dylib"; path = "libMyProject.dylib"; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ ]] end function suite.PBXFileReference_ListsSourceFiles() files { "source.c" } prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [source.c] /* source.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = "source.c"; path = "source.c"; sourceTree = ""; }; ]] end function suite.PBXFileReference_ListsXibCorrectly() files { "English.lproj/MainMenu.xib", "French.lproj/MainMenu.xib" } prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [English] /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "English"; path = "English.lproj/MainMenu.xib"; sourceTree = ""; }; [French] /* French */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = "French"; path = "French.lproj/MainMenu.xib"; sourceTree = ""; }; ]] end function suite.PBXFileReference_ListsStringsCorrectly() files { "English.lproj/InfoPlist.strings", "French.lproj/InfoPlist.strings" } prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [English] /* English */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "English"; path = "English.lproj/InfoPlist.strings"; sourceTree = ""; }; [French] /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "French"; path = "French.lproj/InfoPlist.strings"; sourceTree = ""; }; ]] end function suite.PBXFileReference_ListFrameworksCorrectly() links { "Cocoa.framework" } prepare() xcode.PBXFileReference(tr) test.capture [[ /* Begin PBXFileReference section */ [Cocoa.framework] /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = "Cocoa.framework"; path = "/System/Library/Frameworks/Cocoa.framework"; sourceTree = ""; }; ]] end --------------------------------------------------------------------------- -- PBXFrameworksBuildPhase tests --------------------------------------------------------------------------- function suite.PBXFrameworksBuildPhase_OnNoFiles() prepare() xcode.PBXFrameworksBuildPhase(tr) test.capture [[ /* Begin PBXFrameworksBuildPhase section */ [MyProject:fxs] /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ ]] end function suite.PBXFrameworksBuild_ListsFrameworksCorrectly() links { "Cocoa.framework" } prepare() xcode.PBXFrameworksBuildPhase(tr) test.capture [[ /* Begin PBXFrameworksBuildPhase section */ [MyProject:fxs] /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( [Cocoa.framework:build] /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ ]] end --------------------------------------------------------------------------- -- PBXGroup tests --------------------------------------------------------------------------- function suite.PBXGroup_OnNoFiles() prepare() xcode.PBXGroup(tr) test.capture [[ /* Begin PBXGroup section */ [MyProject] /* MyProject */ = { isa = PBXGroup; children = ( [Products] /* Products */, ); name = MyProject; sourceTree = ""; }; [Products] /* Products */ = { isa = PBXGroup; children = ( [MyProject:product] /* MyProject */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ ]] end function suite.PBXGroup_OnSourceFiles() files { "source.h" } prepare() xcode.PBXGroup(tr) test.capture [[ /* Begin PBXGroup section */ [MyProject] /* MyProject */ = { isa = PBXGroup; children = ( [source.h] /* source.h */, [Products] /* Products */, ); name = MyProject; sourceTree = ""; }; [Products] /* Products */ = { isa = PBXGroup; children = ( [MyProject:product] /* MyProject */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ ]] end function suite.PBXGroup_OnSourceSubdirs() files { "include/source.h" } prepare() xcode.PBXGroup(tr) test.capture [[ /* Begin PBXGroup section */ [MyProject] /* MyProject */ = { isa = PBXGroup; children = ( [include] /* include */, [Products] /* Products */, ); name = MyProject; sourceTree = ""; }; [include] /* include */ = { isa = PBXGroup; children = ( [source.h] /* source.h */, ); name = include; path = include; sourceTree = ""; }; ]] end function suite.PBXGroup_OnResourceFiles() files { "English.lproj/MainMenu.xib", "French.lproj/MainMenu.xib", "Info.plist" } prepare() xcode.PBXGroup(tr) test.capture [[ /* Begin PBXGroup section */ [MyProject] /* MyProject */ = { isa = PBXGroup; children = ( [Info.plist] /* Info.plist */, [MainMenu.xib] /* MainMenu.xib */, [Products] /* Products */, ); name = MyProject; sourceTree = ""; }; [Products] /* Products */ = { isa = PBXGroup; children = ( [MyProject:product] /* MyProject */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ ]] end function suite.PBXGroup_OnFrameworks() links { "Cocoa.framework" } prepare() xcode.PBXGroup(tr) test.capture [[ /* Begin PBXGroup section */ [MyProject] /* MyProject */ = { isa = PBXGroup; children = ( [Frameworks] /* Frameworks */, [Products] /* Products */, ); name = MyProject; sourceTree = ""; }; [Frameworks] /* Frameworks */ = { isa = PBXGroup; children = ( [Cocoa.framework] /* Cocoa.framework */, ); name = Frameworks; sourceTree = ""; }; ]] end --------------------------------------------------------------------------- -- PBXNativeTarget tests --------------------------------------------------------------------------- function suite.PBXNativeTarget_OnConsoleApp() prepare() xcode.PBXNativeTarget(tr) test.capture [[ /* Begin PBXNativeTarget section */ [MyProject:target] /* MyProject */ = { isa = PBXNativeTarget; buildConfigurationList = [MyProject:cfg] /* Build configuration list for PBXNativeTarget "MyProject" */; buildPhases = ( [MyProject:rez] /* Resources */, [MyProject:src] /* Sources */, [MyProject:fxs] /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = MyProject; productName = MyProject; productReference = [MyProject:product] /* MyProject */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ ]] end function suite.PBXNativeTarget_OnWindowedApp() kind "WindowedApp" prepare() xcode.PBXNativeTarget(tr) test.capture [[ /* Begin PBXNativeTarget section */ [MyProject.app:target] /* MyProject */ = { isa = PBXNativeTarget; buildConfigurationList = [MyProject.app:cfg] /* Build configuration list for PBXNativeTarget "MyProject" */; buildPhases = ( [MyProject.app:rez] /* Resources */, [MyProject.app:src] /* Sources */, [MyProject.app:fxs] /* Frameworks */, ); buildRules = ( ); dependencies = ( ); name = MyProject; productInstallPath = "$(HOME)/Applications"; productName = MyProject; productReference = [MyProject.app:product] /* MyProject.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ ]] end --------------------------------------------------------------------------- -- PBXProject tests --------------------------------------------------------------------------- function suite.PBXProject_OnProject() prepare() xcode.PBXProject(tr) test.capture [[ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "MyProject" */; compatibilityVersion = "Xcode 3.1"; hasScannedForEncodings = 1; mainGroup = [MyProject] /* MyProject */; projectDirPath = ""; projectRoot = ""; targets = ( [MyProject:target] /* MyProject */, ); }; /* End PBXProject section */ ]] end --------------------------------------------------------------------------- -- PBXResourceBuildPhase tests --------------------------------------------------------------------------- function suite.PBXResourcesBuildPhase_OnNoResources() prepare() xcode.PBXResourcesBuildPhase(tr) test.capture [[ /* Begin PBXResourcesBuildPhase section */ [MyProject:rez] /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ ]] end function suite.PBXResourcesBuildPhase_OnResources() files { "English.lproj/MainMenu.xib", "French.lproj/MainMenu.xib", "Info.plist" } prepare() xcode.PBXResourcesBuildPhase(tr) test.capture [[ /* Begin PBXResourcesBuildPhase section */ [MyProject:rez] /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( [MainMenu.xib:build] /* MainMenu.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ ]] end