Nim/tests
havardjohn f4bbf3bf0b
Add use of Windows Wide CRT API for env. vars (#20084)
* Add use of Windows Wide CRT API for env. vars

Replaces use of CRT API `getenv` and `putenv` with respectively
`_wgetenv` and `_wputenv`. Motivation is to reliably convert environment
variables to UTF-8, and the wide API is best there, because it's
reliably UTF-16.

Changed the hack in `lib/std/private/win_setenv.nim` by switching the
order of the Unicode and MBCS environment update; Unicode first, MBCS
second. Because `_wgetenv`/`_wputenv` is now used, the Unicode
environment will be initialized, so it should always be updated.

Stop updating MBCS environment with the name of `getEnv`. It's not
necessarily true that MBCS encoding and the `string` encoding is the
same. Instead convert UTF-16 to current Windows code page with
`wcstombs`, and use that string to update MBCS.

Fixes regression in `6b3c77e` that caused `std/envvars.getEnv` or
`std/os.getEnv` on Windows to return non-UTF-8 encoded strings.

Add tests that test environment variables with Unicode characters in
their name or value.

* Fix test issues

Fixes

* `nim cpp` didn't compile the tests
* Nimscript import of `tosenv.nim` from `test_nimscript.nims` failed
  with "cannot importc"

* Fix missing error check on `wcstombs`

* Fix ANSI testing errors

* Separate ANSI-related testing to their own tests, and only executing
  them if running process has a specific code page
  * Setting locale with `setlocale` was not reliable and didn't work on
    certain machines
* Add handling of a "no character representation" error in second
  `wcstombs` call

* tests/newruntime_misc: Increment allocCount

Increments overall allocations in `tnewruntime_misc` test. This is
because `getEnv` now does an additional allocation: allocation of the
UTF-16 string used as parameter to `c_wgetenv`.

* Revert "tests/newruntime_misc: Increment allocCount"

This reverts commit 4d4fe8bd3edb1bfc6d600f247af797c7552f5477.

* tests/newruntime_misc: Increment allocCount on Windows

Increments overall allocations in `tnewruntime_misc` test for Windows.
This is because `getEnv` on Windows now does an additional allocation:
allocation of the UTF-16 string used as parameter to `c_wgetenv`.

* Refactor, adding suggestions from code review

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>

* Document, adding suggestions

Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>

Co-authored-by: ringabout <43030857+ringabout@users.noreply.github.com>
Co-authored-by: Clay Sweetser <Varriount@users.noreply.github.com>
2022-08-20 04:30:11 -04:00
..
actiontable
alias
align testament: error instead of silently ignore invalid targets; remove pointless alias target vs targets; document matrix; DRY (#16343) 2020-12-14 10:58:29 +01:00
ambsym
arc dec inLoop after exiting the while scope in computeLiveRanges [backport] (#19918) 2022-06-29 22:37:24 +08:00
arithm JS: fix div uint64 no truncation (#16899) 2021-02-15 14:22:46 +01:00
array style usages part one (openarray => openArray) (#19321) 2022-01-04 13:29:50 +01:00
assert Improve documentation for assertions (#16988) 2021-02-11 07:21:27 +01:00
assign use typeof instead type (#16962) 2021-02-08 09:46:07 +01:00
astoverload
astspec fix deprecated example (#18721) 2021-08-21 08:22:00 +02:00
async Better error message and tests for bad await (#19622) 2022-04-13 23:03:46 +02:00
avr default threads on (#19368) 2022-07-06 13:06:41 +02:00
benchmarks fix #16752: threadvar now works with importcpp types; osx now uses native TLS (--tlsEmulation:off), which can be orders of magnitude faster (#16750) 2021-01-27 22:35:43 +01:00
bind typeToString: type float => typedesc[float] (#17011) 2021-02-12 17:10:20 +01:00
borrow Fixed distinct composite type class proc borrowing (#18904) 2021-10-26 11:29:07 +02:00
casestmt fixes #20031; uint64 is an ordinal type since 1.0 (#20094) 2022-07-27 11:15:51 +02:00
ccgbugs fixes #20107 (#20246) [backport] 2022-08-19 13:42:08 +02:00
ccgbugs2 [add testcase] NRVO does not occur with init procedures (#19462) 2022-01-29 14:06:54 +01:00
clearmsg
closure closes #11042; add testcase (#19935) 2022-06-28 16:49:31 +08:00
cnstseq
collections rename nimEnableHashRef [backport] (#18941) 2021-10-04 21:28:13 +02:00
compilepragma
compiler fix #20012 (#20013) 2022-07-13 20:55:33 +08:00
compilerapi big steps torwards an efficient, simple IC implementation (#16543) 2021-01-02 07:30:39 +01:00
compilerfeatures fix #16693: testament spec nimout too lax (#16698) 2021-04-04 13:47:28 -07:00
compiles deprecate unsafeAddr; extend addr (#19373) 2022-01-16 11:08:38 +01:00
concat
concepts Fix fixAbstractType for user defined typeclasses, fixes #19730 & #18409 (#19732) 2022-04-30 15:58:58 +02:00
constr semLambda removed, semProcAux reworked (#17379) 2021-03-17 19:51:50 +01:00
constraints
constructors Turn some of the errors back into warnings 2020-04-01 19:38:44 +02:00
controlflow Make unreachable code a warning instead of an error (#14816) 2020-06-29 08:49:53 +02:00
converter fix #18986; Import/except doesn't work on devel [backport: 1.6] (#19687) 2022-04-06 16:17:09 +02:00
coroutines fix #15628 (#16387) 2021-01-21 17:31:47 +01:00
cpp move io out of system (#19442) 2022-02-02 17:10:11 +01:00
defaultprocparam Add testcase for #12252 (#15676) 2020-10-22 12:51:03 +02:00
deprecated even lighter version of #17938: fix most issues with UnusedImport, XDeclaredButNotUsed, etc; fix #17511, #17510, #14246 (without realModule) (#18362) 2021-06-26 15:21:46 +02:00
destructor Add use of Windows Wide CRT API for env. vars (#20084) 2022-08-20 04:30:11 -04:00
dir with space
discard improve the 'has to be discarded' error message 2020-05-02 22:31:19 +02:00
distinct Fix distinct requiresInit test and manual (#19901) 2022-06-22 12:36:30 +02:00
distros fix tdistros test which was failing on Nightlies 2020-04-28 15:59:32 +02:00
dll don't use {.rtl.} for generics, otherwise -d:useNimRtl gives ambiguous identifier nimrtl error (#18406) 2021-07-01 11:14:01 +02:00
effects closes #6559; add testcase (#20200) 2022-08-12 09:03:10 +08:00
enum add testcase for #16462 (#19692) 2022-04-07 20:57:50 +02:00
errmsgs Stop type aliases from inheriting sfUsed (#19861) 2022-06-04 06:25:21 +02:00
exception nimRawSetjmp: support Windows (#19197) 2021-12-10 06:31:29 +01:00
exprs fix #16693: testament spec nimout too lax (#16698) 2021-04-04 13:47:28 -07:00
fields use doAssert in tests (#16486) 2020-12-28 14:13:21 +01:00
float rename nimFpRoundtrips => nimPreviewFloatRoundtrip (#18566) 2021-07-23 14:57:47 -07:00
fragmentation
friends
gc remove shallowCopy for ARC/ORC (#20070) 2022-07-26 16:51:01 +02:00
generics No longer segfault when using a typeclass with a self referencing type (#19467) 2022-02-02 09:38:21 +01:00
gensym fixes yet another gensym regression (#12145) 2019-09-06 00:45:00 +02:00
global
ic default threads on (#19368) 2022-07-06 13:06:41 +02:00
implicit
import_in_config
importalls typo: nonexistant => nonexistent (#17918) 2021-05-02 00:26:41 +02:00
init close #17636 (#17643) 2021-04-06 16:20:01 +02:00
isolate fixes #19013 [backport:1.6] (#19111) 2021-11-09 12:43:16 +01:00
iter Fixed compilation of void closureiters with try stmt (#20138) [backport] 2022-08-03 08:46:36 +02:00
js [js] add testcase for array indexDefect and remove todo (#19838) 2022-06-10 20:33:44 +02:00
lent Optimize lent in JS [backport:1.6] (#19393) 2022-01-17 13:03:40 +01:00
let Allow let to not have value when using importc (#14258) 2020-05-12 20:28:18 +02:00
lexer unicode operator bugfixes (#18802) 2021-09-04 17:49:27 +02:00
lookups make megatest consistent with unjoined tests wrt newlines, honor newlines in output spec (#16151) 2020-11-28 09:09:31 +01:00
macros fix #20067, fix #18976 [backport] (#20069) 2022-07-22 15:04:07 +08:00
magics style usages part one (openarray => openArray) (#19321) 2022-01-04 13:29:50 +01:00
manyloc default threads on (#19368) 2022-07-06 13:06:41 +02:00
metatype fixes #18612; apply cache and memcmp for methods in arc/orc (#19749) 2022-04-26 20:14:39 +02:00
method fixes #18612; apply cache and memcmp for methods in arc/orc (#19749) 2022-04-26 20:14:39 +02:00
misc fixes #20149; fixes #16762; hintAsError and warningAsError now ignore foreign packages (#20151) 2022-08-19 16:24:09 -04:00
modules Refactor and doc package handling, module name mangling (#19821) 2022-05-30 18:52:19 +02:00
namedparams fixes #12196 2019-09-16 12:12:44 +02:00
navigator IC navigator: added support for include files (#17784) 2021-04-19 22:37:09 +02:00
newconfig fix #8219; nim check/dump shouldn't run single nimscript project [backport: 1.6] (#19641) 2022-03-26 11:50:15 +01:00
nimble testament spec: remove errmsg alias of errormsg (#16188) 2020-11-29 17:32:34 -08:00
nimdoc fix #16993, #18054, #17835 runnableExamples now works with templates and nested templates (#18082) 2021-06-02 09:02:14 -07:00
niminaction default threads on (#19368) 2022-07-06 13:06:41 +02:00
notnil add testcase for #9466 (#17538) 2021-03-28 00:57:22 -07:00
objects nvro don't touch cdecl types [backport: 1.6] (#19461) 2022-01-28 09:53:42 +01:00
objvariant fix #19266; allow reassign discriminant field (#19567) 2022-02-25 20:33:28 +01:00
openarray style usages part one (openarray => openArray) (#19321) 2022-01-04 13:29:50 +01:00
osproc fixes #18058 (#18162) 2021-06-03 17:12:45 +02:00
overflw Fix #15706 (#15846) 2020-11-07 08:00:41 +00:00
overload deprecate unsafeAddr; extend addr (#19373) 2022-01-16 11:08:38 +01:00
package Refactor and doc package handling, module name mangling (#19821) 2022-05-30 18:52:19 +02:00
package_level_objects
parallel add colon (#17834) 2021-04-24 18:33:29 +01:00
parser fixes #19662; Indent level errored for first line (#19718) 2022-04-25 12:00:23 +02:00
pragmas fixes #18612; apply cache and memcmp for methods in arc/orc (#19749) 2022-04-26 20:14:39 +02:00
proc manual: Document that comma propagates the default values of parameters (#19080) 2021-11-03 08:08:50 +01:00
procvar
range change --hint[X] => --hint:X in nim repo (avoids shell quoting issues) (#18085) 2021-05-26 09:51:48 +02:00
rational Error -> Defect for defects (#13908) 2020-04-28 19:56:01 +02:00
realtimeGC testament: remove deadcode related to realtimeGC, testC, callCCompiler (#18087) 2021-05-26 11:49:01 -07:00
sandwich fixes #11225; generic sandwich problems; [backport:1.2] (#17255) 2021-03-09 20:19:24 +01:00
sets Add test for issue 15435 (#19079) 2021-11-03 06:46:34 +01:00
showoff style usages part one (openarray => openArray) (#19321) 2022-01-04 13:29:50 +01:00
slice allow HSlice bounded by constants of distinct types (#19219) [backport:1.2] 2021-12-06 20:38:23 +01:00
specialops tests and docs for call operator (#16980) 2021-02-09 12:18:16 +01:00
statictypes even lighter version of #17938: fix most issues with UnusedImport, XDeclaredButNotUsed, etc; fix #17511, #17510, #14246 (without realModule) (#18362) 2021-06-26 15:21:46 +02:00
stdlib Add use of Windows Wide CRT API for env. vars (#20084) 2022-08-20 04:30:11 -04:00
stmt fix #15972 (#15994) 2020-11-18 00:14:14 +00:00
strictnotnil deprecate unsafeAddr; extend addr (#19373) 2022-01-16 11:08:38 +01:00
stylecheck closes #12955; add testcase (#20223) 2022-08-15 18:50:12 +08:00
system default threads on (#19368) 2022-07-06 13:06:41 +02:00
template fix #20002 (#20004) 2022-07-15 12:37:08 +02:00
testament testament :show duration also for failed tests; improve tshould_not_work; mitigate #17946 tchannels timeouts (#17947) 2021-05-08 17:13:47 +02:00
testdata Add new self-signed 4096 bit certificate to testdata (#19758) 2022-05-08 11:54:04 +02:00
threads add testcase for #6499 #12229 #7172 (#18547) 2021-07-21 09:47:06 +02:00
tools change --hint[X] => --hint:X in nim repo (avoids shell quoting issues) (#18085) 2021-05-26 09:51:48 +02:00
trmacros Reenable a few tests 2020-07-14 19:50:42 +02:00
tuples style usages part one (openarray => openArray) (#19321) 2022-01-04 13:29:50 +01:00
typerel style usages part one (openarray => openArray) (#19321) 2022-01-04 13:29:50 +01:00
types Don't reject types directly on AST (#19407) 2022-01-19 12:38:14 +01:00
untestable fixes broken ssl tests (#20181) 2022-08-09 11:48:17 +08:00
usingstmt Clean up macros (#14959) 2020-07-14 16:44:56 +02:00
valgrind testament: support disabled:osx as alias to disabled:macosx (#17124) 2021-02-22 11:01:15 +01:00
varres close #17636 (#17643) 2021-04-06 16:20:01 +02:00
varstmt
views closes #15897; add testcase (#19961) 2022-07-02 16:51:21 +08:00
vm [vm]fixes #15974 #12551 #19464 #16020 #16780 #16613 #14553 #19909 #18641 (#19902) [backport] 2022-06-22 08:43:58 +02:00
whenstmt when statements branches exit early (#17143) 2021-02-22 12:27:23 +01:00
ast_pattern_matching.nim unify tuple expressions (#13793) 2021-03-30 02:06:51 +02:00
config.nims Revert "enable nimPreviewDotLikeOps" (#19919) 2022-08-03 22:39:14 +08:00
dummy.txt
js.html
js.nim
m14634.nim use doAssert in tests (#16486) 2020-12-28 14:13:21 +01:00
mmaptest.nim Enable customizing PageShift to set PageSize for embedded targets (#19129) 2021-11-16 20:30:07 +01:00
readme.md testament: remove deadcode related to realtimeGC, testC, callCCompiler (#18087) 2021-05-26 11:49:01 -07:00
rectest.nim
stckovfl.nim
test_nimscript.nims correct typos (#19485) 2022-02-03 11:15:46 +08:00

This directory contains the test cases.

Each test must have a filename of the form: t*.nim

Note: Testament is only aware of tests under a directory (eg tests/foo/) and will ignore top-level tests like tests/tbar.nim.

Specs

Each test can contain a spec in a discard """ ... """ block.

Check out the parseSpec procedure in the specs module for a full and reliable reference

action

Specifies what action this test should take.

Default: run

Options:

  • compile - compiles the module and fails the test if compilations fails.
  • run - compiles and runs the module, fails the test if compilation or execution of test code fails.
  • reject - compiles the module and fails the test if compilation succeeds.

There are certain spec keys that imply run, including output and outputsub.

cmd

Specifies the Nim command to use for compiling the test.

There are a number of variables that are replaced in this spec option:

  • $target - the compilation target, e.g. c.
  • $options - the options for the compiler.
  • $file - the filename of the test.
  • $filedir - the directory of the test file.

Example:

discard """
  cmd: "nim $target --nimblePath:./nimbleDir/simplePkgs $options $file"
"""

Categories

Each folder under this directory represents a test category, which can be tested by running koch tests pcat <category> (or cat to avoid parallel testing, which is slower).

The folder dll contains simple DLL tests.

The folder realtimeGC contains a test for validating that the realtime GC can run properly without linking against the nimrtl.dll/so.