1--- 2-- codelite/tests/test_codelite_config.lua 3-- Automated test suite for CodeLite project generation. 4-- Copyright (c) 2015 Manu Evans and the Premake project 5--- 6 7 8 local suite = test.declare("codelite_cproj_config") 9 local p = premake 10 local codelite = p.modules.codelite 11 12--------------------------------------------------------------------------- 13-- Setup/Teardown 14--------------------------------------------------------------------------- 15 16 local wks, prj, cfg 17 18 function suite.setup() 19 p.action.set("codelite") 20 p.escaper(codelite.esc) 21 p.indent(" ") 22 wks = test.createWorkspace() 23 end 24 25 local function prepare() 26 prj = test.getproject(wks,1) 27 cfg = test.getconfig(prj, "Debug") 28 end 29 30 31 function suite.OnProjectCfg_Compiler() 32 prepare() 33 codelite.project.compiler(cfg) 34 test.capture [[ 35 <Compiler Options="" C_Options="" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 36 </Compiler> 37 ]] 38 end 39 40 function suite.OnProjectCfg_Flags() 41 optimize "Debug" 42 exceptionhandling "Off" 43 rtti "Off" 44 pic "On" 45 symbols "On" 46 language "C++" 47 cppdialect "C++11" 48 flags { "NoBufferSecurityCheck" } 49 forceincludes { "forced_include1.h", "forced_include2.h" } 50 buildoptions { "-opt1", "-opt2" } 51 prepare() 52 codelite.project.compiler(cfg) 53 test.capture [[ 54 <Compiler Options="-O0;-fPIC;-g;-std=c++11;-fno-exceptions;-fno-stack-protector;-fno-rtti;-include forced_include1.h;-include forced_include2.h;-opt1;-opt2" C_Options="-O0;-fPIC;-g;-include forced_include1.h;-include forced_include2.h;-opt1;-opt2" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 55 </Compiler> 56 ]] 57 end 58 59 function suite.OnProjectCfg_Includes() 60 includedirs { "dir/", "dir2" } 61 prepare() 62 codelite.project.compiler(cfg) 63 test.capture [[ 64 <Compiler Options="" C_Options="" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 65 <IncludePath Value="dir"/> 66 <IncludePath Value="dir2"/> 67 </Compiler> 68 ]] 69 end 70 71 function suite.OnProjectCfg_SysIncludes() 72 sysincludedirs { "sysdir", "sysdir2/"} 73 prepare() 74 codelite.project.compiler(cfg) 75 test.capture [[ 76 <Compiler Options="-isystem sysdir;-isystem sysdir2" C_Options="-isystem sysdir;-isystem sysdir2" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 77 </Compiler> 78 ]] 79 end 80 81 82 function suite.OnProjectCfg_Defines() 83 defines { "TEST", "DEF", "VAL=1", "ESCAPE=\"WITH SPACE\"" } 84 prepare() 85 codelite.project.compiler(cfg) 86 test.capture [[ 87 <Compiler Options="" C_Options="" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 88 <Preprocessor Value="TEST"/> 89 <Preprocessor Value="DEF"/> 90 <Preprocessor Value="VAL=1"/> 91 <Preprocessor Value="ESCAPE="WITH\ SPACE""/> 92 </Compiler> 93 ]] 94 end 95 96 function suite.OnProjectCfg_Linker() 97 prepare() 98 codelite.project.linker(cfg) 99 test.capture [[ 100 <Linker Required="yes" Options=""> 101 </Linker> 102 ]] 103 end 104 105 function suite.OnProjectCfg_LibPath() 106 libdirs { "test/", "test2" } 107 prepare() 108 codelite.project.linker(cfg) 109 test.capture [[ 110 <Linker Required="yes" Options=""> 111 <LibraryPath Value="test"/> 112 <LibraryPath Value="test2"/> 113 </Linker> 114 ]] 115 end 116 117 function suite.OnProjectCfg_Libs() 118 links { "a", "b" } 119 prepare() 120 codelite.project.linker(cfg) 121 test.capture [[ 122 <Linker Required="yes" Options="-la;-lb"> 123 </Linker> 124 ]] 125 end 126 127 -- TODO: test sibling lib project links 128 129 130 function suite.OnProjectCfg_ResCompiler() 131 prepare() 132 codelite.project.resourceCompiler(cfg) 133 test.capture [[ 134 <ResourceCompiler Options="" Required="no"/> 135 ]] 136 end 137 138 function suite.OnProjectCfg_ResInclude() 139 files { "x.rc" } 140 resincludedirs { "dir/" } 141 prepare() 142 codelite.project.resourceCompiler(cfg) 143 test.capture [[ 144 <ResourceCompiler Options="" Required="yes"> 145 <IncludePath Value="dir"/> 146 </ResourceCompiler> 147 ]] 148 end 149 150 function suite.OnProjectCfg_ResRegularInclude() 151 files { "x.rc" } 152 includedirs { "regulardir/" } 153 prepare() 154 codelite.project.resourceCompiler(cfg) 155 test.capture [[ 156 <ResourceCompiler Options="" Required="yes"> 157 <IncludePath Value="regulardir"/> 158 </ResourceCompiler> 159 ]] 160 end 161 162 function suite.OnProjectCfg_ResSysInclude() 163 files { "x.rc" } 164 sysincludedirs { "sysdir/" } 165 prepare() 166 codelite.project.resourceCompiler(cfg) 167 test.capture [[ 168 <ResourceCompiler Options="" Required="yes"> 169 <IncludePath Value="sysdir"/> 170 </ResourceCompiler> 171 ]] 172 end 173 174 function suite.OnProjectCfg_General() 175 system "Windows" 176 prepare() 177 codelite.project.general(cfg) 178 test.capture [[ 179 <General OutputFile="bin/Debug/MyProject.exe" IntermediateDirectory="obj/Debug" Command="bin/Debug/MyProject.exe" CommandArguments="" UseSeparateDebugArgs="no" DebugArguments="" WorkingDirectory="" PauseExecWhenProcTerminates="yes" IsGUIProgram="no" IsEnabled="yes"/> 180 ]] 181 end 182 183 function suite.OnProjectCfg_Environment() 184 debugenvs { "ENV_ONE=1", "ENV_TWO=2" } 185 prepare() 186 codelite.project.environment(cfg) 187 test.capture( 188' <Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">\n' .. 189' <![CDATA[ENV_ONE=1\n' .. 190'ENV_TWO=2]]>\n' .. 191' </Environment>' 192 ) 193 end 194 195 function suite.OnProjectCfg_EnvironmentEscaping() 196 debugenvs { "\"ENV\"=<&>" } 197 prepare() 198 codelite.project.environment(cfg) 199 test.capture( 200' <Environment EnvVarSetName="<Use Defaults>" DbgSetName="<Use Defaults>">\n' .. 201' <![CDATA["ENV"=<&>]]>\n' .. 202' </Environment>' 203 ) 204 end 205 206 function suite.OnProjectCfg_Debugger() 207 prepare() 208 codelite.project.debugger(cfg) 209 test.capture [[ 210 <Debugger IsRemote="no" RemoteHostName="" RemoteHostPort="" DebuggerPath="" IsExtended="no"> 211 <DebuggerSearchPaths/> 212 <PostConnectCommands/> 213 <StartupCommands/> 214 </Debugger> 215 ]] 216 end 217 218 function suite.OnProjectCfg_DebuggerOpts() 219 debugremotehost "localhost" 220 debugport(2345) 221 debugextendedprotocol(true) 222 debugsearchpaths { "search/", "path" } 223 debugconnectcommands { "connectcmd1", "cmd2" } 224 debugstartupcommands { "startcmd1", "cmd2" } 225 prepare() 226 codelite.project.debugger(cfg) 227 test.capture [[ 228 <Debugger IsRemote="yes" RemoteHostName="localhost" RemoteHostPort="2345" DebuggerPath="" IsExtended="yes"> 229 <DebuggerSearchPaths>search 230path</DebuggerSearchPaths> 231 <PostConnectCommands>connectcmd1 232cmd2</PostConnectCommands> 233 <StartupCommands>startcmd1 234cmd2</StartupCommands> 235 </Debugger> 236 ]] 237 end 238 239 function suite.OnProjectCfg_DebuggerOptsEscaping() 240 debugremotehost "localhost" 241 debugport(2345) 242 debugextendedprotocol(true) 243 debugsearchpaths { "\"search\" && <path>" } 244 debugconnectcommands { "\"connect\" && <cmd>" } 245 debugstartupcommands { "\"start\" && <cmd>" } 246 prepare() 247 codelite.project.debugger(cfg) 248 test.capture [[ 249 <Debugger IsRemote="yes" RemoteHostName="localhost" RemoteHostPort="2345" DebuggerPath="" IsExtended="yes"> 250 <DebuggerSearchPaths>"search" && <path></DebuggerSearchPaths> 251 <PostConnectCommands>"connect" && <cmd></PostConnectCommands> 252 <StartupCommands>"start" && <cmd></StartupCommands> 253 </Debugger> 254 ]] 255 end 256 257 function suite.OnProjectCfg_PreBuild() 258 prebuildcommands { "cmd0", "cmd1" } 259 prepare() 260 codelite.project.preBuild(prj) 261 test.capture [[ 262 <PreBuild> 263 <Command Enabled="yes">cmd0</Command> 264 <Command Enabled="yes">cmd1</Command> 265 </PreBuild> 266 ]] 267 end 268 269 function suite.OnProjectCfg_PreBuild_Escaped() 270 prebuildcommands { 271 "touch \"./build/copyright\" && echo OK", 272 "cat \"./lib/copyright\" >> \"./build/copyright\"" 273 } 274 prepare() 275 codelite.project.preBuild(prj) 276 test.capture [[ 277 <PreBuild> 278 <Command Enabled="yes">touch "./build/copyright" && echo OK</Command> 279 <Command Enabled="yes">cat "./lib/copyright" >> "./build/copyright"</Command> 280 </PreBuild> 281 ]] 282 end 283 284 function suite.OnProjectCfg_PostBuild() 285 postbuildcommands { "cmd0", "cmd1" } 286 prepare() 287 codelite.project.postBuild(prj) 288 test.capture [[ 289 <PostBuild> 290 <Command Enabled="yes">cmd0</Command> 291 <Command Enabled="yes">cmd1</Command> 292 </PostBuild> 293 ]] 294 end 295 296 function suite.OnProjectCfg_PostBuild_Escaped() 297 postbuildcommands { 298 "touch \"./build/copyright\" && echo OK", 299 "cat \"./lib/copyright\" >> \"./build/copyright\"" 300 } 301 prepare() 302 codelite.project.postBuild(prj) 303 test.capture [[ 304 <PostBuild> 305 <Command Enabled="yes">touch "./build/copyright" && echo OK</Command> 306 <Command Enabled="yes">cat "./lib/copyright" >> "./build/copyright"</Command> 307 </PostBuild> 308 ]] 309 end 310 311 -- TODO: test custom build 312 313 314 function suite.OnProjectCfg_AdditionalRules() 315 prepare() 316 codelite.project.additionalRules(prj) 317 test.capture [[ 318 <AdditionalRules> 319 <CustomPostBuild/> 320 <CustomPreBuild/> 321 </AdditionalRules> 322 ]] 323 end 324 325 function suite.OnProjectCfg_Completion() 326 language "C++" 327 cppdialect "C++11" 328 prepare() 329 codelite.project.completion(prj) 330 test.capture [[ 331 <Completion EnableCpp11="yes" EnableCpp14="no"> 332 <ClangCmpFlagsC/> 333 <ClangCmpFlags/> 334 <ClangPP/> 335 <SearchPaths/> 336 </Completion> 337 ]] 338 end 339 340 function suite.OnProjectCfg_UnsignedCharOn() 341 unsignedchar "On" 342 prepare() 343 codelite.project.compiler(cfg) 344 test.capture [[ 345 <Compiler Options="-funsigned-char" C_Options="-funsigned-char" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 346 </Compiler> 347 ]] 348 end 349 350 351 function suite.OnProjectCfg_UnsignedCharOff() 352 unsignedchar "Off" 353 prepare() 354 codelite.project.compiler(cfg) 355 test.capture [[ 356 <Compiler Options="-fno-unsigned-char" C_Options="-fno-unsigned-char" Assembler="" Required="yes" PreCompiledHeader="" PCHInCommandLine="no" UseDifferentPCHFlags="no" PCHFlags=""> 357 </Compiler> 358 ]] 359 end 360