enable style:usages for stdlib tests [backport: 1.6] (#19715)
* enable style:usages for stdlib tests * freeAddrInfo * more tests * importc * bufSize * fix more * => parseSql and renderSql
This commit is contained in:
parent
26bcf18f91
commit
98cebad7de
42 changed files with 149 additions and 146 deletions
|
|
@ -150,17 +150,17 @@ proc tryExec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]): bool {.
|
||||||
tags: [ReadDbEffect, WriteDbEffect].} =
|
tags: [ReadDbEffect, WriteDbEffect].} =
|
||||||
## tries to execute the query and returns true if successful, false otherwise.
|
## tries to execute the query and returns true if successful, false otherwise.
|
||||||
var q = dbFormat(query, args)
|
var q = dbFormat(query, args)
|
||||||
return mysql.realQuery(PMySQL db, q, q.len) == 0'i32
|
return mysql.real_query(PMySQL db, q, q.len) == 0'i32
|
||||||
|
|
||||||
proc rawExec(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) =
|
proc rawExec(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) =
|
||||||
var q = dbFormat(query, args)
|
var q = dbFormat(query, args)
|
||||||
if mysql.realQuery(PMySQL db, q, q.len) != 0'i32: dbError(db)
|
if mysql.real_query(PMySQL db, q, q.len) != 0'i32: dbError(db)
|
||||||
|
|
||||||
proc exec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) {.
|
proc exec*(db: DbConn, query: SqlQuery, args: varargs[string, `$`]) {.
|
||||||
tags: [ReadDbEffect, WriteDbEffect].} =
|
tags: [ReadDbEffect, WriteDbEffect].} =
|
||||||
## executes the query and raises EDB if not successful.
|
## executes the query and raises EDB if not successful.
|
||||||
var q = dbFormat(query, args)
|
var q = dbFormat(query, args)
|
||||||
if mysql.realQuery(PMySQL db, q, q.len) != 0'i32: dbError(db)
|
if mysql.real_query(PMySQL db, q, q.len) != 0'i32: dbError(db)
|
||||||
|
|
||||||
proc newRow(L: int): Row =
|
proc newRow(L: int): Row =
|
||||||
newSeq(result, L)
|
newSeq(result, L)
|
||||||
|
|
@ -168,7 +168,7 @@ proc newRow(L: int): Row =
|
||||||
|
|
||||||
proc properFreeResult(sqlres: mysql.PRES, row: cstringArray) =
|
proc properFreeResult(sqlres: mysql.PRES, row: cstringArray) =
|
||||||
if row != nil:
|
if row != nil:
|
||||||
while mysql.fetchRow(sqlres) != nil: discard
|
while mysql.fetch_row(sqlres) != nil: discard
|
||||||
mysql.freeResult(sqlres)
|
mysql.freeResult(sqlres)
|
||||||
|
|
||||||
iterator fastRows*(db: DbConn, query: SqlQuery,
|
iterator fastRows*(db: DbConn, query: SqlQuery,
|
||||||
|
|
@ -190,7 +190,7 @@ iterator fastRows*(db: DbConn, query: SqlQuery,
|
||||||
backup: Row
|
backup: Row
|
||||||
newSeq(result, L)
|
newSeq(result, L)
|
||||||
while true:
|
while true:
|
||||||
row = mysql.fetchRow(sqlres)
|
row = mysql.fetch_row(sqlres)
|
||||||
if row == nil: break
|
if row == nil: break
|
||||||
for i in 0..L-1:
|
for i in 0..L-1:
|
||||||
setLen(result[i], 0)
|
setLen(result[i], 0)
|
||||||
|
|
@ -209,7 +209,7 @@ iterator instantRows*(db: DbConn, query: SqlQuery,
|
||||||
let L = int(mysql.numFields(sqlres))
|
let L = int(mysql.numFields(sqlres))
|
||||||
var row: cstringArray
|
var row: cstringArray
|
||||||
while true:
|
while true:
|
||||||
row = mysql.fetchRow(sqlres)
|
row = mysql.fetch_row(sqlres)
|
||||||
if row == nil: break
|
if row == nil: break
|
||||||
yield InstantRow(row: row, len: L)
|
yield InstantRow(row: row, len: L)
|
||||||
properFreeResult(sqlres, row)
|
properFreeResult(sqlres, row)
|
||||||
|
|
@ -290,7 +290,7 @@ iterator instantRows*(db: DbConn; columns: var DbColumns; query: SqlQuery;
|
||||||
setColumnInfo(columns, sqlres, L)
|
setColumnInfo(columns, sqlres, L)
|
||||||
var row: cstringArray
|
var row: cstringArray
|
||||||
while true:
|
while true:
|
||||||
row = mysql.fetchRow(sqlres)
|
row = mysql.fetch_row(sqlres)
|
||||||
if row == nil: break
|
if row == nil: break
|
||||||
yield InstantRow(row: row, len: L)
|
yield InstantRow(row: row, len: L)
|
||||||
properFreeResult(sqlres, row)
|
properFreeResult(sqlres, row)
|
||||||
|
|
@ -317,7 +317,7 @@ proc getRow*(db: DbConn, query: SqlQuery,
|
||||||
if sqlres != nil:
|
if sqlres != nil:
|
||||||
var L = int(mysql.numFields(sqlres))
|
var L = int(mysql.numFields(sqlres))
|
||||||
result = newRow(L)
|
result = newRow(L)
|
||||||
var row = mysql.fetchRow(sqlres)
|
var row = mysql.fetch_row(sqlres)
|
||||||
if row != nil:
|
if row != nil:
|
||||||
for i in 0..L-1:
|
for i in 0..L-1:
|
||||||
setLen(result[i], 0)
|
setLen(result[i], 0)
|
||||||
|
|
@ -335,7 +335,7 @@ proc getAllRows*(db: DbConn, query: SqlQuery,
|
||||||
var row: cstringArray
|
var row: cstringArray
|
||||||
var j = 0
|
var j = 0
|
||||||
while true:
|
while true:
|
||||||
row = mysql.fetchRow(sqlres)
|
row = mysql.fetch_row(sqlres)
|
||||||
if row == nil: break
|
if row == nil: break
|
||||||
setLen(result, j+1)
|
setLen(result, j+1)
|
||||||
newSeq(result[j], L)
|
newSeq(result[j], L)
|
||||||
|
|
@ -361,7 +361,7 @@ proc tryInsertId*(db: DbConn, query: SqlQuery,
|
||||||
## executes the query (typically "INSERT") and returns the
|
## executes the query (typically "INSERT") and returns the
|
||||||
## generated ID for the row or -1 in case of an error.
|
## generated ID for the row or -1 in case of an error.
|
||||||
var q = dbFormat(query, args)
|
var q = dbFormat(query, args)
|
||||||
if mysql.realQuery(PMySQL db, q, q.len) != 0'i32:
|
if mysql.real_query(PMySQL db, q, q.len) != 0'i32:
|
||||||
result = -1'i64
|
result = -1'i64
|
||||||
else:
|
else:
|
||||||
result = mysql.insertId(PMySQL db)
|
result = mysql.insertId(PMySQL db)
|
||||||
|
|
|
||||||
|
|
@ -1016,7 +1016,7 @@ proc endhostent*() {.importc, header: "<netdb.h>".}
|
||||||
proc endnetent*() {.importc, header: "<netdb.h>".}
|
proc endnetent*() {.importc, header: "<netdb.h>".}
|
||||||
proc endprotoent*() {.importc, header: "<netdb.h>".}
|
proc endprotoent*() {.importc, header: "<netdb.h>".}
|
||||||
proc endservent*() {.importc, header: "<netdb.h>".}
|
proc endservent*() {.importc, header: "<netdb.h>".}
|
||||||
proc freeaddrinfo*(a1: ptr AddrInfo) {.importc, header: "<netdb.h>".}
|
proc freeAddrInfo*(a1: ptr AddrInfo) {.importc: "freeaddrinfo", header: "<netdb.h>".}
|
||||||
|
|
||||||
proc gai_strerror*(a1: cint): cstring {.importc:"(char *)$1", header: "<netdb.h>".}
|
proc gai_strerror*(a1: cint): cstring {.importc:"(char *)$1", header: "<netdb.h>".}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1791,7 +1791,7 @@ template asyncAddrInfoLoop(addrInfo: ptr AddrInfo, fd: untyped,
|
||||||
curAddrInfo = curAddrInfo.ai_next
|
curAddrInfo = curAddrInfo.ai_next
|
||||||
|
|
||||||
if curAddrInfo == nil:
|
if curAddrInfo == nil:
|
||||||
freeaddrinfo(addrInfo)
|
freeAddrInfo(addrInfo)
|
||||||
when shouldCreateFd:
|
when shouldCreateFd:
|
||||||
closeUnusedFds()
|
closeUnusedFds()
|
||||||
if lastException != nil:
|
if lastException != nil:
|
||||||
|
|
@ -1807,7 +1807,7 @@ template asyncAddrInfoLoop(addrInfo: ptr AddrInfo, fd: untyped,
|
||||||
try:
|
try:
|
||||||
curFd = createAsyncNativeSocket(domain, sockType, protocol)
|
curFd = createAsyncNativeSocket(domain, sockType, protocol)
|
||||||
except:
|
except:
|
||||||
freeaddrinfo(addrInfo)
|
freeAddrInfo(addrInfo)
|
||||||
closeUnusedFds()
|
closeUnusedFds()
|
||||||
raise getCurrentException()
|
raise getCurrentException()
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
|
|
@ -1817,7 +1817,7 @@ template asyncAddrInfoLoop(addrInfo: ptr AddrInfo, fd: untyped,
|
||||||
doConnect(curFd, curAddrInfo).callback = tryNextAddrInfo
|
doConnect(curFd, curAddrInfo).callback = tryNextAddrInfo
|
||||||
curAddrInfo = curAddrInfo.ai_next
|
curAddrInfo = curAddrInfo.ai_next
|
||||||
else:
|
else:
|
||||||
freeaddrinfo(addrInfo)
|
freeAddrInfo(addrInfo)
|
||||||
when shouldCreateFd:
|
when shouldCreateFd:
|
||||||
closeUnusedFds(ord(domain))
|
closeUnusedFds(ord(domain))
|
||||||
retFuture.complete(curFd)
|
retFuture.complete(curFd)
|
||||||
|
|
|
||||||
|
|
@ -648,9 +648,9 @@ proc bindAddr*(socket: AsyncSocket, port = Port(0), address = "") {.
|
||||||
|
|
||||||
var aiList = getAddrInfo(realaddr, port, socket.domain)
|
var aiList = getAddrInfo(realaddr, port, socket.domain)
|
||||||
if bindAddr(socket.fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
|
if bindAddr(socket.fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
|
|
||||||
proc hasDataBuffered*(s: AsyncSocket): bool {.since: (1, 5).} =
|
proc hasDataBuffered*(s: AsyncSocket): bool {.since: (1, 5).} =
|
||||||
## Determines whether an AsyncSocket has data buffered.
|
## Determines whether an AsyncSocket has data buffered.
|
||||||
|
|
@ -859,7 +859,7 @@ proc sendTo*(socket: AsyncSocket, address: string, port: Port, data: string,
|
||||||
|
|
||||||
it = it.ai_next
|
it = it.ai_next
|
||||||
|
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
if lastException != nil:
|
if lastException != nil:
|
||||||
|
|
|
||||||
|
|
@ -75,4 +75,4 @@ proc setCookie*(key, value: string, expires: DateTime|Time,
|
||||||
## `Set-Cookie: key=value; Domain=...; ...`
|
## `Set-Cookie: key=value; Domain=...; ...`
|
||||||
result = setCookie(key, value, domain, path,
|
result = setCookie(key, value, domain, path,
|
||||||
format(expires.utc, "ddd',' dd MMM yyyy HH:mm:ss 'GMT'"),
|
format(expires.utc, "ddd',' dd MMM yyyy HH:mm:ss 'GMT'"),
|
||||||
noname, secure, httpOnly, maxAge, sameSite)
|
noName, secure, httpOnly, maxAge, sameSite)
|
||||||
|
|
|
||||||
|
|
@ -526,4 +526,4 @@ template withData*[T](s: Selector[T], fd: SocketHandle|int, value, body1,
|
||||||
body2
|
body2
|
||||||
|
|
||||||
proc getFd*[T](s: Selector[T]): int =
|
proc getFd*[T](s: Selector[T]): int =
|
||||||
return s.epollFd.int
|
return s.epollFD.int
|
||||||
|
|
|
||||||
|
|
@ -26,27 +26,27 @@ else:
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>"""
|
#include <unistd.h>"""
|
||||||
type
|
type
|
||||||
Fdset {.importc: "fd_set", header: platformHeaders, pure, final.} = object
|
FdSet {.importc: "fd_set", header: platformHeaders, pure, final.} = object
|
||||||
var
|
var
|
||||||
FD_SETSIZE {.importc: "FD_SETSIZE", header: platformHeaders.}: cint
|
FD_SETSIZE {.importc: "FD_SETSIZE", header: platformHeaders.}: cint
|
||||||
|
|
||||||
proc IOFD_SET(fd: SocketHandle, fdset: ptr Fdset)
|
proc IOFD_SET(fd: SocketHandle, fdset: ptr FdSet)
|
||||||
{.cdecl, importc: "FD_SET", header: platformHeaders, inline.}
|
{.cdecl, importc: "FD_SET", header: platformHeaders, inline.}
|
||||||
proc IOFD_CLR(fd: SocketHandle, fdset: ptr Fdset)
|
proc IOFD_CLR(fd: SocketHandle, fdset: ptr FdSet)
|
||||||
{.cdecl, importc: "FD_CLR", header: platformHeaders, inline.}
|
{.cdecl, importc: "FD_CLR", header: platformHeaders, inline.}
|
||||||
proc IOFD_ZERO(fdset: ptr Fdset)
|
proc IOFD_ZERO(fdset: ptr FdSet)
|
||||||
{.cdecl, importc: "FD_ZERO", header: platformHeaders, inline.}
|
{.cdecl, importc: "FD_ZERO", header: platformHeaders, inline.}
|
||||||
|
|
||||||
when defined(windows):
|
when defined(windows):
|
||||||
proc IOFD_ISSET(fd: SocketHandle, fdset: ptr Fdset): cint
|
proc IOFD_ISSET(fd: SocketHandle, fdset: ptr FdSet): cint
|
||||||
{.stdcall, importc: "FD_ISSET", header: platformHeaders, inline.}
|
{.stdcall, importc: "FD_ISSET", header: platformHeaders, inline.}
|
||||||
proc ioselect(nfds: cint, readFds, writeFds, exceptFds: ptr Fdset,
|
proc ioselect(nfds: cint, readFds, writeFds, exceptFds: ptr FdSet,
|
||||||
timeout: ptr Timeval): cint
|
timeout: ptr Timeval): cint
|
||||||
{.stdcall, importc: "select", header: platformHeaders.}
|
{.stdcall, importc: "select", header: platformHeaders.}
|
||||||
else:
|
else:
|
||||||
proc IOFD_ISSET(fd: SocketHandle, fdset: ptr Fdset): cint
|
proc IOFD_ISSET(fd: SocketHandle, fdset: ptr FdSet): cint
|
||||||
{.cdecl, importc: "FD_ISSET", header: platformHeaders, inline.}
|
{.cdecl, importc: "FD_ISSET", header: platformHeaders, inline.}
|
||||||
proc ioselect(nfds: cint, readFds, writeFds, exceptFds: ptr Fdset,
|
proc ioselect(nfds: cint, readFds, writeFds, exceptFds: ptr FdSet,
|
||||||
timeout: ptr Timeval): cint
|
timeout: ptr Timeval): cint
|
||||||
{.cdecl, importc: "select", header: platformHeaders.}
|
{.cdecl, importc: "select", header: platformHeaders.}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -958,12 +958,12 @@ proc parseJson*(s: Stream, filename: string = ""; rawIntegers = false, rawFloats
|
||||||
|
|
||||||
when defined(js):
|
when defined(js):
|
||||||
from math import `mod`
|
from math import `mod`
|
||||||
from std/jsffi import JSObject, `[]`, to
|
from std/jsffi import JsObject, `[]`, to
|
||||||
from std/private/jsutils import getProtoName, isInteger, isSafeInteger
|
from std/private/jsutils import getProtoName, isInteger, isSafeInteger
|
||||||
|
|
||||||
proc parseNativeJson(x: cstring): JSObject {.importjs: "JSON.parse(#)".}
|
proc parseNativeJson(x: cstring): JsObject {.importjs: "JSON.parse(#)".}
|
||||||
|
|
||||||
proc getVarType(x: JSObject, isRawNumber: var bool): JsonNodeKind =
|
proc getVarType(x: JsObject, isRawNumber: var bool): JsonNodeKind =
|
||||||
result = JNull
|
result = JNull
|
||||||
case $getProtoName(x) # TODO: Implicit returns fail here.
|
case $getProtoName(x) # TODO: Implicit returns fail here.
|
||||||
of "[object Array]": return JArray
|
of "[object Array]": return JArray
|
||||||
|
|
@ -982,12 +982,12 @@ when defined(js):
|
||||||
of "[object String]": return JString
|
of "[object String]": return JString
|
||||||
else: assert false
|
else: assert false
|
||||||
|
|
||||||
proc len(x: JSObject): int =
|
proc len(x: JsObject): int =
|
||||||
asm """
|
asm """
|
||||||
`result` = `x`.length;
|
`result` = `x`.length;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
proc convertObject(x: JSObject): JsonNode =
|
proc convertObject(x: JsObject): JsonNode =
|
||||||
var isRawNumber = false
|
var isRawNumber = false
|
||||||
case getVarType(x, isRawNumber)
|
case getVarType(x, isRawNumber)
|
||||||
of JArray:
|
of JArray:
|
||||||
|
|
@ -1000,7 +1000,7 @@ when defined(js):
|
||||||
if (`x`.hasOwnProperty(property)) {
|
if (`x`.hasOwnProperty(property)) {
|
||||||
"""
|
"""
|
||||||
var nimProperty: cstring
|
var nimProperty: cstring
|
||||||
var nimValue: JSObject
|
var nimValue: JsObject
|
||||||
asm "`nimProperty` = property; `nimValue` = `x`[property];"
|
asm "`nimProperty` = property; `nimValue` = `x`[property];"
|
||||||
result[$nimProperty] = nimValue.convertObject()
|
result[$nimProperty] = nimValue.convertObject()
|
||||||
asm "}}"
|
asm "}}"
|
||||||
|
|
|
||||||
|
|
@ -633,7 +633,7 @@ when useNimNetLite:
|
||||||
INET_ADDRSTRLEN = 16
|
INET_ADDRSTRLEN = 16
|
||||||
INET6_ADDRSTRLEN = 46 # it's actually 46 in both cases
|
INET6_ADDRSTRLEN = 46 # it's actually 46 in both cases
|
||||||
|
|
||||||
proc sockAddrToStr(sa: ptr Sockaddr): string {.noinit.} =
|
proc sockAddrToStr(sa: ptr SockAddr): string {.noinit.} =
|
||||||
let af_family = sa.sa_family
|
let af_family = sa.sa_family
|
||||||
var nl, v4Slice: cint
|
var nl, v4Slice: cint
|
||||||
var si_addr: ptr InAddr
|
var si_addr: ptr InAddr
|
||||||
|
|
|
||||||
|
|
@ -984,11 +984,11 @@ proc bindAddr*(socket: Socket, port = Port(0), address = "") {.
|
||||||
|
|
||||||
var aiList = getAddrInfo(realaddr, port, socket.domain)
|
var aiList = getAddrInfo(realaddr, port, socket.domain)
|
||||||
if bindAddr(socket.fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
|
if bindAddr(socket.fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
var address2: string
|
var address2: string
|
||||||
address2.addQuoted address
|
address2.addQuoted address
|
||||||
raiseOSError(osLastError(), "address: $# port: $#" % [address2, $port])
|
raiseOSError(osLastError(), "address: $# port: $#" % [address2, $port])
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
|
|
||||||
proc acceptAddr*(server: Socket, client: var owned(Socket), address: var string,
|
proc acceptAddr*(server: Socket, client: var owned(Socket), address: var string,
|
||||||
flags = {SocketFlag.SafeDisconn},
|
flags = {SocketFlag.SafeDisconn},
|
||||||
|
|
@ -1745,7 +1745,7 @@ proc sendTo*(socket: Socket, address: string, port: Port, data: pointer,
|
||||||
it = it.ai_next
|
it = it.ai_next
|
||||||
|
|
||||||
let osError = osLastError()
|
let osError = osLastError()
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
|
|
||||||
if not success:
|
if not success:
|
||||||
raiseOSError(osError)
|
raiseOSError(osError)
|
||||||
|
|
@ -1960,7 +1960,7 @@ proc dial*(address: string, port: Port,
|
||||||
# network system problem (e.g. not enough FDs), and not an unreachable
|
# network system problem (e.g. not enough FDs), and not an unreachable
|
||||||
# address.
|
# address.
|
||||||
let err = osLastError()
|
let err = osLastError()
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
closeUnusedFds()
|
closeUnusedFds()
|
||||||
raiseOSError(err)
|
raiseOSError(err)
|
||||||
fdPerDomain[ord(domain)] = lastFd
|
fdPerDomain[ord(domain)] = lastFd
|
||||||
|
|
@ -1969,7 +1969,7 @@ proc dial*(address: string, port: Port,
|
||||||
break
|
break
|
||||||
lastError = osLastError()
|
lastError = osLastError()
|
||||||
it = it.ai_next
|
it = it.ai_next
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
closeUnusedFds(ord(domain))
|
closeUnusedFds(ord(domain))
|
||||||
|
|
||||||
if success:
|
if success:
|
||||||
|
|
@ -1999,7 +1999,7 @@ proc connect*(socket: Socket, address: string,
|
||||||
else: lastError = osLastError()
|
else: lastError = osLastError()
|
||||||
it = it.ai_next
|
it = it.ai_next
|
||||||
|
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
if not success: raiseOSError(lastError)
|
if not success: raiseOSError(lastError)
|
||||||
|
|
||||||
when defineSsl:
|
when defineSsl:
|
||||||
|
|
@ -2051,7 +2051,7 @@ proc connectAsync(socket: Socket, name: string, port = Port(0),
|
||||||
|
|
||||||
it = it.ai_next
|
it = it.ai_next
|
||||||
|
|
||||||
freeaddrinfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
if not success: raiseOSError(lastError)
|
if not success: raiseOSError(lastError)
|
||||||
|
|
||||||
proc connect*(socket: Socket, address: string, port = Port(0),
|
proc connect*(socket: Socket, address: string, port = Port(0),
|
||||||
|
|
|
||||||
|
|
@ -1451,7 +1451,7 @@ proc ra(n: SqlNode, s: var SqlWriter) =
|
||||||
s.addKeyw("enum")
|
s.addKeyw("enum")
|
||||||
rs(n, s)
|
rs(n, s)
|
||||||
|
|
||||||
proc renderSQL*(n: SqlNode, upperCase = false): string =
|
proc renderSql*(n: SqlNode, upperCase = false): string =
|
||||||
## Converts an SQL abstract syntax tree to its string representation.
|
## Converts an SQL abstract syntax tree to its string representation.
|
||||||
var s: SqlWriter
|
var s: SqlWriter
|
||||||
s.buffer = ""
|
s.buffer = ""
|
||||||
|
|
@ -1460,8 +1460,8 @@ proc renderSQL*(n: SqlNode, upperCase = false): string =
|
||||||
return s.buffer
|
return s.buffer
|
||||||
|
|
||||||
proc `$`*(n: SqlNode): string =
|
proc `$`*(n: SqlNode): string =
|
||||||
## an alias for `renderSQL`.
|
## an alias for `renderSql`.
|
||||||
renderSQL(n)
|
renderSql(n)
|
||||||
|
|
||||||
proc treeReprAux(s: SqlNode, level: int, result: var string) =
|
proc treeReprAux(s: SqlNode, level: int, result: var string) =
|
||||||
result.add('\n')
|
result.add('\n')
|
||||||
|
|
@ -1493,7 +1493,7 @@ proc open(p: var SqlParser, input: Stream, filename: string) =
|
||||||
p.tok.literal = ""
|
p.tok.literal = ""
|
||||||
getTok(p)
|
getTok(p)
|
||||||
|
|
||||||
proc parseSQL*(input: Stream, filename: string): SqlNode =
|
proc parseSql*(input: Stream, filename: string): SqlNode =
|
||||||
## parses the SQL from `input` into an AST and returns the AST.
|
## parses the SQL from `input` into an AST and returns the AST.
|
||||||
## `filename` is only used for error messages.
|
## `filename` is only used for error messages.
|
||||||
## Syntax errors raise an `SqlParseError` exception.
|
## Syntax errors raise an `SqlParseError` exception.
|
||||||
|
|
@ -1504,8 +1504,8 @@ proc parseSQL*(input: Stream, filename: string): SqlNode =
|
||||||
finally:
|
finally:
|
||||||
close(p)
|
close(p)
|
||||||
|
|
||||||
proc parseSQL*(input: string, filename = ""): SqlNode =
|
proc parseSql*(input: string, filename = ""): SqlNode =
|
||||||
## parses the SQL from `input` into an AST and returns the AST.
|
## parses the SQL from `input` into an AST and returns the AST.
|
||||||
## `filename` is only used for error messages.
|
## `filename` is only used for error messages.
|
||||||
## Syntax errors raise an `SqlParseError` exception.
|
## Syntax errors raise an `SqlParseError` exception.
|
||||||
parseSQL(newStringStream(input), "")
|
parseSql(newStringStream(input), "")
|
||||||
|
|
|
||||||
|
|
@ -1023,7 +1023,7 @@ template eventParser*(pegAst, handlers: untyped): (proc(s: string): int) =
|
||||||
## Symbols declared in an *enter* handler can be made visible in the
|
## Symbols declared in an *enter* handler can be made visible in the
|
||||||
## corresponding *leave* handler by annotating them with an *inject* pragma.
|
## corresponding *leave* handler by annotating them with an *inject* pragma.
|
||||||
proc rawParse(s: string, p: Peg, start: int, c: var Captures): int
|
proc rawParse(s: string, p: Peg, start: int, c: var Captures): int
|
||||||
{.genSym.} =
|
{.gensym.} =
|
||||||
|
|
||||||
# binding from *macros*
|
# binding from *macros*
|
||||||
bind strVal
|
bind strVal
|
||||||
|
|
@ -1058,7 +1058,7 @@ template eventParser*(pegAst, handlers: untyped): (proc(s: string): int) =
|
||||||
matchOrParse(parseIt)
|
matchOrParse(parseIt)
|
||||||
parseIt(s, p, start, c)
|
parseIt(s, p, start, c)
|
||||||
|
|
||||||
proc parser(s: string): int {.genSym.} =
|
proc parser(s: string): int {.gensym.} =
|
||||||
# the proc to be returned
|
# the proc to be returned
|
||||||
var
|
var
|
||||||
ms: array[MaxSubpatterns, (int, int)]
|
ms: array[MaxSubpatterns, (int, int)]
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ when defined(windows):
|
||||||
|
|
||||||
const
|
const
|
||||||
EXCEPTION_ACCESS_VIOLATION = DWORD(0xc0000005'i32)
|
EXCEPTION_ACCESS_VIOLATION = DWORD(0xc0000005'i32)
|
||||||
EXCEPTION_CONTINUE_SEARCH = Long(0)
|
EXCEPTION_CONTINUE_SEARCH = LONG(0)
|
||||||
|
|
||||||
type
|
type
|
||||||
PEXCEPTION_RECORD = ptr object
|
PEXCEPTION_RECORD = ptr object
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ func setSlice*(s: var string, slice: Slice[int]) =
|
||||||
import std/sugar
|
import std/sugar
|
||||||
|
|
||||||
var a = "Hello, Nim!"
|
var a = "Hello, Nim!"
|
||||||
doassert a.dup(setSlice(7 .. 9)) == "Nim"
|
doAssert a.dup(setSlice(7 .. 9)) == "Nim"
|
||||||
doAssert a.dup(setSlice(0 .. 0)) == "H"
|
doAssert a.dup(setSlice(0 .. 0)) == "H"
|
||||||
doAssert a.dup(setSlice(0 .. 1)) == "He"
|
doAssert a.dup(setSlice(0 .. 1)) == "He"
|
||||||
doAssert a.dup(setSlice(0 .. 10)) == a
|
doAssert a.dup(setSlice(0 .. 10)) == a
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,7 @@ template checkIsolate(scratchAssignList: seq[NimNode], procParam, scratchDotExpr
|
||||||
# var isoTempB = isolate(literal)
|
# var isoTempB = isolate(literal)
|
||||||
# scratch.b = extract(isolateB)
|
# scratch.b = extract(isolateB)
|
||||||
let isolatedTemp = genSym(nskTemp, "isoTemp")
|
let isolatedTemp = genSym(nskTemp, "isoTemp")
|
||||||
scratchAssignList.add newVarStmt(isolatedTemp, newCall(newidentNode("isolate"), procParam))
|
scratchAssignList.add newVarStmt(isolatedTemp, newCall(newIdentNode("isolate"), procParam))
|
||||||
scratchAssignList.add newAssignment(scratchDotExpr,
|
scratchAssignList.add newAssignment(scratchDotExpr,
|
||||||
newCall(newIdentNode("extract"), isolatedTemp))
|
newCall(newIdentNode("extract"), isolatedTemp))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,26 +46,26 @@ template call(f) =
|
||||||
proc getUnicodeValue*(path, key: string; handle: HKEY): string =
|
proc getUnicodeValue*(path, key: string; handle: HKEY): string =
|
||||||
let hh = newWideCString path
|
let hh = newWideCString path
|
||||||
let kk = newWideCString key
|
let kk = newWideCString key
|
||||||
var bufsize: int32
|
var bufSize: int32
|
||||||
# try a couple of different flag settings:
|
# try a couple of different flag settings:
|
||||||
var flags: int32 = RRF_RT_ANY
|
var flags: int32 = RRF_RT_ANY
|
||||||
let err = regGetValue(handle, hh, kk, flags, nil, nil, addr bufsize)
|
let err = regGetValue(handle, hh, kk, flags, nil, nil, addr bufSize)
|
||||||
if err != 0:
|
if err != 0:
|
||||||
var newHandle: HKEY
|
var newHandle: HKEY
|
||||||
call regOpenKeyEx(handle, hh, 0, KEY_READ or KEY_WOW64_64KEY, newHandle)
|
call regOpenKeyEx(handle, hh, 0, KEY_READ or KEY_WOW64_64KEY, newHandle)
|
||||||
call regGetValue(newHandle, nil, kk, flags, nil, nil, addr bufsize)
|
call regGetValue(newHandle, nil, kk, flags, nil, nil, addr bufSize)
|
||||||
if bufSize > 0:
|
if bufSize > 0:
|
||||||
var res = newWideCString(bufsize)
|
var res = newWideCString(bufSize)
|
||||||
call regGetValue(newHandle, nil, kk, flags, nil, addr res[0],
|
call regGetValue(newHandle, nil, kk, flags, nil, addr res[0],
|
||||||
addr bufsize)
|
addr bufSize)
|
||||||
result = res $ bufsize
|
result = res $ bufSize
|
||||||
call regCloseKey(newHandle)
|
call regCloseKey(newHandle)
|
||||||
else:
|
else:
|
||||||
if bufSize > 0:
|
if bufSize > 0:
|
||||||
var res = newWideCString(bufsize)
|
var res = newWideCString(bufSize)
|
||||||
call regGetValue(handle, hh, kk, flags, nil, addr res[0],
|
call regGetValue(handle, hh, kk, flags, nil, addr res[0],
|
||||||
addr bufsize)
|
addr bufSize)
|
||||||
result = res $ bufsize
|
result = res $ bufSize
|
||||||
|
|
||||||
proc regSetValue(key: HKEY, lpSubKey, lpValueName: WideCString,
|
proc regSetValue(key: HKEY, lpSubKey, lpValueName: WideCString,
|
||||||
dwType: int32; lpData: WideCString; cbData: int32): int32 {.
|
dwType: int32; lpData: WideCString; cbData: int32): int32 {.
|
||||||
|
|
|
||||||
|
|
@ -670,7 +670,7 @@ proc getaddrinfo*(nodename, servname: cstring, hints: ptr AddrInfo,
|
||||||
res: var ptr AddrInfo): cint {.
|
res: var ptr AddrInfo): cint {.
|
||||||
stdcall, importc: "getaddrinfo", dynlib: ws2dll.}
|
stdcall, importc: "getaddrinfo", dynlib: ws2dll.}
|
||||||
|
|
||||||
proc freeaddrinfo*(ai: ptr AddrInfo) {.
|
proc freeAddrInfo*(ai: ptr AddrInfo) {.
|
||||||
stdcall, importc: "freeaddrinfo", dynlib: ws2dll.}
|
stdcall, importc: "freeaddrinfo", dynlib: ws2dll.}
|
||||||
|
|
||||||
proc inet_ntoa*(i: InAddr): cstring {.
|
proc inet_ntoa*(i: InAddr): cstring {.
|
||||||
|
|
|
||||||
2
tests/stdlib/config.nims
Normal file
2
tests/stdlib/config.nims
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
switch("styleCheck", "usages")
|
||||||
|
switch("styleCheck", "error")
|
||||||
|
|
@ -6,8 +6,8 @@ block: # Misc tests
|
||||||
check("перевірка".replace(re"(*U)\w", "") == "")
|
check("перевірка".replace(re"(*U)\w", "") == "")
|
||||||
|
|
||||||
block: # empty or non-empty match
|
block: # empty or non-empty match
|
||||||
check("abc".findall(re"|.").join(":") == ":a::b::c:")
|
check("abc".findAll(re"|.").join(":") == ":a::b::c:")
|
||||||
check("abc".findall(re".|").join(":") == "a:b:c:")
|
check("abc".findAll(re".|").join(":") == "a:b:c:")
|
||||||
|
|
||||||
check("abc".replace(re"|.", "x") == "xxxxxxx")
|
check("abc".replace(re"|.", "x") == "xxxxxxx")
|
||||||
check("abc".replace(re".|", "x") == "xxxx")
|
check("abc".replace(re".|", "x") == "xxxx")
|
||||||
|
|
|
||||||
|
|
@ -101,10 +101,10 @@ block:
|
||||||
doAssert binarySearch(noData, 7) == -1
|
doAssert binarySearch(noData, 7) == -1
|
||||||
let oneData = @[1]
|
let oneData = @[1]
|
||||||
doAssert binarySearch(oneData, 1) == 0
|
doAssert binarySearch(oneData, 1) == 0
|
||||||
doAssert binarySearch(onedata, 7) == -1
|
doAssert binarySearch(oneData, 7) == -1
|
||||||
let someData = @[1, 3, 4, 7]
|
let someData = @[1, 3, 4, 7]
|
||||||
doAssert binarySearch(someData, 1) == 0
|
doAssert binarySearch(someData, 1) == 0
|
||||||
doAssert binarySearch(somedata, 7) == 3
|
doAssert binarySearch(someData, 7) == 3
|
||||||
doAssert binarySearch(someData, -1) == -1
|
doAssert binarySearch(someData, -1) == -1
|
||||||
doAssert binarySearch(someData, 5) == -1
|
doAssert binarySearch(someData, 5) == -1
|
||||||
doAssert binarySearch(someData, 13) == -1
|
doAssert binarySearch(someData, 13) == -1
|
||||||
|
|
|
||||||
|
|
@ -111,9 +111,9 @@ proc testCustomContentLength() {.async.} =
|
||||||
|
|
||||||
runTest(handler, request, test)
|
runTest(handler, request, test)
|
||||||
|
|
||||||
waitfor(test200())
|
waitFor(test200())
|
||||||
waitfor(test404())
|
waitFor(test404())
|
||||||
waitfor(testCustomEmptyHeaders())
|
waitFor(testCustomEmptyHeaders())
|
||||||
waitfor(testCustomContentLength())
|
waitFor(testCustomContentLength())
|
||||||
|
|
||||||
echo "OK"
|
echo "OK"
|
||||||
|
|
|
||||||
|
|
@ -27,13 +27,13 @@ template main() =
|
||||||
const tests = ["", "abc", "xyz", "man", "leasure.", "sure.", "easure.",
|
const tests = ["", "abc", "xyz", "man", "leasure.", "sure.", "easure.",
|
||||||
"asure.", longText, testInputExpandsTo76, testInputExpands]
|
"asure.", longText, testInputExpandsTo76, testInputExpands]
|
||||||
|
|
||||||
doAssert encodeMIME("foobarbaz", lineLen=4) == "Zm9v\r\nYmFy\r\nYmF6"
|
doAssert encodeMime("foobarbaz", lineLen=4) == "Zm9v\r\nYmFy\r\nYmF6"
|
||||||
doAssert decode("Zm9v\r\nYmFy\r\nYmF6") == "foobarbaz"
|
doAssert decode("Zm9v\r\nYmFy\r\nYmF6") == "foobarbaz"
|
||||||
|
|
||||||
for t in items(tests):
|
for t in items(tests):
|
||||||
doAssert decode(encode(t)) == t
|
doAssert decode(encode(t)) == t
|
||||||
doAssert decode(encodeMIME(t, lineLen=40)) == t
|
doAssert decode(encodeMime(t, lineLen=40)) == t
|
||||||
doAssert decode(encodeMIME(t, lineLen=76)) == t
|
doAssert decode(encodeMime(t, lineLen=76)) == t
|
||||||
|
|
||||||
doAssertRaises(ValueError): discard decode("SGVsbG\x008gV29ybGQ=")
|
doAssertRaises(ValueError): discard decode("SGVsbG\x008gV29ybGQ=")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -263,8 +263,8 @@ proc main() =
|
||||||
doAssert v == 0b1000_0010
|
doAssert v == 0b1000_0010
|
||||||
v.flipBit(1)
|
v.flipBit(1)
|
||||||
doAssert v == 0b1000_0000
|
doAssert v == 0b1000_0000
|
||||||
doAssert v.testbit(7)
|
doAssert v.testBit(7)
|
||||||
doAssert not v.testbit(6)
|
doAssert not v.testBit(6)
|
||||||
block:
|
block:
|
||||||
# multi bit operations
|
# multi bit operations
|
||||||
var v: uint8
|
var v: uint8
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ proc makeIPv6HttpServer(hostname: string, port: Port,
|
||||||
let fd = createNativeSocket(AF_INET6)
|
let fd = createNativeSocket(AF_INET6)
|
||||||
setSockOptInt(fd, SOL_SOCKET, SO_REUSEADDR, 1)
|
setSockOptInt(fd, SOL_SOCKET, SO_REUSEADDR, 1)
|
||||||
var aiList = getAddrInfo(hostname, port, AF_INET6)
|
var aiList = getAddrInfo(hostname, port, AF_INET6)
|
||||||
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32:
|
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
|
||||||
freeAddrInfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
freeAddrInfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
|
|
|
||||||
|
|
@ -259,7 +259,7 @@ proc testJson() =
|
||||||
colors: array[2, BirdColor]
|
colors: array[2, BirdColor]
|
||||||
|
|
||||||
var red = BirdColor(name: "red", rgb: [1.0, 0.0, 0.0])
|
var red = BirdColor(name: "red", rgb: [1.0, 0.0, 0.0])
|
||||||
var blue = Birdcolor(name: "blue", rgb: [0.0, 0.0, 1.0])
|
var blue = BirdColor(name: "blue", rgb: [0.0, 0.0, 1.0])
|
||||||
var b = Bird(age: 3, height: 1.734, name: "bardo", colors: [red, blue])
|
var b = Bird(age: 3, height: 1.734, name: "bardo", colors: [red, blue])
|
||||||
let jnode = %b
|
let jnode = %b
|
||||||
let data = jnode.to(Bird)
|
let data = jnode.to(Bird)
|
||||||
|
|
@ -497,7 +497,7 @@ proc testJson() =
|
||||||
doAssert array[3, float](t.arr) == [1.0,2.0,7.0]
|
doAssert array[3, float](t.arr) == [1.0,2.0,7.0]
|
||||||
|
|
||||||
doAssert MyRef(t.person).name == "boney"
|
doAssert MyRef(t.person).name == "boney"
|
||||||
doAssert MyObj(t.distFruit).color == 11
|
doAssert MyObj(t.distfruit).color == 11
|
||||||
doAssert t.dog.name == "honey"
|
doAssert t.dog.name == "honey"
|
||||||
doAssert t.fruit.color == 10
|
doAssert t.fruit.color == 10
|
||||||
doAssert seq[string](t.emails) == @["abc", "123"]
|
doAssert seq[string](t.emails) == @["abc", "123"]
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,7 @@ template fn() =
|
||||||
b: int
|
b: int
|
||||||
|
|
||||||
var a = A()
|
var a = A()
|
||||||
fromJson(a, """{"is_a": true, "a":1, "extra_key": 1}""".parse_json, Joptions(allowExtraKeys: true))
|
fromJson(a, """{"is_a": true, "a":1, "extra_key": 1}""".parseJson, Joptions(allowExtraKeys: true))
|
||||||
doAssert $a[] == "(is_a: true, a: 1)"
|
doAssert $a[] == "(is_a: true, a: 1)"
|
||||||
|
|
||||||
block testAllowMissingKeys:
|
block testAllowMissingKeys:
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ block: # "IpAddress/Sockaddr conversion"
|
||||||
doAssert($ipaddrstr == $ipaddr_1)
|
doAssert($ipaddrstr == $ipaddr_1)
|
||||||
|
|
||||||
var sockaddr: Sockaddr_storage
|
var sockaddr: Sockaddr_storage
|
||||||
var socklen: Socklen
|
var socklen: SockLen
|
||||||
var ipaddr_2: IpAddress
|
var ipaddr_2: IpAddress
|
||||||
var port_2: Port
|
var port_2: Port
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ proc initIPv6Server(hostname: string, port: Port): AsyncFD =
|
||||||
let fd = createNativeSocket(AF_INET6)
|
let fd = createNativeSocket(AF_INET6)
|
||||||
setSockOptInt(fd, SOL_SOCKET, SO_REUSEADDR, 1)
|
setSockOptInt(fd, SOL_SOCKET, SO_REUSEADDR, 1)
|
||||||
var aiList = getAddrInfo(hostname, port, AF_INET6)
|
var aiList = getAddrInfo(hostname, port, AF_INET6)
|
||||||
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.Socklen) < 0'i32:
|
if bindAddr(fd, aiList.ai_addr, aiList.ai_addrlen.SockLen) < 0'i32:
|
||||||
freeAddrInfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
raiseOSError(osLastError())
|
raiseOSError(osLastError())
|
||||||
freeAddrInfo(aiList)
|
freeAddrInfo(aiList)
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ see also: tests/osproc/*.nim; consider merging those into a single test here
|
||||||
|
|
||||||
when defined(case_testfile): # compiled test file for child process
|
when defined(case_testfile): # compiled test file for child process
|
||||||
from posix import exitnow
|
from posix import exitnow
|
||||||
proc c_exit2(code: c_int): void {.importc: "_exit", header: "<unistd.h>".}
|
proc c_exit2(code: cint): void {.importc: "_exit", header: "<unistd.h>".}
|
||||||
import os
|
import os
|
||||||
var a = 0
|
var a = 0
|
||||||
proc fun(b = 0) =
|
proc fun(b = 0) =
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ nkStmtList
|
||||||
nkIntegerLit 10
|
nkIntegerLit 10
|
||||||
nkNumericLit 5.5"""
|
nkNumericLit 5.5"""
|
||||||
|
|
||||||
doAssert $parseSQL("SELECT foo FROM table;") == "select foo from table;"
|
doAssert $parseSql("SELECT foo FROM table;") == "select foo from table;"
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT
|
SELECT
|
||||||
CustomerName,
|
CustomerName,
|
||||||
ContactName,
|
ContactName,
|
||||||
|
|
@ -31,26 +31,26 @@ SELECT
|
||||||
Country
|
Country
|
||||||
FROM table;""") == "select CustomerName, ContactName, Address, City, PostalCode, Country, CustomerName, ContactName, Address, City, PostalCode, Country from table;"
|
FROM table;""") == "select CustomerName, ContactName, Address, City, PostalCode, Country, CustomerName, ContactName, Address, City, PostalCode, Country from table;"
|
||||||
|
|
||||||
doAssert $parseSQL("SELECT foo FROM table limit 10") == "select foo from table limit 10;"
|
doAssert $parseSql("SELECT foo FROM table limit 10") == "select foo from table limit 10;"
|
||||||
doAssert $parseSQL("SELECT foo, bar, baz FROM table limit 10") == "select foo, bar, baz from table limit 10;"
|
doAssert $parseSql("SELECT foo, bar, baz FROM table limit 10") == "select foo, bar, baz from table limit 10;"
|
||||||
doAssert $parseSQL("SELECT foo AS bar FROM table") == "select foo as bar from table;"
|
doAssert $parseSql("SELECT foo AS bar FROM table") == "select foo as bar from table;"
|
||||||
doAssert $parseSQL("SELECT foo AS foo_prime, bar AS bar_prime, baz AS baz_prime FROM table") == "select foo as foo_prime, bar as bar_prime, baz as baz_prime from table;"
|
doAssert $parseSql("SELECT foo AS foo_prime, bar AS bar_prime, baz AS baz_prime FROM table") == "select foo as foo_prime, bar as bar_prime, baz as baz_prime from table;"
|
||||||
doAssert $parseSQL("SELECT * FROM table") == "select * from table;"
|
doAssert $parseSql("SELECT * FROM table") == "select * from table;"
|
||||||
doAssert $parseSQL("SELECT count(*) FROM table") == "select count(*) from table;"
|
doAssert $parseSql("SELECT count(*) FROM table") == "select count(*) from table;"
|
||||||
doAssert $parseSQL("SELECT count(*) as 'Total' FROM table") == "select count(*) as 'Total' from table;"
|
doAssert $parseSql("SELECT count(*) as 'Total' FROM table") == "select count(*) as 'Total' from table;"
|
||||||
doAssert $parseSQL("SELECT count(*) as 'Total', sum(a) as 'Aggr' FROM table") == "select count(*) as 'Total', sum(a) as 'Aggr' from table;"
|
doAssert $parseSql("SELECT count(*) as 'Total', sum(a) as 'Aggr' FROM table") == "select count(*) as 'Total', sum(a) as 'Aggr' from table;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
WHERE a = b and c = d
|
WHERE a = b and c = d
|
||||||
""") == "select * from table where a = b and c = d;"
|
""") == "select * from table where a = b and c = d;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
WHERE not b
|
WHERE not b
|
||||||
""") == "select * from table where not b;"
|
""") == "select * from table where not b;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT
|
SELECT
|
||||||
*
|
*
|
||||||
FROM
|
FROM
|
||||||
|
|
@ -59,63 +59,63 @@ WHERE
|
||||||
a and not b
|
a and not b
|
||||||
""") == "select * from table where a and not b;"
|
""") == "select * from table where a and not b;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
ORDER BY 1
|
ORDER BY 1
|
||||||
""") == "select * from table order by 1;"
|
""") == "select * from table order by 1;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
GROUP BY 1
|
GROUP BY 1
|
||||||
ORDER BY 1
|
ORDER BY 1
|
||||||
""") == "select * from table group by 1 order by 1;"
|
""") == "select * from table group by 1 order by 1;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
ORDER BY 1
|
ORDER BY 1
|
||||||
LIMIT 100
|
LIMIT 100
|
||||||
""") == "select * from table order by 1 limit 100;"
|
""") == "select * from table order by 1 limit 100;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
WHERE a = b and c = d or n is null and not b + 1 = 3
|
WHERE a = b and c = d or n is null and not b + 1 = 3
|
||||||
""") == "select * from table where a = b and c = d or n is null and not b + 1 = 3;"
|
""") == "select * from table where a = b and c = d or n is null and not b + 1 = 3;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
WHERE (a = b and c = d) or (n is null and not b + 1 = 3)
|
WHERE (a = b and c = d) or (n is null and not b + 1 = 3)
|
||||||
""") == "select * from table where(a = b and c = d) or (n is null and not b + 1 = 3);"
|
""") == "select * from table where(a = b and c = d) or (n is null and not b + 1 = 3);"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM table
|
SELECT * FROM table
|
||||||
HAVING a = b and c = d
|
HAVING a = b and c = d
|
||||||
""") == "select * from table having a = b and c = d;"
|
""") == "select * from table having a = b and c = d;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT a, b FROM table
|
SELECT a, b FROM table
|
||||||
GROUP BY a
|
GROUP BY a
|
||||||
""") == "select a, b from table group by a;"
|
""") == "select a, b from table group by a;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT a, b FROM table
|
SELECT a, b FROM table
|
||||||
GROUP BY 1, 2
|
GROUP BY 1, 2
|
||||||
""") == "select a, b from table group by 1, 2;"
|
""") == "select a, b from table group by 1, 2;"
|
||||||
|
|
||||||
doAssert $parseSQL("SELECT t.a FROM t as t") == "select t.a from t as t;"
|
doAssert $parseSql("SELECT t.a FROM t as t") == "select t.a from t as t;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT a, b FROM (
|
SELECT a, b FROM (
|
||||||
SELECT * FROM t
|
SELECT * FROM t
|
||||||
)
|
)
|
||||||
""") == "select a, b from(select * from t);"
|
""") == "select a, b from(select * from t);"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT a, b FROM (
|
SELECT a, b FROM (
|
||||||
SELECT * FROM t
|
SELECT * FROM t
|
||||||
) as foo
|
) as foo
|
||||||
""") == "select a, b from(select * from t) as foo;"
|
""") == "select a, b from(select * from t) as foo;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT a, b FROM (
|
SELECT a, b FROM (
|
||||||
SELECT * FROM (
|
SELECT * FROM (
|
||||||
SELECT * FROM (
|
SELECT * FROM (
|
||||||
|
|
@ -127,49 +127,49 @@ SELECT a, b FROM (
|
||||||
) as inner5
|
) as inner5
|
||||||
""") == "select a, b from(select * from(select * from(select * from(select * from innerTable as inner1) as inner2) as inner3) as inner4) as inner5;"
|
""") == "select a, b from(select * from(select * from(select * from(select * from innerTable as inner1) as inner2) as inner3) as inner4) as inner5;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT a, b FROM
|
SELECT a, b FROM
|
||||||
(SELECT * FROM a),
|
(SELECT * FROM a),
|
||||||
(SELECT * FROM b),
|
(SELECT * FROM b),
|
||||||
(SELECT * FROM c)
|
(SELECT * FROM c)
|
||||||
""") == "select a, b from(select * from a),(select * from b),(select * from c);"
|
""") == "select a, b from(select * from a),(select * from b),(select * from c);"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM Products
|
SELECT * FROM Products
|
||||||
WHERE Price BETWEEN 10 AND 20;
|
WHERE Price BETWEEN 10 AND 20;
|
||||||
""") == "select * from Products where Price between 10 and 20;"
|
""") == "select * from Products where Price between 10 and 20;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT id FROM a
|
SELECT id FROM a
|
||||||
JOIN b
|
JOIN b
|
||||||
ON a.id == b.id
|
ON a.id == b.id
|
||||||
""") == "select id from a join b on a.id == b.id;"
|
""") == "select id from a join b on a.id == b.id;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT id FROM a
|
SELECT id FROM a
|
||||||
JOIN (SELECT id from c) as b
|
JOIN (SELECT id from c) as b
|
||||||
ON a.id == b.id
|
ON a.id == b.id
|
||||||
""") == "select id from a join(select id from c) as b on a.id == b.id;"
|
""") == "select id from a join(select id from c) as b on a.id == b.id;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT id FROM a
|
SELECT id FROM a
|
||||||
INNER JOIN b
|
INNER JOIN b
|
||||||
ON a.id == b.id
|
ON a.id == b.id
|
||||||
""") == "select id from a inner join b on a.id == b.id;"
|
""") == "select id from a inner join b on a.id == b.id;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT id FROM a
|
SELECT id FROM a
|
||||||
OUTER JOIN b
|
OUTER JOIN b
|
||||||
ON a.id == b.id
|
ON a.id == b.id
|
||||||
""") == "select id from a outer join b on a.id == b.id;"
|
""") == "select id from a outer join b on a.id == b.id;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT id FROM a
|
SELECT id FROM a
|
||||||
CROSS JOIN b
|
CROSS JOIN b
|
||||||
ON a.id == b.id
|
ON a.id == b.id
|
||||||
""") == "select id from a cross join b on a.id == b.id;"
|
""") == "select id from a cross join b on a.id == b.id;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
|
CREATE TYPE happiness AS ENUM ('happy', 'very happy', 'ecstatic');
|
||||||
CREATE TABLE holidays (
|
CREATE TABLE holidays (
|
||||||
num_weeks int,
|
num_weeks int,
|
||||||
|
|
@ -179,16 +179,16 @@ CREATE INDEX table1_attr1 ON table1(attr1);
|
||||||
SELECT * FROM myTab WHERE col1 = 'happy';
|
SELECT * FROM myTab WHERE col1 = 'happy';
|
||||||
""") == "create type happiness as enum ('happy' , 'very happy' , 'ecstatic' ); create table holidays(num_weeks int , happiness happiness );; create index table1_attr1 on table1(attr1 );; select * from myTab where col1 = 'happy';"
|
""") == "create type happiness as enum ('happy' , 'very happy' , 'ecstatic' ); create table holidays(num_weeks int , happiness happiness );; create index table1_attr1 on table1(attr1 );; select * from myTab where col1 = 'happy';"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
|
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
|
||||||
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
|
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
|
||||||
""") == "insert into Customers (CustomerName , ContactName , Address , City , PostalCode , Country ) values ('Cardinal' , 'Tom B. Erichsen' , 'Skagen 21' , 'Stavanger' , '4006' , 'Norway' );"
|
""") == "insert into Customers (CustomerName , ContactName , Address , City , PostalCode , Country ) values ('Cardinal' , 'Tom B. Erichsen' , 'Skagen 21' , 'Stavanger' , '4006' , 'Norway' );"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
INSERT INTO TableName DEFAULT VALUES
|
INSERT INTO TableName DEFAULT VALUES
|
||||||
""") == "insert into TableName default values;"
|
""") == "insert into TableName default values;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
UPDATE Customers
|
UPDATE Customers
|
||||||
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
|
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
|
||||||
WHERE CustomerID = 1;
|
WHERE CustomerID = 1;
|
||||||
|
|
@ -209,9 +209,9 @@ nkStmtList
|
||||||
nkStringLit Frankfurt
|
nkStringLit Frankfurt
|
||||||
nkNone"""
|
nkNone"""
|
||||||
|
|
||||||
doAssert $parseSQL("DELETE FROM table_name;") == "delete from table_name;"
|
doAssert $parseSql("DELETE FROM table_name;") == "delete from table_name;"
|
||||||
|
|
||||||
doAssert treeRepr(parseSQL("DELETE FROM table_name;")
|
doAssert treeRepr(parseSql("DELETE FROM table_name;")
|
||||||
) == """
|
) == """
|
||||||
|
|
||||||
nkStmtList
|
nkStmtList
|
||||||
|
|
@ -219,14 +219,14 @@ nkStmtList
|
||||||
nkIdent table_name
|
nkIdent table_name
|
||||||
nkNone"""
|
nkNone"""
|
||||||
|
|
||||||
doAssert $parseSQL("DELETE * FROM table_name;") == "delete from table_name;"
|
doAssert $parseSql("DELETE * FROM table_name;") == "delete from table_name;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
--Select all:
|
--Select all:
|
||||||
SELECT * FROM Customers;
|
SELECT * FROM Customers;
|
||||||
""") == "select * from Customers;"
|
""") == "select * from Customers;"
|
||||||
|
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
|
SELECT * FROM Customers WHERE (CustomerName LIKE 'L%'
|
||||||
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
|
OR CustomerName LIKE 'R%' /*OR CustomerName LIKE 'S%'
|
||||||
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
|
OR CustomerName LIKE 'T%'*/ OR CustomerName LIKE 'W%')
|
||||||
|
|
@ -235,9 +235,9 @@ ORDER BY CustomerName;
|
||||||
""") == "select * from Customers where(CustomerName like 'L%' or CustomerName like 'R%' or CustomerName like 'W%') and Country = 'USA' order by CustomerName;"
|
""") == "select * from Customers where(CustomerName like 'L%' or CustomerName like 'R%' or CustomerName like 'W%') and Country = 'USA' order by CustomerName;"
|
||||||
|
|
||||||
# parse quoted keywords as identifires
|
# parse quoted keywords as identifires
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT `SELECT`, `FROM` as `GROUP` FROM `WHERE`;
|
SELECT `SELECT`, `FROM` as `GROUP` FROM `WHERE`;
|
||||||
""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""
|
""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""
|
||||||
doAssert $parseSQL("""
|
doAssert $parseSql("""
|
||||||
SELECT "SELECT", "FROM" as "GROUP" FROM "WHERE";
|
SELECT "SELECT", "FROM" as "GROUP" FROM "WHERE";
|
||||||
""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""
|
""") == """select "SELECT", "FROM" as "GROUP" from "WHERE";"""
|
||||||
|
|
|
||||||
|
|
@ -861,7 +861,7 @@ suite "RST include directive":
|
||||||
test "Include whole":
|
test "Include whole":
|
||||||
"other.rst".writeFile("**test1**")
|
"other.rst".writeFile("**test1**")
|
||||||
let input = ".. include:: other.rst"
|
let input = ".. include:: other.rst"
|
||||||
doAssert "<strong>test1</strong>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
|
doAssert "<strong>test1</strong>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
|
||||||
removeFile("other.rst")
|
removeFile("other.rst")
|
||||||
|
|
||||||
test "Include starting from":
|
test "Include starting from":
|
||||||
|
|
@ -875,7 +875,7 @@ OtherStart
|
||||||
.. include:: other.rst
|
.. include:: other.rst
|
||||||
:start-after: OtherStart
|
:start-after: OtherStart
|
||||||
"""
|
"""
|
||||||
check "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
|
check "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
|
||||||
removeFile("other.rst")
|
removeFile("other.rst")
|
||||||
|
|
||||||
test "Include everything before":
|
test "Include everything before":
|
||||||
|
|
@ -889,7 +889,7 @@ And this should **NOT** be visible in `docs.html`
|
||||||
.. include:: other.rst
|
.. include:: other.rst
|
||||||
:end-before: OtherEnd
|
:end-before: OtherEnd
|
||||||
"""
|
"""
|
||||||
doAssert "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
|
doAssert "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
|
||||||
removeFile("other.rst")
|
removeFile("other.rst")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -907,7 +907,7 @@ And this should **NOT** be visible in `docs.html`
|
||||||
:start-after: OtherStart
|
:start-after: OtherStart
|
||||||
:end-before: OtherEnd
|
:end-before: OtherEnd
|
||||||
"""
|
"""
|
||||||
check "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
|
check "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
|
||||||
removeFile("other.rst")
|
removeFile("other.rst")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -927,7 +927,7 @@ And this should **NOT** be visible in `docs.html`
|
||||||
:start-after: OtherStart
|
:start-after: OtherStart
|
||||||
:end-before: OtherEnd
|
:end-before: OtherEnd
|
||||||
"""
|
"""
|
||||||
doAssert "<em>Visible</em>" == rstTohtml(input, {roSandboxDisabled}, defaultConfig())
|
doAssert "<em>Visible</em>" == rstToHtml(input, {roSandboxDisabled}, defaultConfig())
|
||||||
removeFile("other.rst")
|
removeFile("other.rst")
|
||||||
|
|
||||||
suite "RST escaping":
|
suite "RST escaping":
|
||||||
|
|
|
||||||
|
|
@ -417,7 +417,7 @@ Some chapter
|
||||||
|
|
||||||
"""
|
"""
|
||||||
var error9Bad = new string
|
var error9Bad = new string
|
||||||
let output9Bad = input9bad.toHtml(error=error9Bad)
|
let output9Bad = input9Bad.toHtml(error=error9Bad)
|
||||||
check(error9Bad[] == "input(15, 1) Error: new section expected (section " &
|
check(error9Bad[] == "input(15, 1) Error: new section expected (section " &
|
||||||
"level inconsistent: underline ~~~~~ unexpectedly found, while " &
|
"level inconsistent: underline ~~~~~ unexpectedly found, while " &
|
||||||
"the following intermediate section level(s) are missing on " &
|
"the following intermediate section level(s) are missing on " &
|
||||||
|
|
@ -464,7 +464,7 @@ Some chapter
|
||||||
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames = files)
|
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames = files)
|
||||||
rstGenera.renderRstToOut(rst, output)
|
rstGenera.renderRstToOut(rst, output)
|
||||||
doAssert rstGenera.meta[metaTitle] == "Title0"
|
doAssert rstGenera.meta[metaTitle] == "Title0"
|
||||||
doAssert rstGenera.meta[metaSubTitle] == "SubTitle0"
|
doAssert rstGenera.meta[metaSubtitle] == "SubTitle0"
|
||||||
doAssert "<h1 id=\"level1\"><center>Level1</center></h1>" in output
|
doAssert "<h1 id=\"level1\"><center>Level1</center></h1>" in output
|
||||||
doAssert "<h2 id=\"level2\">Level2</h2>" in output
|
doAssert "<h2 id=\"level2\">Level2</h2>" in output
|
||||||
doAssert "<h3 id=\"level3\"><center>Level3</center></h3>" in output
|
doAssert "<h3 id=\"level3\"><center>Level3</center></h3>" in output
|
||||||
|
|
@ -491,7 +491,7 @@ Some chapter
|
||||||
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames=files)
|
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames=files)
|
||||||
rstGenera.renderRstToOut(rst, output)
|
rstGenera.renderRstToOut(rst, output)
|
||||||
doAssert rstGenera.meta[metaTitle] == ""
|
doAssert rstGenera.meta[metaTitle] == ""
|
||||||
doAssert rstGenera.meta[metaSubTitle] == ""
|
doAssert rstGenera.meta[metaSubtitle] == ""
|
||||||
doAssert "<h1 id=\"title0\"><center>Title0</center></h1>" in output
|
doAssert "<h1 id=\"title0\"><center>Title0</center></h1>" in output
|
||||||
doAssert "<h2 id=\"subtitle0\"><center>SubTitle0</center></h2>" in output
|
doAssert "<h2 id=\"subtitle0\"><center>SubTitle0</center></h2>" in output
|
||||||
|
|
||||||
|
|
@ -521,7 +521,7 @@ Some chapter
|
||||||
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames=files)
|
rstGenera.initRstGenerator(outHtml, defaultConfig(), "input", filenames=files)
|
||||||
rstGenera.renderRstToOut(rst, output)
|
rstGenera.renderRstToOut(rst, output)
|
||||||
doAssert rstGenera.meta[metaTitle] == "Title0"
|
doAssert rstGenera.meta[metaTitle] == "Title0"
|
||||||
doAssert rstGenera.meta[metaSubTitle] == ""
|
doAssert rstGenera.meta[metaSubtitle] == ""
|
||||||
doAssert output ==
|
doAssert output ==
|
||||||
"\n<h1 id=\"mysection1a\">MySection1a</h1>" & # RST
|
"\n<h1 id=\"mysection1a\">MySection1a</h1>" & # RST
|
||||||
"\n<h1 id=\"mysection1b\">MySection1b</h1>" & # Markdown
|
"\n<h1 id=\"mysection1b\">MySection1b</h1>" & # Markdown
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ checkVector("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
proc testIsValidSha1Hash =
|
proc testIsValidSha1Hash =
|
||||||
doAssert not isValidSha1Hash("")
|
doAssert not isValidSha1Hash("")
|
||||||
doAssert not isValidSha1Hash("042D4BE2B90ED0672E717D71850ABDB0A2D19CD11")
|
doAssert not isValidSha1Hash("042D4BE2B90ED0672E717D71850ABDB0A2D19CD11")
|
||||||
doAssert not isValidSha1hash("042G4BE2B90ED0672E717D71850ABDB0A2D19CD1")
|
doAssert not isValidSha1Hash("042G4BE2B90ED0672E717D71850ABDB0A2D19CD1")
|
||||||
doAssert isValidSha1Hash("042D4BE2B90ED0672E717D71850ABDB0A2D19CD1")
|
doAssert isValidSha1Hash("042D4BE2B90ED0672E717D71850ABDB0A2D19CD1")
|
||||||
doAssert isValidSha1Hash("042d4be2b90ed0672e717d71850abdb0a2d19cd1")
|
doAssert isValidSha1Hash("042d4be2b90ed0672e717d71850abdb0a2d19cd1")
|
||||||
doAssert isValidSha1Hash("042d4be2b90ed0672e717D71850ABDB0A2D19CD1")
|
doAssert isValidSha1Hash("042d4be2b90ed0672e717D71850ABDB0A2D19CD1")
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,8 @@ proc notifiedShutdown(port: Port) {.thread.} =
|
||||||
proc main() =
|
proc main() =
|
||||||
when defined(posix):
|
when defined(posix):
|
||||||
var
|
var
|
||||||
ignoreAction = SigAction(sa_handler: SIG_IGN)
|
ignoreAction = Sigaction(sa_handler: SIG_IGN)
|
||||||
oldSigPipeHandler: SigAction
|
oldSigPipeHandler: Sigaction
|
||||||
if sigemptyset(ignoreAction.sa_mask) == -1:
|
if sigemptyset(ignoreAction.sa_mask) == -1:
|
||||||
raiseOSError(osLastError(), "Couldn't create an empty signal set")
|
raiseOSError(osLastError(), "Couldn't create an empty signal set")
|
||||||
if sigaction(SIGPIPE, ignoreAction, oldSigPipeHandler) == -1:
|
if sigaction(SIGPIPE, ignoreAction, oldSigPipeHandler) == -1:
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ proc main() =
|
||||||
|
|
||||||
block: # setSlice
|
block: # setSlice
|
||||||
var a = "Hello, Nim!"
|
var a = "Hello, Nim!"
|
||||||
doassert a.dup(setSlice(7 .. 9)) == "Nim"
|
doAssert a.dup(setSlice(7 .. 9)) == "Nim"
|
||||||
doAssert a.dup(setSlice(0 .. 0)) == "H"
|
doAssert a.dup(setSlice(0 .. 0)) == "H"
|
||||||
doAssert a.dup(setSlice(0 .. 1)) == "He"
|
doAssert a.dup(setSlice(0 .. 1)) == "He"
|
||||||
doAssert a.dup(setSlice(0 .. 10)) == a
|
doAssert a.dup(setSlice(0 .. 10)) == a
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ block tstreams2:
|
||||||
block tstreams3:
|
block tstreams3:
|
||||||
try:
|
try:
|
||||||
var fs = openFileStream("shouldneverexist.txt")
|
var fs = openFileStream("shouldneverexist.txt")
|
||||||
except IoError:
|
except IOError:
|
||||||
echo "threw exception"
|
echo "threw exception"
|
||||||
|
|
||||||
static:
|
static:
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ proc search(r: PRadixNode, s: string): PRadixNode =
|
||||||
proc contains*(r: PRadixNode, s: string): bool =
|
proc contains*(r: PRadixNode, s: string): bool =
|
||||||
return search(r, s) != nil
|
return search(r, s) != nil
|
||||||
|
|
||||||
proc testOrincl*(r: var PRadixNode, s: string): bool =
|
proc testOrIncl*(r: var PRadixNode, s: string): bool =
|
||||||
nil
|
nil
|
||||||
|
|
||||||
proc incl*(r: var PRadixNode, s: string) = discard testOrIncl(r, s)
|
proc incl*(r: var PRadixNode, s: string) = discard testOrIncl(r, s)
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ proc staticTz(hours, minutes, seconds: int = 0): Timezone {.noSideEffect.} =
|
||||||
result.utcOffset = offset
|
result.utcOffset = offset
|
||||||
result.time = time
|
result.time = time
|
||||||
|
|
||||||
newTimezone("", zonedTimeFromTime, zonedTImeFromAdjTime)
|
newTimezone("", zonedTimeFromTime, zonedTimeFromAdjTime)
|
||||||
|
|
||||||
template parseTest(s, f, sExpected: string, ydExpected: int) =
|
template parseTest(s, f, sExpected: string, ydExpected: int) =
|
||||||
let
|
let
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ doAssert($x4[].kind() == "akString")
|
||||||
|
|
||||||
block:
|
block:
|
||||||
# gimme a new scope dammit
|
# gimme a new scope dammit
|
||||||
var myarr: array[0..4, array[0..4, string]] = [
|
var myArr: array[0..4, array[0..4, string]] = [
|
||||||
["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
|
["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
|
||||||
["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
|
["test", "1", "2", "3", "4"], ["test", "1", "2", "3", "4"],
|
||||||
["test", "1", "2", "3", "4"]]
|
["test", "1", "2", "3", "4"]]
|
||||||
|
|
|
||||||
1
tests/stdlib/ttypeinfo.nims
Normal file
1
tests/stdlib/ttypeinfo.nims
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
--styleCheck:off
|
||||||
|
|
@ -218,5 +218,5 @@ block: # bug #17768
|
||||||
let s1 = "abcdef"
|
let s1 = "abcdef"
|
||||||
let s2 = "abcdéf"
|
let s2 = "abcdéf"
|
||||||
|
|
||||||
doAssert s1.runeSubstr(0, -1) == "abcde"
|
doAssert s1.runeSubStr(0, -1) == "abcde"
|
||||||
doAssert s2.runeSubstr(0, -1) == "abcdé"
|
doAssert s2.runeSubStr(0, -1) == "abcdé"
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ block:
|
||||||
chk 0.1
|
chk 0.1
|
||||||
chk Inf
|
chk Inf
|
||||||
chk NegInf
|
chk NegInf
|
||||||
chk Nan
|
chk NaN
|
||||||
chk 3.1415926535897932384626433
|
chk 3.1415926535897932384626433
|
||||||
|
|
||||||
block:
|
block:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue