Index: Externals/Eagle/bin/Eagle.dll ================================================================== --- Externals/Eagle/bin/Eagle.dll +++ Externals/Eagle/bin/Eagle.dll cannot compute difference between binary files Index: Externals/Eagle/bin/EagleShell.exe ================================================================== --- Externals/Eagle/bin/EagleShell.exe +++ Externals/Eagle/bin/EagleShell.exe cannot compute difference between binary files Index: Externals/Eagle/bin/EagleShell32.exe ================================================================== --- Externals/Eagle/bin/EagleShell32.exe +++ Externals/Eagle/bin/EagleShell32.exe cannot compute difference between binary files Index: Externals/Eagle/bin/x64/Spilornis.dll ================================================================== --- Externals/Eagle/bin/x64/Spilornis.dll +++ Externals/Eagle/bin/x64/Spilornis.dll cannot compute difference between binary files Index: Externals/Eagle/bin/x86/Spilornis.dll ================================================================== --- Externals/Eagle/bin/x86/Spilornis.dll +++ Externals/Eagle/bin/x86/Spilornis.dll cannot compute difference between binary files Index: Externals/Eagle/lib/Eagle1.0/init.eagle ================================================================== --- Externals/Eagle/lib/Eagle1.0/init.eagle +++ Externals/Eagle/lib/Eagle1.0/init.eagle @@ -1440,14 +1440,25 @@ # NOTE: Grab the base URI for updates. # set updateBaseUri [info engine UpdateBaseUri] # - # NOTE: Append the path and query string used for updates to it. + # NOTE: Grab the update path and query string used for updates. # - set updateUri [appendArgs \ - $updateBaseUri [info engine UpdatePathAndQuery]] + set updatePathAndQuery [info engine UpdatePathAndQuery] + + # + # HACK: Exract the URI type (e.g. "stable" or "latest") from the + # update path and query. This code may need to be modified + # in the future. + # + set updateUriType [lindex [split $updatePathAndQuery .] 0] + + # + # NOTE: Combine them to form the complete update URI. + # + set updateUri [appendArgs $updateBaseUri $updatePathAndQuery] # # NOTE: Fetch the master update data from the distribution site # and normalize to Unix-style line-endings. # @@ -1671,14 +1682,14 @@ # # NOTE: Are we supposed to prompt the interactive user, # if any, to upgrade now? # set text [appendArgs \ - "latest build " $patchLevel ", dated " $dateTime \ - ", is newer than the running build " $enginePatchLevel \ - ", dated " $engineDateTime ", based on data from " \ - $updateBaseUri] + $updateUriType " build " $patchLevel ", dated " \ + $dateTime ", is newer than the running build " \ + $enginePatchLevel ", dated " $engineDateTime \ + ", based on data from " $updateBaseUri] if {$prompt && [isInteractive]} then { # # NOTE: Is the [object] command available? If not, # this cannot be done. @@ -1918,21 +1929,21 @@ # NOTE: The patch level from the line is less, we are more # up-to-date than the latest version? # return [list [appendArgs \ "running build " $enginePatchLevel ", dated " \ - $engineDateTime ", is newer than the latest build " \ - $patchLevel ", dated " $dateTime ", based on data " \ - "from " $updateBaseUri]] + $engineDateTime ", is newer than the " $updateUriType \ + " build " $patchLevel ", dated " $dateTime \ + ", based on data " "from " $updateBaseUri]] } elseif {$checkBuild} then { # # NOTE: The patch levels are equal, we are up-to-date. # return [list [appendArgs \ "running build " $enginePatchLevel ", dated " \ - $engineDateTime ", is the latest build, based on " \ - "data from " $updateBaseUri]] + $engineDateTime ", is the " $updateUriType \ + " build, based on " "data from " $updateBaseUri]] } } } } } Index: Externals/Eagle/lib/Eagle1.0/test.eagle ================================================================== --- Externals/Eagle/lib/Eagle1.0/test.eagle +++ Externals/Eagle/lib/Eagle1.0/test.eagle @@ -505,11 +505,11 @@ set options [list \ -breakOnLeak -configuration -constraints -exitOnComplete \ -file -logFile -machine -match -no -notFile -platform \ -postTest -preTest -postWait -preWait -randomOrder -skip \ -startFile -stopFile -stopOnFailure -stopOnLeak -suffix \ - -suite -tclsh -threshold] + -suite -tclsh -threshold -uncountedLeaks -verbose] set length [llength $args] for {set index 0} {$index < $length} {incr index} { # @@ -1192,10 +1192,19 @@ # return "" } } + proc getTestUncountedLeaks {} { + if {[info exists ::test_uncounted_leaks] && \ + [string length $::test_uncounted_leaks] > 0} then { + return $::test_uncounted_leaks + } + + return [list] + } + # # NOTE: This procedure should return non-zero if the [exec] command may be # used by the specified test package procedure. # proc canTestExec { procName } { @@ -1430,13 +1439,18 @@ if {$code == 0 && [regexp -- {\s==== (.*?) FAILED\s} $result]} then { set code 1 } # - # NOTE: Display and log the result of the test we just completed. + # NOTE: Display and/or log the results for the test that we just + # completed. # - tresult $code $result + if {[shouldWriteTestData]} then { + tresult $code $result + } else { + tlog $result + } # # NOTE: If the test failed with an actual error (i.e. not just a # test failure), make sure we do not obscure the error # message with test suite output. @@ -1457,11 +1471,21 @@ unset -nocomplain ::test_suite_running error ""; # no message } } else { if {$error} then { - tputs $::test_channel [appendArgs "ERROR (runTest): " $result \n] + # + # HACK: Prevent spurious errors dealing with [test] command options + # that are missing from native Tcl. + # + set badOptionPattern {^bad option ".*?":\ + must be -body, -cleanup, -constraints, -errorOutput,\ + -match, -output, -result, -returnCodes, or -setup$} + + if {[isEagle] || ![regexp -- $badOptionPattern $result]} then { + tputs $::test_channel [appendArgs "ERROR (runTest): " $result \n] + } } unhookPuts } } @@ -1530,11 +1554,16 @@ # upvar 1 $varName array ########################################################################### - set array(uncounted,$index) [list] + if {![info exists array(uncounted,$index)]} then { + set array(uncounted,$index) [getTestUncountedLeaks] + } + + ########################################################################### + set array(time,$index) [clock seconds] set array(afters,$index) [llength [after info]] set array(variables,$index) [llength [info globals]] set array(commands,$index) [llength [info commands]] set array(procedures,$index) [llength [info procs]] @@ -1552,11 +1581,13 @@ # # NOTE: These native resource types cannot be positively checked # for leaks (i.e. because the "leak" may be from an external # process). # - lappend array(uncounted,$index) temporaryFiles + if {![info exists ::no(uncountedTemporaryFiles)]} then { + lappend array(uncounted,$index) temporaryFiles + } ########################################################################### if {[isEagle]} then { # @@ -1629,11 +1660,17 @@ # # NOTE: These managed resource types cannot be positively checked # for leaks (i.e. because the "leak" may be from an external # process). # - lappend array(uncounted,$index) assemblies processes + if {![info exists ::no(uncountedAssemblies)]} then { + lappend array(uncounted,$index) assemblies + } + + if {![info exists ::no(uncountedProcesses)]} then { + lappend array(uncounted,$index) processes + } } } proc reportTestStatistics { channel fileName statsVarName filesVarName } { set statistics [list afters variables commands procedures namespaces \ @@ -2617,11 +2654,11 @@ } } } } - proc configureTcltest { match skip constraints imports force } { + proc configureTcltest { verbose match skip constraints imports force } { # # NOTE: Eagle and native Tcl have different configuration requirements # for the "tcltest" package. For Eagle, the necessary testing # functionality is built-in. In native Tcl, the package must be # loaded now and that cannot be done in a "safe" interpreter. @@ -2660,11 +2697,15 @@ # # NOTE: Configure it for our use (only when it was not loaded). # if {!$loaded} then { - ::tcltest::configure -verbose bpste + if {[string length $verbose] > 0} then { + ::tcltest::configure -verbose $verbose + } else { + ::tcltest::configure -verbose pbste + } } # # NOTE: We need to copy the Eagle test names to match over to Tcl. # @@ -2831,12 +2872,29 @@ # environment variable and/or the test flags. # set eagle_tests(Constraints) [getEnvironmentVariable testConstraints] if {[info exists test_flags(-constraints)]} then { - eval lappend eagle_tests(Constraints) $test_flags(-constraints) + eval lappend eagle_tests(Constraints) $test_flags(-constraints) + } + + unset -nocomplain test_verbose; set test_verbose Default + + if {[info exists test_flags(-verbose)] && \ + [string length $test_flags(-verbose)] > 0} then { + # + # NOTE: Map all test verbosity flags we support for script usage + # to their abbreviated names (which are all one letter) and + # then split them into a list. + # + set test_verbose [split [string map [list \ + Body B Pass P Skip S Start T Error E Line L \ + Fail F Reason R Time I Exit X StdOut O StdErr D] \ + $test_flags(-verbose)] ""] } + + set eagle_tests(Verbose) $test_verbose; unset test_verbose } } proc setupTestShims { setup {quiet false} } { if {$setup} then { @@ -2930,10 +2988,21 @@ "---- removed \"testConstraint\" alias\n" } } } } + + proc shouldWriteTestData {} { + if {[llength [info commands object]] > 0 && [catch { + object invoke -flags +NonPublic \ + Eagle._Components.Private.TestOps ShouldWriteTestData "" + } writeTestData] == 0 && $writeTestData} then { + return false + } + + return true + } proc tresult { code result } { host result $code $result; tlog $result } @@ -3424,11 +3493,11 @@ # # NOTE: Fake loading and configuring the "tcltest" package unless we # are prevented. # if {![info exists ::no(configureTcltest)]} then { - configureTcltest [list] [list] [list] [list] false + configureTcltest "" [list] [list] [list] [list] false } ########################################################################### ############################# END Eagle ONLY ############################## ########################################################################### @@ -3468,11 +3537,11 @@ # # NOTE: Load and configure the "tcltest" package unless we are prevented. # if {![info exists ::no(configureTcltest)]} then { - configureTcltest [list] [list] [list] [list test testConstraint] false + configureTcltest "" [list] [list] [list] [list test testConstraint] false } # # NOTE: We need several of our test related commands in the global # namespace as well. @@ -3483,16 +3552,17 @@ fixConstraints calculateBogoCops calculateRelativePerformance \ formatTimeStamp formatElapsedTime sourceIfValid processTestArguments \ getTclShellFileName getTemporaryPath getFiles getTestFiles \ getTestRunId getTestLogId getDefaultTestLog getTestLog getLastTestLog \ getTestSuite getTestMachine getTestPlatform getTestConfiguration \ - getTestSuffix testExec testClrExec execTestShell isRandomOrder \ - isBreakOnLeak isStopOnFailure isStopOnLeak isExitOnComplete \ - returnInfoScript runTestPrologue runTestEpilogue hookPuts unhookPuts \ - runTest testDebugBreak testArrayGet testShim tsource \ - recordTestStatistics reportTestStatistics formatList formatListAsDict \ - pathToRegexp inverseLsearchGlob removePathFromFileNames formatDecimal \ + getTestSuffix getTestUncountedLeaks testExec testClrExec \ + execTestShell isRandomOrder isBreakOnLeak isStopOnFailure \ + isStopOnLeak isExitOnComplete returnInfoScript runTestPrologue \ + runTestEpilogue hookPuts unhookPuts runTest testDebugBreak \ + testArrayGet testShim tsource recordTestStatistics \ + reportTestStatistics formatList formatListAsDict pathToRegexp \ + inverseLsearchGlob removePathFromFileNames formatDecimal \ clearTestPercent reportTestPercent runAllTests isTestSuiteRunning \ getTestChannelOrDefault checkForAndSetTestPath configureTcltest \ machineToPlatform getPassPercentage getSkipPercentage] false false ########################################################################### Index: Externals/Eagle/lib/Test1.0/constraints.eagle ================================================================== --- Externals/Eagle/lib/Test1.0/constraints.eagle +++ Externals/Eagle/lib/Test1.0/constraints.eagle @@ -18,10 +18,16 @@ # NOTE: Use our own namespace here because even though we do not directly # support namespaces ourselves, we do not want to pollute the global # namespace if this script actually ends up being evaluated in Tcl. # namespace eval ::Eagle { + proc getKnownBuildTypes {} { + return [list \ + NetFx20 NetFx35 NetFx40 NetFx45 NetFx451 NetFx452 NetFx46 Bare \ + LeanAndMean Database MonoOnUnix Development] + } + proc getKnownCompileOptions {} { return [list \ APPDOMAINS APPROVED_VERBS ARM ASSEMBLY_RELEASE \ ASSEMBLY_STRONG_NAME_TAG ASSEMBLY_TAG ASSEMBLY_TEXT ASSEMBLY_URI \ BREAK_ON_EXITING BREAKPOINTS CACHE_ARGUMENT_TOSTRING \ @@ -43,11 +49,12 @@ OFFICIAL PARSE_CACHE PATCHLEVEL PLUGIN_COMMANDS POLICY_TRACE \ PREVIOUS_RESULT RANDOMIZE_ID REMOTING SAMPLE SECURITY SERIALIZATION \ SHARED_ID_POOL SHELL SOURCE_ID SOURCE_TIMESTAMP STATIC TCL TCL_KITS \ TCL_THREADED TCL_THREADS TCL_UNICODE TCL_WRAPPER TEST THREADING \ THROW_ON_DISPOSED TRACE TYPE_CACHE UNIX USE_NAMESPACES VERBOSE WEB \ - WINDOWS WINFORMS WIX_30 WIX_35 WIX_36 WIX_37 WIX_38 WIX_39 X64 X86 XML] + WINDOWS WINFORMS WIX_30 WIX_35 WIX_36 WIX_37 WIX_38 WIX_39 WIX_310 \ + X64 X86 XML] } proc getKnownMonoVersions {} { # # NOTE: This job of this procedure is to return the list of "known" @@ -3695,25 +3702,26 @@ # # NOTE: We need several of our test constraint related commands in the # global namespace. # exportAndImportPackageCommands [namespace current] [list \ - getKnownCompileOptions getKnownMonoVersions lpermute \ - alwaysFullInterpReady canExecWhoAmI canExecTclShell canExecFossil \ - isTestMono isTestAdministrator canPing checkForTestSuiteFiles \ - checkForPlatform checkForWindowsVersion checkForScriptLibrary \ - checkForVariable checkForTclOptions checkForWindowsCommandProcessor \ - checkForFossil checkForEagle checkForSymbols checkForLogFile \ - checkForGaruda checkForShell checkForDebug checkForTk checkForVersion \ - checkForCommand checkForNamespaces checkForTestExec \ - checkForTestMachine checkForTestPlatform checkForTestConfiguration \ - checkForTestSuffix checkForFile checkForPathFile checkForNativeCode \ - checkForTip127 checkForTip194 checkForTip207 checkForTip241 \ - checkForTip285 checkForTip405 checkForTip426 checkForTip429 \ - checkForTiming checkForPerformance checkForBigLists \ - checkForTimeIntensive checkForFullTest checkForMemoryIntensive \ - checkForStackIntensive checkForInteractive checkForInteractiveCommand \ + getKnownBuildTypes getKnownCompileOptions getKnownMonoVersions \ + lpermute alwaysFullInterpReady canExecWhoAmI canExecTclShell \ + canExecFossil isTestMono isTestAdministrator canPing \ + checkForTestSuiteFiles checkForPlatform checkForWindowsVersion \ + checkForScriptLibrary checkForVariable checkForTclOptions \ + checkForWindowsCommandProcessor checkForFossil checkForEagle \ + checkForSymbols checkForLogFile checkForGaruda checkForShell \ + checkForDebug checkForTk checkForVersion checkForCommand \ + checkForNamespaces checkForTestExec checkForTestMachine \ + checkForTestPlatform checkForTestConfiguration checkForTestSuffix \ + checkForFile checkForPathFile checkForNativeCode checkForTip127 \ + checkForTip194 checkForTip207 checkForTip241 checkForTip285 \ + checkForTip405 checkForTip426 checkForTip429 checkForTiming \ + checkForPerformance checkForBigLists checkForTimeIntensive \ + checkForFullTest checkForMemoryIntensive checkForStackIntensive \ + checkForInteractive checkForInteractiveCommand \ checkForUserInteraction checkForNetwork checkForCompileOption \ checkForKnownCompileOptions] false false ########################################################################### ############################## END Tcl ONLY ############################### Index: Externals/Eagle/lib/Test1.0/prologue.eagle ================================================================== --- Externals/Eagle/lib/Test1.0/prologue.eagle +++ Externals/Eagle/lib/Test1.0/prologue.eagle @@ -227,10 +227,33 @@ package require Eagle.Test.Constraints } ############################################################################# + # + # NOTE: *SPECIAL* This test constraint must be checked first as it can + # determine if subsequent ones will emit warnings. This is only + # applicable to Eagle. This block requires the "Eagle.Test" and + # "Eagle.Test.Constraints" packages. + # + if {[isEagle]} then { + # + # NOTE: Has quiet testing support been disabled? + # + if {![info exists no(preQuiet)]} then { + # + # NOTE: There are checks for the "quiet" test constraint prior to + # the real test constraints being initialized. Prepare for + # those checks now. This will have to be repeated later, + # after the real test constraints are initialized. + # + checkForQuiet $test_channel true + } + } + + ############################################################################# + # # NOTE: Verify that the current call frame is correct and that the # interpreter call stack has not been imbalanced by previous # tests or other errors. This check only applies to Eagle. # This block requires the "Eagle.Library" package. @@ -244,10 +267,32 @@ Interpreter.GetActive.CurrentFrame Name] ne \ [list source [file normalize [info script]]]} then { unset -nocomplain test_suite_running error "cannot run prologue, current frame not for this script" } + + # + # NOTE: Attempt to determine if the this script file being run as + # part of the overall test suite script file itself. If not, + # issue a warning about the inability to detect "leaks" from + # the tests. + # + if {[lsearch -glob -index 0 -- [object invoke -flags +NonPublic \ + Interpreter.GetActive ScriptLocations.ToString] \ + {*[/\]all.eagle}] == -1} then { + # + # NOTE: Check if the warning should actually be emitted. If this + # warning has specifically been disabled or we are in quiet + # mode, do nothing. + # + if {![info exists no(warningForAllEagle)] && \ + ![haveConstraint quiet]} then { + tputs $test_channel [appendArgs \ + "==== WARNING: tests are not being run via suite script file " \ + "\"all.eagle\", resource leaks will probably not be reported.\n"] + } + } } ############################################################################# # @@ -309,13 +354,15 @@ set test_flags(-startFile) [list]; # start running at these test files. set test_flags(-stopFile) [list]; # stop running after these test files. set test_flags(-match) [list *]; # default to running all tests. set test_flags(-skip) [list]; # default to skipping no tests. set test_flags(-constraints) [list]; # default to no manual constraints. + set test_flags(-verbose) ""; # default to pass, body, skip, start, error. set test_flags(-logFile) ""; # default to using standard log file naming. set test_flags(-threshold) ""; # default to requiring all tests to pass. set test_flags(-randomOrder) ""; # default to deterministic order. + set test_flags(-uncountedLeaks) ""; # use defaults for uncounted resources. set test_flags(-breakOnLeak) ""; # default to continue on leak. set test_flags(-stopOnFailure) ""; # default to continue on failure. set test_flags(-stopOnLeak) ""; # default to continue on leak. set test_flags(-exitOnComplete) ""; # default to not exit after complete. set test_flags(-preTest) ""; # default to not evaluating anything. @@ -369,10 +416,20 @@ # NOTE: Set the test random-order flag to the one provided by the # command line. # set test_random_order $test_flags(-randomOrder) } + + if {[info exists test_flags(-uncountedLeaks)] && \ + [string length $test_flags(-uncountedLeaks)] > 0} then { + # + # NOTE: Set the test uncounted leaks "list" to the one provided by + # the command line. We should probably use [string is list] + # here; however, that is not available until native Tcl 8.5. + # + set test_uncounted_leaks $test_flags(-uncountedLeaks) + } if {[info exists test_flags(-breakOnLeak)] && \ [string is boolean -strict $test_flags(-breakOnLeak)]} then { # # NOTE: Set the test break-on-leak flag to the one provided by the @@ -482,32 +539,10 @@ } } ############################################################################# - # - # NOTE: *SPECIAL* This test constraint must be checked first as it can - # determine if subsequent ones will emit warnings. This is only - # applicable to Eagle. - # - if {[isEagle]} then { - # - # NOTE: Has quiet testing support been disabled? - # - if {![info exists no(preQuiet)]} then { - # - # NOTE: There are checks for the "quiet" test constraint prior to - # the real test constraints being initialized. Prepare for - # those checks now. This will have to be repeated later, - # after the real test constraints are initialized. - # - checkForQuiet $test_channel true - } - } - - ############################################################################# - # # NOTE: Has native Tcl shell detection and use been disabled? # if {![info exists no(tclsh)]} then { # @@ -564,11 +599,12 @@ # the interpreter and issue warnings if any are found. The warning # may be used to explain subsequent test failures due to the extra # plugins being loaded (i.e. there are some tests are sensitive to # having "unexpected" plugins loaded). # - if {[isEagle] && ![info exists no(warningForPlugin)] && \ + if {[isEagle] && \ + ![info exists no(warningForPlugin)] && \ ![haveConstraint quiet]} then { foreach loaded [info loaded] { # # HACK: This code assumes that all plugins in the "Eagle._Plugins" # namespace belong to the Eagle core library itself. @@ -765,10 +801,15 @@ tputs $test_channel [appendArgs "---- random order: " \ [expr {[info exists test_random_order] && \ [string is boolean -strict $test_random_order] ? \ $test_random_order : ""}] \n] + + tputs $test_channel [appendArgs "---- uncounted leaks: " \ + [expr {[info exists test_uncounted_leaks] && \ + [string length $test_uncounted_leaks] > 0 ? \ + $test_uncounted_leaks : ""}] \n] tputs $test_channel [appendArgs "---- break on leak: " \ [expr {[info exists test_break_on_leak] && \ [string is boolean -strict $test_break_on_leak] ? \ $test_break_on_leak : ""}] \n] @@ -787,44 +828,49 @@ [expr {[info exists test_exit_on_complete] && \ [string is boolean -strict $test_exit_on_complete] ? \ $test_exit_on_complete : ""}] \n] # - # NOTE: Show the information about which tests and files are being run and/or - # skipped (COMPAT: Tcl). - # - if {[llength $test_flags(-file)] > 0} then { - tputs $test_channel [appendArgs "---- running test files that match: " \ - $test_flags(-file) \n] - } - - if {[llength $test_flags(-notFile)] > 0} then { - tputs $test_channel [appendArgs "---- skipping test files that match: " \ - $test_flags(-notFile) \n] - } - - if {[llength $test_flags(-startFile)] > 0} then { - tputs $test_channel [appendArgs \ - "---- starting with test files that match: " \ - $test_flags(-startFile) \n] - } - - if {[llength $test_flags(-stopFile)] > 0} then { - tputs $test_channel [appendArgs \ - "---- stopping after test files that match: " \ - $test_flags(-stopFile) \n] - } - - if {[llength $test_flags(-match)] > 0} then { - tputs $test_channel [appendArgs "---- running tests that match: " \ - $test_flags(-match) \n] - } - - if {[llength $test_flags(-skip)] > 0} then { - tputs $test_channel [appendArgs "---- skipping tests that match: " \ - $test_flags(-skip) \n] - } + # NOTE: Show the information about which tests and files are being run + # and/or skipped (COMPAT: Tcl). + # + tputs $test_channel [appendArgs "---- running test files that match: " \ + [expr {[info exists test_flags(-file)] && \ + [llength $test_flags(-file)] > 0 ? \ + $test_flags(-file) : ""}] \n] + + tputs $test_channel [appendArgs "---- skipping test files that match: " \ + [expr {[info exists test_flags(-notFile)] && \ + [llength $test_flags(-notFile)] > 0 ? \ + $test_flags(-notFile) : ""}] \n] + + tputs $test_channel [appendArgs \ + "---- starting with test files that match: " \ + [expr {[info exists test_flags(-startFile)] && \ + [llength $test_flags(-startFile)] > 0 ? \ + $test_flags(-startFile) : ""}] \n] + + tputs $test_channel [appendArgs \ + "---- stopping after test files that match: " \ + [expr {[info exists test_flags(-stopFile)] && \ + [llength $test_flags(-stopFile)] > 0 ? \ + $test_flags(-stopFile) : ""}] \n] + + tputs $test_channel [appendArgs "---- running tests that match: " \ + [expr {[info exists test_flags(-match)] && \ + [llength $test_flags(-match)] > 0 ? \ + $test_flags(-match) : ""}] \n] + + tputs $test_channel [appendArgs "---- skipping tests that match: " \ + [expr {[info exists test_flags(-skip)] && \ + [llength $test_flags(-skip)] > 0 ? \ + $test_flags(-skip) : ""}] \n] + + tputs $test_channel [appendArgs "---- verbosity level for tests: " \ + [expr {[info exists test_flags(-verbose)] && \ + [string length $test_flags(-verbose)] > 0 ? \ + $test_flags(-verbose) : ""}] \n] tputs $test_channel [appendArgs "---- path: " \ [expr {[info exists path] && [string length $path] > 0 ? \ [appendArgs \" $path \"] : ""}] \n] @@ -868,11 +914,11 @@ if {[isEagle]} then { # # NOTE: *WARNING* This has the effect of removing test constraints # added prior to this point. # - initializeTests; configureTcltest [list] [list] [list] [list] false + initializeTests; configureTcltest "" [list] [list] [list] [list] false # # NOTE: If the "no(mono)" variable is set (to anything) then any # special test suite hacks for Mono will be disabled. This # does not control or change any hacks for Mono that may @@ -2241,12 +2287,20 @@ ########################################################################### } else { # # NOTE: Make sure that Tcl honors the Eagle test constraints. # - configureTcltest $test_flags(-match) $test_flags(-skip) \ - $test_flags(-constraints) [list] false + configureTcltest \ + [expr {[info exists test_flags(-verbose)] ? \ + $test_flags(-verbose) : ""}] \ + [expr {[info exists test_flags(-match)] ? \ + $test_flags(-match) : [list]}] \ + [expr {[info exists test_flags(-skip)] ? \ + $test_flags(-skip) : [list]}] \ + [expr {[info exists test_flags(-constraints)] ? \ + $test_flags(-constraints) : [list]}] \ + [list] false # # HACK: Reset the test counts for tcltest. # set ::tcltest::numTests(Total) 0 @@ -2385,18 +2439,27 @@ if {![info exists no(isolated.eagle)]} then { checkForFile $test_channel [file join $test_data_path isolated.eagle] } # - # NOTE: This is not currently used by any tests. + # NOTE: For test "basic-1.73". + # + if {![info exists no(callStack.eagle)]} then { + checkForFile $test_channel [file join $test_data_path callStack.eagle] + } + + # + # NOTE: This is not currently used by any tests. However, it is + # used by the sample targets file "Eagle.Sample.targets". # if {![info exists no(evaluate.eagle)]} then { checkForFile $test_channel [file join $test_data_path evaluate.eagle] } # - # NOTE: This is not currently used by any tests. + # NOTE: This is not currently used by any tests. However, it is + # used by the sample targets file "Eagle.Sample.targets". # if {![info exists no(substitute.eagle)]} then { checkForFile $test_channel [file join $test_data_path substitute.eagle] } @@ -2921,11 +2984,12 @@ addConstraint sameOrSlowerBogoCops addConstraint slowerBogoCops if {![info exists no(bogoCopsMultipliers)]} then { foreach multiplier $test_base_cops_multipliers { - if {$test_cops <= $test_base_cops * (1.0 / $multiplier)} then { + if {$multiplier != 0 && \ + $test_cops <= $test_base_cops * (1.0 / $multiplier)} then { addConstraint [appendArgs slowerBogoCopsBy $multiplier X] } } unset multiplier