mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-02 03:02:31 +00:00
Merge branch 'devel' of github.com:nim-lang/Nim into devel
This commit is contained in:
@@ -76,6 +76,8 @@
|
||||
- The `terminal` module now exports additional procs for generating ANSI color
|
||||
codes as strings.
|
||||
- Added the parameter ``val`` for the ``CritBitTree[int].inc`` proc.
|
||||
- An exception raised from ``test`` block of ``unittest`` now show its type in
|
||||
error message
|
||||
|
||||
### Language additions
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@ Conventions for multi-line statements and expressions
|
||||
LongTupleA = tuple[wordyTupleMemberOne: int, wordyTupleMemberTwo: string,
|
||||
wordyTupleMemberThree: float]
|
||||
|
||||
- Similarly, any procedure and procedure type declarations that are longer#
|
||||
- Similarly, any procedure and procedure type declarations that are longer
|
||||
than one line should do the same thing.
|
||||
|
||||
.. code-block:: nim
|
||||
@@ -198,4 +198,4 @@ Conventions for multi-line statements and expressions
|
||||
|
||||
.. code-block:: nim
|
||||
startProcess(nimExecutable, currentDirectory, compilerArguments
|
||||
environment, processOptions)
|
||||
environment, processOptions)
|
||||
|
||||
@@ -803,6 +803,7 @@ proc acceptAddr*(server: Socket, client: var Socket, address: var string,
|
||||
else:
|
||||
address = ret[1]
|
||||
client.fd = sock
|
||||
client.domain = getSockDomain(sock)
|
||||
client.isBuffered = server.isBuffered
|
||||
|
||||
# Handle SSL.
|
||||
|
||||
@@ -70,7 +70,8 @@ when defined(windows):
|
||||
|
||||
proc existsFile*(filename: string): bool {.rtl, extern: "nos$1",
|
||||
tags: [ReadDirEffect].} =
|
||||
## Returns true if the file exists, false otherwise.
|
||||
## Returns true if `filename` exists and is a regular file or symlink.
|
||||
## (directories, device files, named pipes and sockets return false)
|
||||
when defined(windows):
|
||||
when useWinUnicode:
|
||||
wrapUnary(a, getFileAttributesW, filename)
|
||||
|
||||
@@ -462,6 +462,8 @@ template suite*(name, body) {.dirty.} =
|
||||
finally:
|
||||
suiteEnded()
|
||||
|
||||
template exceptionTypeName(e: typed): string = $e.name
|
||||
|
||||
template test*(name, body) {.dirty.} =
|
||||
## Define a single test case identified by `name`.
|
||||
##
|
||||
@@ -476,7 +478,7 @@ template test*(name, body) {.dirty.} =
|
||||
## .. code-block::
|
||||
##
|
||||
## [OK] roses are red
|
||||
bind shouldRun, checkpoints, formatters, ensureInitialized, testEnded
|
||||
bind shouldRun, checkpoints, formatters, ensureInitialized, testEnded, exceptionTypeName
|
||||
|
||||
ensureInitialized()
|
||||
|
||||
@@ -495,8 +497,10 @@ template test*(name, body) {.dirty.} =
|
||||
|
||||
except:
|
||||
when not defined(js):
|
||||
checkpoint("Unhandled exception: " & getCurrentExceptionMsg())
|
||||
var stackTrace {.inject.} = getCurrentException().getStackTrace()
|
||||
let e = getCurrentException()
|
||||
let eTypeDesc = "[" & exceptionTypeName(e) & "]"
|
||||
checkpoint("Unhandled exception: " & getCurrentExceptionMsg() & " " & eTypeDesc)
|
||||
var stackTrace {.inject.} = e.getStackTrace()
|
||||
fail()
|
||||
|
||||
finally:
|
||||
|
||||
10
tests/stdlib/tunittestexceptiontype.nim
Normal file
10
tests/stdlib/tunittestexceptiontype.nim
Normal file
@@ -0,0 +1,10 @@
|
||||
discard """
|
||||
exitcode: 1
|
||||
outputsub: '''exception type is [ValueError]'''
|
||||
"""
|
||||
|
||||
import unittest
|
||||
|
||||
suite "exception from test":
|
||||
test "show exception type":
|
||||
raise newException(ValueError, "exception type is")
|
||||
Reference in New Issue
Block a user