summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/parsecfg.nim11
-rw-r--r--testament/categories.nim288
-rw-r--r--testament/specs.nim13
-rw-r--r--testament/tester.nim25
-rw-r--r--tests/constr/tconstr2.nim2
-rw-r--r--tests/controlflow/tcontrolflow.nim10
-rw-r--r--tests/float/tfloat3.nim11
-rw-r--r--tests/generics/tbintre2.nim1
-rw-r--r--tests/generics/tbintree.nim2
-rw-r--r--tests/generics/texplicitgeneric1.nim2
-rw-r--r--tests/generics/texplicitgeneric2.nim1
-rw-r--r--tests/generics/tgeneric0.nim5
-rw-r--r--tests/generics/tgenericprocvar.nim1
-rw-r--r--tests/iter/tcountup.nim7
-rw-r--r--tests/iter/titer5.nim1
-rw-r--r--tests/iter/titer6.nim2
-rw-r--r--tests/iter/titer7.nim4
-rw-r--r--tests/iter/titervaropenarray.nim2
-rw-r--r--tests/macros/tstringinterp.nim1
-rw-r--r--tests/metatype/tmatrix1.nim4
-rw-r--r--tests/metatype/tmetatypematrix.nim1
-rw-r--r--tests/misc/tack.nim1
-rw-r--r--tests/misc/tpos.nim1
-rw-r--r--tests/seq/tseq.nim1
-rw-r--r--tests/template/annotate.nim2
-rw-r--r--tests/usingstmt/tusingstatement.nim2
-rw-r--r--tests/varstmt/tvardecl.nim2
-rw-r--r--tests/vm/tvmmisc.nim5
28 files changed, 177 insertions, 231 deletions
diff --git a/lib/pure/parsecfg.nim b/lib/pure/parsecfg.nim
index efe679d67..b991dd57f 100644
--- a/lib/pure/parsecfg.nim
+++ b/lib/pure/parsecfg.nim
@@ -386,6 +386,17 @@ proc warningStr*(c: CfgParser, msg: string): string {.rtl, extern: "npc$1".} =
   result = `%`("$1($2, $3) Warning: $4",
                [c.filename, $getLine(c), $getColumn(c), msg])
 
+proc ignoreMsg*(c: CfgParser, e: CfgEvent): string {.rtl, extern: "npc$1".} =
+  ## returns a properly formatted warning message containing that
+  ## an entry is ignored.
+  case e.kind
+  of cfgSectionStart: result = c.warningStr("section ignored: " & e.section)
+  of cfgKeyValuePair: result = c.warningStr("key ignored: " & e.key)
+  of cfgOption:
+    result = c.warningStr("command ignored: " & e.key & ": " & e.value)
+  of cfgError: result = e.msg
+  of cfgEof: result = ""
+
 proc getKeyValPair(c: var CfgParser, kind: CfgEventKind): CfgEvent =
   if c.tok.kind == tkSymbol:
     result.kind = kind
diff --git a/testament/categories.nim b/testament/categories.nim
index d9089e941..4c34eb1d1 100644
--- a/testament/categories.nim
+++ b/testament/categories.nim
@@ -10,6 +10,58 @@
 ## Include for the tester that contains test suites that test special features
 ## of the compiler.
 
+const
+  specialCategories = [
+    "assert",
+    "async",
+    "debugger",
+    "dll",
+    "examples",
+    "flags",
+    "gc",
+    "io",
+    "js",
+    "lib",
+    "longgc",
+    "manyloc",
+    "nimble-all",
+    "nimble-core",
+    "nimble-extra",
+    "niminaction",
+    "rodfiles",
+    "threads",
+    "untestable",
+    "stdlib",
+    "testdata",
+    "nimcache",
+    "coroutines",
+    "osproc"
+  ]
+
+
+# these tests still have bugs. At some point when the bugs are fixd
+# this should become empty.
+
+# exclude for various reasons
+const
+  specialDisabedTests = [
+    "tests/dir with space/tspace.nim", # can't import dir with spaces.
+    "tests/method/tmultim.nim",        # (77, 8) Error: method is not a base
+    "tests/system/talloc2.nim",        # too much memory
+    "tests/collections/ttables.nim",   # takes too long
+    "tests/system/tparams.nim",        # executes itself with parameters
+    "tests/stdlib/tquit.nim",          # not testing for obvious reasons
+    "tests/system/trealloc.nim",       # out of memory
+    "tests/system/t7894.nim",          # causes out of memory in later tests
+    "tests/types/tissues_types.nim",   # causes out of memory with --gc:boehm
+    "tests/pragmas/tused.nim",         # paths in nimout differ when imported
+    "tests/generics/trtree.nim",       # very very ugly test
+    "tests/array/tarray.nim",          #
+    "tests/destructor/turn_destroy_into_finalizer.nim", # fails when imported
+    "tests/misc/tnew.nim",
+    "tests/misc/tcmdline.nim"
+  ]
+
 # included from tester.nim
 # ---------------- ROD file tests ---------------------------------------------
 
@@ -327,24 +379,15 @@ proc testNimInAction(r: var TResults, cat: Category, options: string) =
     let filename = "tests" / test.addFileExt("nim")
     let testHash = getMD5(readFile(filename).string)
     doAssert testHash == refHashes[i], "Nim in Action test " & filename & " was changed."
-
-
-
   # Run the tests.
   for testfile in tests:
     test "tests/" & testfile & ".nim"
-
   let jsFile = "tests/niminaction/Chapter8/canvas/canvas_test.nim"
   testJS jsFile
-
   let cppFile = "tests/niminaction/Chapter8/sfml/sfml_test.nim"
   testCPP cppFile
 
-
 # ------------------------- manyloc -------------------------------------------
-#proc runSpecialTests(r: var TResults, options: string) =
-#  for t in ["lib/packages/docutils/highlite"]:
-#    testSpec(r, t, options)
 
 proc findMainFile(dir: string): string =
   # finds the file belonging to ".nim.cfg"; if there is no such file
@@ -382,20 +425,18 @@ proc testStdlib(r: var TResults, pattern, options: string, cat: Category) =
   for testFile in os.walkFiles(pattern):
     let name = extractFilename(testFile)
     if name notin disabledFiles:
-
-
       let contents = readFile(testFile).string
-
       var testObj = makeTest(testFile, options, cat)
       if "when isMainModule" notin contents:
         testObj.spec.action = actionCompile
       testSpec r, testObj
 
 # ----------------------------- nimble ----------------------------------------
-type PackageFilter = enum
-  pfCoreOnly
-  pfExtraOnly
-  pfAll
+type
+  PackageFilter = enum
+    pfCoreOnly
+    pfExtraOnly
+    pfAll
 
 var nimbleDir = getEnv("NIMBLE_DIR").string
 if nimbleDir.len == 0: nimbleDir = getHomeDir() / ".nimble"
@@ -425,7 +466,6 @@ proc getPackageDir(package: string): string =
 
 iterator listPackages(filter: PackageFilter): tuple[name, url: string] =
   let packageList = parseFile(packageIndex)
-
   for package in packageList.items():
     let
       name = package["name"].str
@@ -485,19 +525,28 @@ proc `&.?`(a, b: string): string =
   # candidate for the stdlib?
   result = if b.startswith(a): b else: a & b
 
-#proc `&?.`(a, b: string): string = # not used
-  # candidate for the stdlib?
-  #result = if a.endswith(b): a else: a & b
-
 proc processSingleTest(r: var TResults, cat: Category, options, test: string) =
   let test = "tests" & DirSep &.? cat.string / test
   let target = if cat.string.normalize == "js": targetJS else: targetC
-
   if existsFile(test):
     testSpec r, makeTest(test, options, cat), {target}
-  else: echo "[Warning] - ", test, " test does not exist"
+  else:
+    echo "[Warning] - ", test, " test does not exist"
 
-proc isJoinableSpec(spec: TSpec): bool
+proc isJoinableSpec(spec: TSpec): bool =
+  result = not spec.sortoutput and
+    spec.action == actionRun and
+    spec.file.replace('\\', '/') notin specialDisabedTests and
+    not fileExists(spec.file.changeFileExt("cfg")) and
+    not fileExists(parentDir(spec.file) / "nim.cfg") and
+    spec.cmd.len == 0 and
+    spec.err != reIgnored and
+    spec.exitCode == 0 and
+    spec.input.len == 0 and
+    spec.nimout.len == 0 and
+    spec.outputCheck != ocSubstr and
+    spec.ccodeCheck.len == 0 and
+    (spec.targets == {} or spec.targets == {targetC})
 
 proc processCategory(r: var TResults, cat: Category, options: string, runJoinableTests: bool) =
   case cat.string.normalize
@@ -560,191 +609,64 @@ proc processCategory(r: var TResults, cat: Category, options: string, runJoinabl
     if testsRun == 0:
       echo "[Warning] - Invalid category specified \"", cat.string, "\", no tests were run"
 
+proc norm(s: var string) =
+  while true:
+    let tmp = s.replace("\n\n", "\n")
+    if tmp == s: break
+    s = tmp
+  s = s.strip
 
-const specialCategories = [
-  "async",
-  "debugger",
-  "dll",
-  "examples",
-  "flags",
-  "gc",
-  "io",
-  "js",
-  "lib",
-  "longgc",
-  "manyloc",
-  "nimble-all",
-  "nimble-core",
-  "nimble-extra",
-  "niminaction",
-  "rodfiles",
-  "threads",
-  "untestable",
-  "stdlib",
-]
-
-
-# these tests still have bugs. At some point when the bugs are fixd
-# this should become empty.
-
-# exclude for various reasons
-const specialDisabedTests = [
-  "tests/dir with space/tspace.nim", # can't import dir with spaces.
-  "tests/method/tmultim.nim",        # (77, 8) Error: method is not a base
-  "tests/system/talloc2.nim",        # too much memory
-  "tests/collections/ttables.nim",   # takes too long
-  "tests/system/tparams.nim",        # executes itself with parameters
-  "tests/stdlib/tquit.nim",          # not testing for obvious reasons
-  "tests/system/trealloc.nim",       # out of memory
-  "tests/system/t7894.nim",          # causes out of memory in later tests
-  "tests/types/tissues_types.nim",   # causes out of memory with --gc:boehm
-  "tests/pragmas/tused.nim",         # paths in nimout differ when imported
-  "tests/generics/trtree.nim",       # very very ugly test
-  "tests/array/tarray.nim",          #
-  "tests/osproc/texecps.nim",        # uses getAppFileName() to start itself with arguments
-  "tests/destructor/turn_destroy_into_finalizer.nim", # fails when imported
-  "tests/osproc/texitsignal.nim",    # uses getAppFileName() to start itself with arguments
-]
-
-proc isJoinableSpec(spec: TSpec): bool =
-
-  if spec.sortoutput:
-    return false
-
-  if spec.action != actionRun:
-    return false
-
-  if spec.file in specialDisabedTests:
-    return false
-
-  if fileExists(spec.file & ".cfg"):
-    return false
-
-  if fileExists(parentDir(spec.file) / "nim.cfg"):
-    return false
-
-  if spec.cmd != cmdTemplate():
-    return false
-
-  if spec.err == reIgnored:
-    return false
-
-  if spec.exitCode != 0:
-    return false
-
-  if spec.input != "":
-    return false
-
-  if spec.targets != {} and spec.targets != {targetC}:
-    return false
-
-  return true
-
-
-proc runJoinedTest(): bool =
+proc runJoinedTest(testsDir: string): bool =
   ## returs a list of tests that have problems
-  var specs:seq[TSpec]
+  var specs: seq[TSpec] = @[]
 
-  for file in os.walkFiles("tests/*/t*.nim"):
-    let a = find(file, '/') + 1
-    let b = find(file, '/', a)
-    let cat = file[a ..< b]
-
-    if cat in specialCategories:
-      continue
-
-    let spec = parseSpec(file)
-
-    if isJoinableSpec(spec):
-      specs.add spec
+  for kind, dir in walkDir(testsDir):
+    assert testsDir.startsWith(testsDir)
+    let cat = dir[testsDir.len .. ^1]
+    if kind == pcDir and cat notin specialCategories:
+      for file in os.walkFiles(testsDir / cat / "t*.nim"):
+        let spec = parseSpec(file)
+        if isJoinableSpec(spec):
+          specs.add spec
 
   echo "joinable specs: ", specs.len
 
   var megatest: string
   for runSpec in specs:
-    megatest.add "import \""
+    megatest.add "import r\""
     megatest.add runSpec.file
     megatest.add "\"\n"
 
   writeFile("megatest.nim", megatest)
 
-  let args = ["c", "-d:testing", "--gc:boehm", "megatest.nim"]
+  const args = ["c", "-d:testing", "--listCmd", "megatest.nim"]
   var (buf, exitCode) = execCmdEx2(command = "nim", args = args, options = {poStdErrToStdOut, poUsePath}, input = "")
   if exitCode != 0:
+    echo buf
     quit("megatest compilation failed")
 
   echo "compilation ok"
 
-  var nimoutOK = true
-  for runSpec in specs:
-    for line in runSpec.nimout.splitLines:
-      if buf.find(line) < 0:
-        echo "could not find: ", line
-        echo runSpec.file
-        nimoutOK = false
-
-  if nimoutOK:
-    echo "nimout OK"
-  else:
-    echo "nimout FAIL"
-
   (buf, exitCode) = execCmdEx2("./megatest", [], {poStdErrToStdOut}, "")
   if exitCode != 0:
     quit("megatest execution failed")
 
   echo "run ok"
 
-
+  norm buf
   writeFile("outputGotten.txt", buf)
   var outputExpected = ""
-
-  var outputErrorCount = 0
-  var currentPos = 0
-
-  var lastLine = ""
-
-  # when a lot of output is skipped, this can be the cause why a later test fails.
-  var warnings = ""
-
   for i, runSpec in specs:
-    outputExpected.add runSpec.output
-    if outputExpected[^1] != '\n':
-       outputExpected.add '\n'
-
-    for line in runSpec.output.splitLines:
-      if line != "":
-        #if line == "2":
-        #  echo "found the test: ", runSpec.file
-        let newPos = buf.find(line, currentPos)
-        if newPos < 0:
-          if outputErrorCount < 5:
-            echo "could not find:      ", line
-            echo "it could be, because the test failed, or too much output is discarded by a previous search in the output."
-            echo warnings
-            warnings.setLen 0
-
-            # don't spam too much of this
-            if outputErrorCount == 0:
-              echo "############"
-              echo buf[currentPos-200 ..< currentPos]
-              echo "| (", current_pos, ")"
-              echo buf[currentPos ..< min(currentPos+200, buf.len)]
-              echo "############"
-
-          inc outputErrorCount
-        else:
-          if currentPos + lastLine.len * 2 < newPos:
-            warnings.addLine "Warning long skip in search for: ", line
-            warnings.addLine "in test: ", runSpec.file
-          currentPos = newPos + line.len
-
-        lastLine = line
-  if outputErrorCount == 0:
-    echo "output OK"
+    outputExpected.add runSpec.output.strip
+    outputExpected.add '\n'
+  norm outputExpected
+
+  if buf != outputExpected:
+    writeFile("outputExpected.txt", outputExpected)
+    discard execShellCmd("diff -uNdr outputExpected.txt outputGotten.txt")
+    echo "output different!"
+    result = false
   else:
-    echo "output FAIL (", outputErrorCount, " errors)"
-
-  writeFile("outputExpected.txt", outputExpected)
-
-  # removeFile("megatest.nim")
-  return nimoutOK and outputErrorCount == 0
+    echo "output OK"
+    removeFile("megatest.nim")
+    result = true
diff --git a/testament/specs.nim b/testament/specs.nim
index 9cbf2a9f6..6283d18d7 100644
--- a/testament/specs.nim
+++ b/testament/specs.nim
@@ -14,9 +14,6 @@ var compilerPrefix* = "compiler" / "nim"
 let isTravis* = existsEnv("TRAVIS")
 let isAppVeyor* = existsEnv("APPVEYOR")
 
-proc cmdTemplate*(): string =
-  compilerPrefix & " $target --hints:on -d:testing --nimblePath:tests/deps $options $file"
-
 type
   TTestAction* = enum
     actionRun = "run"
@@ -70,6 +67,12 @@ type
     nimout*: string
     parseErrors*: string # when the spec definition is invalid, this is not empty.
 
+proc getCmd*(s: TSpec): string =
+  if s.cmd.len == 0:
+    result = compilerPrefix & " $target --hints:on -d:testing --nimblePath:tests/deps $options $file"
+  else:
+    result = s.cmd
+
 const
   targetToExt*: array[TTarget, string] = ["c", "cpp", "m", "js"]
   targetToCmd*: array[TTarget, string] = ["c", "cpp", "objc", "js"]
@@ -97,9 +100,6 @@ proc extractSpec(filename: string): string =
 when not defined(nimhygiene):
   {.pragma: inject.}
 
-proc defaultSpec*(): TSpec =
-  result.cmd = cmdTemplate()
-
 proc parseTargets*(value: string): set[TTarget] =
   for v in value.normalize.splitWhitespace:
     case v
@@ -119,7 +119,6 @@ proc addLine*(self: var string; a,b: string) =
   self.add "\n"
 
 proc parseSpec*(filename: string): TSpec =
-  result = defaultSpec()
   result.file = filename
   let specStr = extractSpec(filename)
   var ss = newStringStream(specStr)
diff --git a/testament/tester.nim b/testament/tester.nim
index d82d5ec0c..b290bb3b0 100644
--- a/testament/tester.nim
+++ b/testament/tester.nim
@@ -378,13 +378,13 @@ proc testSpec(r: var TResults, test: TTest, targets: set[TTarget] = {}) =
 
     case expected.action
     of actionCompile:
-      var given = callCompiler(expected.cmd, test.name, test.options, target,
+      var given = callCompiler(expected.getCmd, test.name, test.options, target,
         extraOptions=" --stdout --hint[Path]:off --hint[Processing]:off")
       compilerOutputTests(test, target, given, expected, r)
     of actionRun:
       # In this branch of code "early return" pattern is clearer than deep
       # nested conditionals - the empty rows in between to clarify the "danger"
-      var given = callCompiler(expected.cmd, test.name, test.options,
+      var given = callCompiler(expected.getCmd, test.name, test.options,
                                target)
 
       if given.err != reSuccess:
@@ -438,7 +438,7 @@ proc testSpec(r: var TResults, test: TTest, targets: set[TTarget] = {}) =
                           bufB, reExitCodesDiffer)
         continue
 
-      if (expected.outputCheck == ocEqual  and expected.output !=  bufB) or
+      if (expected.outputCheck == ocEqual and expected.output != bufB) or
          (expected.outputCheck == ocSubstr and expected.output notin bufB):
         given.err = reOutputsDiffer
         r.addResult(test, target, expected.output, bufB, reOutputsDiffer)
@@ -448,7 +448,7 @@ proc testSpec(r: var TResults, test: TTest, targets: set[TTarget] = {}) =
       continue
 
     of actionReject:
-      var given = callCompiler(expected.cmd, test.name, test.options,
+      var given = callCompiler(expected.getCmd, test.name, test.options,
                                target)
       cmpMsgs(r, expected, given, test, target)
       continue
@@ -458,7 +458,7 @@ proc testC(r: var TResults, test: TTest, action: TTestAction) =
   let tname = test.name.addFileExt(".c")
   inc(r.total)
   maybeStyledEcho "Processing ", fgCyan, extractFilename(tname)
-  var given = callCCompiler(cmdTemplate(), test.name & ".c", test.options, targetC)
+  var given = callCCompiler(getCmd(TSpec()), test.name & ".c", test.options, targetC)
   if given.err != reSuccess:
     r.addResult(test, targetC, "", given.msg, given.err)
   elif action == actionRun:
@@ -471,7 +471,7 @@ proc testExec(r: var TResults, test: TTest) =
   # runs executable or script, just goes by exit code
   inc(r.total)
   let (outp, errC) = execCmdEx(test.options.strip())
-  var given: TSpec = defaultSpec()
+  var given: TSpec
   if errC == 0:
     given.err = reSuccess
   else:
@@ -497,15 +497,9 @@ else:
     # array of modules disabled from compilation test of stdlib.
     disabledFiles = ["-"]
 
-
-
-
 include categories
 
-# proc runCaasTests(r: var TResults) =
-#   for test, output, status, mode in caasTestsRunner():
-#     r.addResult(test, "", output & "-> " & $mode,
-#                 if status: reSuccess else: reOutputsDiffer)
+const testsDir = "tests" & DirSep
 
 proc main() =
   os.putenv "NIMTEST_COLOR", "never"
@@ -556,9 +550,8 @@ proc main() =
   var r = initResults()
   case action
   of "all":
-    doAssert runJoinedTest()
+    doAssert runJoinedTest(testsDir)
 
-    let testsDir = "tests" & DirSep
     var myself = quoteShell(findExe("testament" / "tester"))
     if targetsStr.len > 0:
       myself &= " " & quoteShell("--targets:" & targetsStr)
@@ -587,7 +580,7 @@ proc main() =
   of "html":
     generateHtml(resultsFile, optFailing)
   of "stats":
-    discard runJoinedTest()
+    discard runJoinedTest(testsDir)
   else:
     quit Usage
 
diff --git a/tests/constr/tconstr2.nim b/tests/constr/tconstr2.nim
index b911de548..2557d7db9 100644
--- a/tests/constr/tconstr2.nim
+++ b/tests/constr/tconstr2.nim
@@ -18,5 +18,5 @@ const
     (s: "hi", x: 69, y: 45, z: 0.0, chars: {'a', 'b', 'c'}),
     (s: "hi", x: 69, y: 45, z: 1.0, chars: {'a'})]
 
-write(stdout, things[0].x)
+writeLine(stdout, things[0].x)
 #OUT 69
diff --git a/tests/controlflow/tcontrolflow.nim b/tests/controlflow/tcontrolflow.nim
index 9019e55b2..258f3f50d 100644
--- a/tests/controlflow/tcontrolflow.nim
+++ b/tests/controlflow/tcontrolflow.nim
@@ -85,13 +85,13 @@ block tnestif:
   if x == 0:
       write(stdout, "i == 0")
       if y == 0:
-          write(stdout, x)
+          writeLine(stdout, x)
       else:
-          write(stdout, y)
+          writeLine(stdout, y)
   elif x == 1:
-      write(stdout, "i == 1")
+      writeLine(stdout, "i == 1")
   elif x == 2:
-      write(stdout, "i == 2")
+      writeLine(stdout, "i == 2")
   else:
-      write(stdout, "looks like Python")
+      writeLine(stdout, "looks like Python")
   #OUT i == 2
diff --git a/tests/float/tfloat3.nim b/tests/float/tfloat3.nim
index 01f3cb9df..215470cfc 100644
--- a/tests/float/tfloat3.nim
+++ b/tests/float/tfloat3.nim
@@ -1,14 +1,15 @@
 discard """
-  output: "Nim    3.4368930843, 0.3299290698 C double: 3.4368930843, 0.3299290698"
+  output: '''
+Nim 3.4368930843, 0.3299290698
+C double: 3.4368930843, 0.3299290698'''
 """
 
 import math, strutils
 
 {.emit: """
 void printFloats(void) {
-    double y = 1.234567890123456789;
-
-    printf("C double: %.10f, %.10f ", exp(y), cos(y));
+  double y = 1.234567890123456789;
+  printf("C double: %.10f, %.10f\n", exp(y), cos(y));
 }
 """.}
 
@@ -16,5 +17,5 @@ proc c_printf(frmt: cstring) {.importc: "printf", header: "<stdio.h>", varargs.}
 proc printFloats {.importc, nodecl.}
 
 var x: float = 1.234567890123456789
-c_printf("Nim    %.10f, %.10f ", exp(x), cos(x))
+c_printf("Nim %.10f, %.10f\n", exp(x), cos(x))
 printFloats()
diff --git a/tests/generics/tbintre2.nim b/tests/generics/tbintre2.nim
index 4f63cc5f5..dadc9a064 100644
--- a/tests/generics/tbintre2.nim
+++ b/tests/generics/tbintre2.nim
@@ -25,3 +25,4 @@ for y in items(r2):
   stdout.write(y)
 
 #OUT helloworld99110223
+stdout.write "\n"
diff --git a/tests/generics/tbintree.nim b/tests/generics/tbintree.nim
index 962d4f315..18af5b9af 100644
--- a/tests/generics/tbintree.nim
+++ b/tests/generics/tbintree.nim
@@ -101,4 +101,6 @@ when true:
   for y in items(r2):
     stdout.write(y)
 
+  stdout.write "\n"
+
 #OUT helloworld99110223
diff --git a/tests/generics/texplicitgeneric1.nim b/tests/generics/texplicitgeneric1.nim
index f093e54d4..16f4f7330 100644
--- a/tests/generics/texplicitgeneric1.nim
+++ b/tests/generics/texplicitgeneric1.nim
@@ -32,3 +32,5 @@ c.add('A', "12")
 c.add('B', "13")
 for k, v in items(c):
   stdout.write(" Key: ", $k, " value: ", v)
+
+stdout.write "\n"
diff --git a/tests/generics/texplicitgeneric2.nim b/tests/generics/texplicitgeneric2.nim
index c4af17b7b..573b10ae8 100644
--- a/tests/generics/texplicitgeneric2.nim
+++ b/tests/generics/texplicitgeneric2.nim
@@ -33,3 +33,4 @@ c.add('B', "13")
 for k, v in items(c):
   stdout.write(" Key: ", $k, " value: ", v)
 
+stdout.write "\n"
diff --git a/tests/generics/tgeneric0.nim b/tests/generics/tgeneric0.nim
index 6698ecec0..3a35ebaba 100644
--- a/tests/generics/tgeneric0.nim
+++ b/tests/generics/tgeneric0.nim
@@ -1,6 +1,7 @@
 discard """
   output: '''
-100 0
+100
+0
 '''
 """
 
@@ -72,7 +73,7 @@ block tgeneric1:
 
   proc print[T](heap: PBinHeap[T]) =
     for i in countup(0, heap.last):
-      stdout.write($heap.heap[i].data, " ")
+      stdout.write($heap.heap[i].data, "\n")
 
   var heap: PBinHeap[int]
 
diff --git a/tests/generics/tgenericprocvar.nim b/tests/generics/tgenericprocvar.nim
index dca9c8538..7935d90c2 100644
--- a/tests/generics/tgenericprocvar.nim
+++ b/tests/generics/tgenericprocvar.nim
@@ -34,3 +34,4 @@ proc test(data: seq[int], value: int): seq[int] =
 for x in items(test(@[1,2,3], 2)):
   stdout.write(x)
 
+stdout.write "\n"
diff --git a/tests/iter/tcountup.nim b/tests/iter/tcountup.nim
index 83d800c82..f93f1536e 100644
--- a/tests/iter/tcountup.nim
+++ b/tests/iter/tcountup.nim
@@ -2,9 +2,8 @@ discard """
   output: "0123456789"
 """
 
-# Test new countup and unary <
+# Test new countup
 
-for i in 0 .. < 10'i64:
+for i in 0 ..< 10'i64:
   stdout.write(i)
-
-#OUT 0123456789
+echo "\n"
diff --git a/tests/iter/titer5.nim b/tests/iter/titer5.nim
index 3c508dca7..cb691ffdb 100644
--- a/tests/iter/titer5.nim
+++ b/tests/iter/titer5.nim
@@ -10,3 +10,4 @@ for x in lines.split():
   stdout.write(x)
 
 #OUT abcxyz
+stdout.write "\n"
diff --git a/tests/iter/titer6.nim b/tests/iter/titer6.nim
index b8c2f7c66..69a10d868 100644
--- a/tests/iter/titer6.nim
+++ b/tests/iter/titer6.nim
@@ -31,3 +31,5 @@ proc wordWrap2(s: string, maxLineWidth = 80,
   result = ""
   for word, isSep in tokenize2(s, seps):
     var w = 0
+
+stdout.write "\n"
diff --git a/tests/iter/titer7.nim b/tests/iter/titer7.nim
index c2bd9b9cb..9cba3038d 100644
--- a/tests/iter/titer7.nim
+++ b/tests/iter/titer7.nim
@@ -45,9 +45,9 @@ proc square(x:int): int =
 let list = @[1,2,3,4,5,6,7,8,9]
 
 echo ("--- evens")
-for item in list / isEven : echo(item)
+for item in list / isEven: echo(item)
 echo ("--- squares")
-for item in list >> square : echo(item)
+for item in list >> square: echo(item)
 #echo ("--- squares of evens, only")
 # next line doesn't compile. Generic types are not inferred
 #for item in list />> (isEven, square) : echo(item)
diff --git a/tests/iter/titervaropenarray.nim b/tests/iter/titervaropenarray.nim
index b9aa2cbca..701f652df 100644
--- a/tests/iter/titervaropenarray.nim
+++ b/tests/iter/titervaropenarray.nim
@@ -10,3 +10,5 @@ iterator iterAndZero(a: var openArray[int]): int =
 var x = [[1, 2, 3], [4, 5, 6]]
 for y in iterAndZero(x[0]): write(stdout, $y)
 #OUT 123
+
+write stdout, "\n"
diff --git a/tests/macros/tstringinterp.nim b/tests/macros/tstringinterp.nim
index 8b8e1c3a9..74c73599b 100644
--- a/tests/macros/tstringinterp.nim
+++ b/tests/macros/tstringinterp.nim
@@ -70,3 +70,4 @@ var
   s2 = formatStyleInterpolation"Hello ${bob}, ${sum(alice.len, bob.len, 2)}$$"
 
 write(stdout, s1 & " | " & s2)
+write(stdout, "\n")
diff --git a/tests/metatype/tmatrix1.nim b/tests/metatype/tmatrix1.nim
index 0f325a17b..15913499f 100644
--- a/tests/metatype/tmatrix1.nim
+++ b/tests/metatype/tmatrix1.nim
@@ -8,10 +8,10 @@ type
   TMatrix2x2*[T] = TMatrixNM[range[0..1], range[0..1], T]
   TMatrix3x3*[T] = TMatrixNM[range[0..2], range[0..2], T]
 
-proc test*[T] (matrix: TMatrix2x2[T]) =
+proc test*[T](matrix: TMatrix2x2[T]) =
   echo "wrong proc called"
 
-proc test*[T] (matrix: TMatrix3x3[T]) =
+proc test*[T](matrix: TMatrix3x3[T]) =
   echo "right proc called"
 
 var matrix: TMatrix3x3[float]
diff --git a/tests/metatype/tmetatypematrix.nim b/tests/metatype/tmetatypematrix.nim
index 076009eb9..4cd0aa49f 100644
--- a/tests/metatype/tmetatypematrix.nim
+++ b/tests/metatype/tmetatypematrix.nim
@@ -43,3 +43,4 @@ for i in 0..w-1:
 
 for i in 0..w-1:
   stdout.write(m[i,i]) #OUT 111
+stdout.write "\n"
diff --git a/tests/misc/tack.nim b/tests/misc/tack.nim
index fb89dc8b1..458395ef6 100644
--- a/tests/misc/tack.nim
+++ b/tests/misc/tack.nim
@@ -16,3 +16,4 @@ proc ack(x, y: int): int =
 
 # echo(ack(0, 0))
 write(stdout, ack(3, 4)) #OUT 125
+write stdout, "\n"
diff --git a/tests/misc/tpos.nim b/tests/misc/tpos.nim
index 0c8efa43d..f7607d643 100644
--- a/tests/misc/tpos.nim
+++ b/tests/misc/tpos.nim
@@ -29,4 +29,5 @@ proc mypos(sub, s: string, start: int = 0): int =
 var sub = "hello"
 var s = "world hello"
 write(stdout, mypos(sub, s))
+write stdout, "\n"
 #OUT 6
diff --git a/tests/seq/tseq.nim b/tests/seq/tseq.nim
index 1cb94b308..6a28bc8e6 100644
--- a/tests/seq/tseq.nim
+++ b/tests/seq/tseq.nim
@@ -203,3 +203,4 @@ block ttoseq:
     stdout.write(x)
   var y: type("a b c".split)
   y = "xzy"
+  stdout.write("\n")
diff --git a/tests/template/annotate.nim b/tests/template/annotate.nim
index 5db7e59ea..a7e2f8fdb 100644
--- a/tests/template/annotate.nim
+++ b/tests/template/annotate.nim
@@ -65,7 +65,7 @@ proc reindent*(value: string, preset_indent = 0): string =
 make([ html, xml, glsl, js, css, rst ])
 
 
-when true:
+when isMainModule:
     ## Test tags
 
     const script = js"""
diff --git a/tests/usingstmt/tusingstatement.nim b/tests/usingstmt/tusingstatement.nim
index fc050ee5b..6e4998892 100644
--- a/tests/usingstmt/tusingstatement.nim
+++ b/tests/usingstmt/tusingstatement.nim
@@ -84,3 +84,5 @@ proc use(r: var TResource) =
 
 autoClose(r = openResource("test")):
   use r
+
+write stdout, "\n"
diff --git a/tests/varstmt/tvardecl.nim b/tests/varstmt/tvardecl.nim
index 664de7134..37bc4bad7 100644
--- a/tests/varstmt/tvardecl.nim
+++ b/tests/varstmt/tvardecl.nim
@@ -9,4 +9,4 @@ var
   a, b: int = 4
 
 write(stdout, a)
-write(stdout, b) #OUT 44
+writeLine(stdout, b) #OUT 44
diff --git a/tests/vm/tvmmisc.nim b/tests/vm/tvmmisc.nim
index 35deea224..bd3aa2fcd 100644
--- a/tests/vm/tvmmisc.nim
+++ b/tests/vm/tvmmisc.nim
@@ -70,8 +70,9 @@ block:
 # Tests for VM ops
 block:
   static:
-    # for joint test, the project path is different
-    assert "vm" in getProjectPath() or "Nim" in getProjectPath()
+    # for joint test, the project path is different, so I disabled it:
+    when false:
+      assert "vm" in getProjectPath()
 
     let b = getEnv("UNSETENVVAR")
     assert b == ""