17f1843c71
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.
329 lines
9.4 KiB
Lua
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
|
|
|