premake/tests/base/test_criteria.lua
Jason Perkins 17f1843c71 Finish renaming architectures away from x32/x64
A number of tests were relying on the fact that x32/x64 were being converted implicitly to x86/x86_64. If/when we retire those symbols, all of those tests would break. Renamed them now to avoid having to sort it out later. Also fixed up comments to keep everything consistent.
2015-04-13 18:27:11 -04:00

329 lines
9.4 KiB
Lua

--
-- tests/base/test_criteria.lua
-- Test suite for the criteria matching API.
-- Copyright (c) 2012-2015 Jason Perkins and the Premake project
--
local suite = test.declare("criteria")
local criteria = premake.criteria
--
-- Setup and teardown
--
local crit
--
-- A criteria with no terms should satisfy any context.
--
function suite.matches_alwaysTrue_onNoFilterTerms()
crit = criteria.new {}
test.istrue(criteria.matches(crit, { configurations="Debug", system="Windows" }))
end
--
-- Should not match if any term is missing in the context.
--
function suite.matches_fails_onMissingContext()
crit = criteria.new { "system:Windows", "architecture:x86" }
test.isfalse(criteria.matches(crit, { configurations="Debug", system="Windows" }))
end
--
-- Context terms must match the entire criteria term.
--
function suite.matches_fails_onIncompleteTermMatch()
crit = criteria.new { "platforms:win64" }
test.isfalse(criteria.matches(crit, { platforms="win64 dll dcrt" }))
end
--
-- Wildcard matches should work.
--
function suite.matches_passes_onPatternMatch()
crit = criteria.new { "action:vs*" }
test.istrue(criteria.matches(crit, { action="vs2005" }))
end
--
-- The "not" modifier should fail the test if the term is matched.
--
function suite.matches_fails_onMatchWithNotModifier_afterPrefix()
crit = criteria.new { "system:not windows" }
test.isfalse(criteria.matches(crit, { system="windows" }))
end
function suite.matches_fails_onMatchWithNotModifier_beforePrefix()
crit = criteria.new { "not system:windows" }
test.isfalse(criteria.matches(crit, { system="windows" }))
end
function suite.matches_passes_onMissWithNotModifier_afterPrefix()
crit = criteria.new { "system:not windows" }
test.istrue(criteria.matches(crit, { system="linux" }))
end
function suite.matches_passes_onMissWithNotModifier_beforePrefix()
crit = criteria.new { "not system:windows" }
test.istrue(criteria.matches(crit, { system="linux" }))
end
function suite.matches_passes_onMissWithNotModifier_noPrefix()
crit = criteria.new { "not debug" }
test.istrue(criteria.matches(crit, { configurations="release" }))
end
--
-- The "or" modifier should pass if either term is present.
--
function suite.matches_passes_onFirstOrTermMatched()
crit = criteria.new { "system:windows or linux" }
test.istrue(criteria.matches(crit, { system="windows" }))
end
function suite.matches_passes_onSecondOrTermMatched()
crit = criteria.new { "system:windows or linux" }
test.istrue(criteria.matches(crit, { system="linux" }))
end
function suite.matches_passes_onThirdOrTermMatched()
crit = criteria.new { "system:windows or linux or vs2005" }
test.istrue(criteria.matches(crit, { system="vs2005" }))
end
function suite.matches_fails_onNoOrTermMatched()
crit = criteria.new { "system:windows or linux" }
test.isfalse(criteria.matches(crit, { system="vs2005" }))
end
function suite.matches_passes_onMixedPrefixes_firstTermMatched_projectContext()
crit = criteria.new { "system:windows or files:core*" }
test.istrue(criteria.matches(crit, { system="windows" }))
end
function suite.matches_fails_onMixedPrefixes_firstTermMatched_fileContext()
crit = criteria.new { "system:windows or files:core*" }
test.isfalse(criteria.matches(crit, { system="windows", files="hello.cpp" }))
end
function suite.matches_passes_onMixedPrefixes_secondTermMatched()
crit = criteria.new { "system:windows or files:core*" }
test.istrue(criteria.matches(crit, { system="linux", files="coregraphics.cpp" }))
end
function suite.matches_fails_onMixedPrefixes_noTermMatched()
crit = criteria.new { "system:windows or files:core*" }
test.isfalse(criteria.matches(crit, { system="linux", files="hello.cpp" }))
end
--
-- The "not" modifier should fail on any match with an "or" modifier.
--
function suite.matches_passes_onNotOrMatchesFirst()
crit = criteria.new { "system:not windows or linux" }
test.isfalse(criteria.matches(crit, { system="windows" }))
end
function suite.matches_passes_onNotOrMatchesSecond()
crit = criteria.new { "system:windows or not linux" }
test.isfalse(criteria.matches(crit, { system="linux" }))
end
--
-- The "not" modifier should succeed with "or" if there are no matches.
--
function suite.matches_passes_onNoNotMatch()
crit = criteria.new { "system:not windows or linux" }
test.istrue(criteria.matches(crit, { system="macosx" }))
end
--
-- If the context specifies a filename, the filter must match it explicitly.
--
function suite.matches_passes_onFilenameAndMatchingPattern()
crit = criteria.new { "files:**.c", "system:windows" }
test.istrue(criteria.matches(crit, { system="windows", files="hello.c" }))
end
function suite.matches_fails_onFilenameAndNoMatchingPattern()
crit = criteria.new { "system:windows" }
test.isfalse(criteria.matches(crit, { system="windows", files="hello.c" }))
end
--
-- "Not" modifiers can also be used on filenames.
--
function suite.matches_passes_onFilenameMissAndNotModifier()
crit = criteria.new { "files:not **.c", "system:windows" }
test.istrue(criteria.matches(crit, { system="windows", files="hello.h" }))
end
function suite.matches_fails_onFilenameHitAndNotModifier()
crit = criteria.new { "files:not **.c", "system:windows" }
test.isfalse(criteria.matches(crit, { system="windows", files="hello.c" }))
end
--
-- If context provides a list of values, match against them.
--
function suite.matches_passes_termMatchesList()
crit = criteria.new { "options:debug" }
test.istrue(criteria.matches(crit, { options={ "debug", "logging" }}))
end
--
-- If no prefix is specified, default to "configurations".
--
function suite.matches_usesDefaultPrefix_onSingleTerm()
crit = criteria.new { "debug" }
test.istrue(criteria.matches(crit, { configurations="debug" }))
end
--
-- These tests use the older, unprefixed style of filter terms. This
-- approach will get phased out eventually, but are still included here
-- for backward compatibility testing.
--
function suite.matches_onEmptyCriteria_Unprefixed()
crit = criteria.new({}, true)
test.istrue(criteria.matches(crit, { "apple", "orange" }))
end
function suite.fails_onMissingContext_Unprefixed()
crit = criteria.new({ "orange", "pear" }, true)
test.isfalse(criteria.matches(crit, { "apple", "orange" }))
end
function suite.fails_onIncompleteMatch_Unprefixed()
crit = criteria.new({ "win64" }, true)
test.isfalse(criteria.matches(crit, { "win64 dll dcrt" }))
end
function suite.passes_onPatternMatch_Unprefixed()
crit = criteria.new({ "vs*" }, true)
test.istrue(criteria.matches(crit, { "vs2005" }))
end
function suite.fails_onNotMatch_Unprefixed()
crit = criteria.new({ "not windows" }, true)
test.isfalse(criteria.matches(crit, { "windows" }))
end
function suite.passes_onNotUnmatched_Unprefixed()
crit = criteria.new({ "not windows" }, true)
test.istrue(criteria.matches(crit, { "linux" }))
end
function suite.passes_onFirstOrTermMatched_Unprefixed()
crit = criteria.new({ "windows or linux" }, true)
test.istrue(criteria.matches(crit, { "windows" }))
end
function suite.passes_onSecondOrTermMatched_Unprefixed()
crit = criteria.new({ "windows or linux" }, true)
test.istrue(criteria.matches(crit, { "linux" }))
end
function suite.passes_onThirdOrTermMatched_Unprefixed()
crit = criteria.new({ "windows or linux or vs2005" }, true)
test.istrue(criteria.matches(crit, { "vs2005" }))
end
function suite.fails_onNoOrTermMatched_Unprefixed()
crit = criteria.new({ "windows or linux" }, true)
test.isfalse(criteria.matches(crit, { "vs2005" }))
end
function suite.passes_onNotOrMatchesFirst_Unprefixed()
crit = criteria.new({ "not windows or linux" }, true)
test.isfalse(criteria.matches(crit, { "windows" }))
end
function suite.passes_onNotOrMatchesSecond_Unprefixed()
crit = criteria.new({ "windows or not linux" }, true)
test.isfalse(criteria.matches(crit, { "linux" }))
end
function suite.passes_onNoNotMatch_Unprefixed()
crit = criteria.new({ "not windows or linux" }, true)
test.istrue(criteria.matches(crit, { "macosx" }))
end
function suite.passes_onFilenameAndMatchingPattern_Unprefixed()
crit = criteria.new({ "**.c", "windows" }, true)
test.istrue(criteria.matches(crit, { system="windows", files="hello.c" }))
end
function suite.fails_onFilenameAndNoMatchingPattern_Unprefixed()
crit = criteria.new({ "windows" }, true)
test.isfalse(criteria.matches(crit, { system="windows", files="hello.c" }))
end
function suite.fails_onFilenameAndNotModifier_Unprefixed()
crit = criteria.new({ "not linux" }, true)
test.isfalse(criteria.matches(crit, { system="windows", files="hello.c" }))
end
function suite.matches_passes_termMatchesList_Unprefixed()
crit = criteria.new({ "debug" }, true)
test.istrue(criteria.matches(crit, { options={ "debug", "logging" }}))
end
--
-- Should return nil and an error message on an invalid prefix.
--
function suite.returnsNilAndError_onInvalidPrefix()
crit, err = criteria.new { "gibble:Debug" }
test.isnil(crit)
test.isnotnil(err)
end
--
-- Should respect field value aliases, if present.
--
function suite.passes_onAliasedValue()
premake.api.addAliases("system", { ["gnu-linux"] = "linux" })
crit = criteria.new { "system:gnu-linux" }
test.istrue(criteria.matches(crit, { system="linux" }))
end
function suite.passes_onAliasedValue_withMixedCase()
premake.api.addAliases("system", { ["gnu-linux"] = "linux" })
crit = criteria.new { "System:GNU-Linux" }
test.istrue(criteria.matches(crit, { system="linux" }))
end