discard """ output: ''' All: __really_obscure_dir_name/are.x __really_obscure_dir_name/created __really_obscure_dir_name/dirs __really_obscure_dir_name/files.q __really_obscure_dir_name/some __really_obscure_dir_name/test __really_obscure_dir_name/testing.r __really_obscure_dir_name/these.txt Files: __really_obscure_dir_name/are.x __really_obscure_dir_name/files.q __really_obscure_dir_name/testing.r __really_obscure_dir_name/these.txt Dirs: __really_obscure_dir_name/created __really_obscure_dir_name/dirs __really_obscure_dir_name/some __really_obscure_dir_name/test Raises Raises ''' joinable: false """ # test os path creation, iteration, and deletion import os, strutils, pathnorm from stdtest/specialpaths import buildDir block fileOperations: let files = @["these.txt", "are.x", "testing.r", "files.q"] let dirs = @["some", "created", "test", "dirs"] let dname = "__really_obscure_dir_name" createDir(dname) doAssert dirExists(dname) block: # copyFile, copyFileToDir doAssertRaises(OSError): copyFile(dname/"nonexistent.txt", dname/"nonexistent.txt") let fname = "D20201009T112235" let fname2 = "D20201009T112235.2" let str = "foo1\0foo2\nfoo3\0" let file = dname/fname let file2 = dname/fname2 writeFile(file, str) doAssert readFile(file) == str let sub = "sub" doAssertRaises(OSError): copyFile(file, dname/sub/fname2) doAssertRaises(OSError): copyFileToDir(file, dname/sub) doAssertRaises(ValueError): copyFileToDir(file, "") copyFile(file, file2) doAssert fileExists(file2) doAssert readFile(file2) == str createDir(dname/sub) copyFileToDir(file, dname/sub) doAssert fileExists(dname/sub/fname) removeDir(dname/sub) doAssert not dirExists(dname/sub) removeFile(file) removeFile(file2) # Test creating files and dirs for dir in dirs: createDir(dname/dir) doAssert dirExists(dname/dir) for file in files: let fh = open(dname/file, fmReadWrite) fh.close() doAssert fileExists(dname/file) echo "All:" template norm(x): untyped = (when defined(windows): x.replace('\\', '/') else: x) for path in walkPattern(dname/"*"): echo path.norm echo "Files:" for path in walkFiles(dname/"*"): echo path.norm echo "Dirs:" for path in walkDirs(dname/"*"): echo path.norm # Test removal of files dirs for dir in dirs: removeDir(dname/dir) doAssert: not dirExists(dname/dir) for file in files: removeFile(dname/file) doAssert: not fileExists(dname/file) removeDir(dname) doAssert: not dirExists(dname) # createDir should create recursive directories createDir(dirs[0] / dirs[1]) doAssert dirExists(dirs[0] / dirs[1]) # true removeDir(dirs[0]) # createDir should properly handle trailing separator createDir(dname / "") doAssert dirExists(dname) # true removeDir(dname) # createDir should raise IOError if the path exists # and is not a directory open(dname, fmWrite).close try: createDir(dname) except IOError: echo "Raises" removeFile(dname) # removeFile should not remove directory createDir(dname) try: removeFile(dname) except OSError: echo "Raises" removeDir(dname) # test copyDir: createDir("a/b") open("a/b/file.txt", fmWrite).close createDir("a/b/c") open("a/b/c/fileC.txt", fmWrite).close copyDir("a", "../dest/a") removeDir("a") doAssert dirExists("../dest/a/b") doAssert fileExists("../dest/a/b/file.txt") doAssert fileExists("../dest/a/b/c/fileC.txt") removeDir("../dest") # test copyDir: # if separator at the end of a path createDir("a/b") open("a/file.txt", fmWrite).close copyDir("a/", "../dest/a/") removeDir("a") doAssert dirExists("../dest/a/b") doAssert fileExists("../dest/a/file.txt") removeDir("../dest") # Symlink handling in `copyFile`, `copyFileWithPermissions`, `copyFileToDir`, # `copyDir`, `copyDirWithPermissions`, `moveFile`, and `moveDir`. block: const symlinksAreHandled = not defined(windows) const dname = buildDir/"D20210116T140629" const subDir = dname/"sub" const subDir2 = dname/"sub2" const brokenSymlinkName = "D20210101T191320_BROKEN_SYMLINK" const brokenSymlink = dname/brokenSymlinkName const brokenSymlinkSrc = "D20210101T191320_nonexistent" const brokenSymlinkCopy = brokenSymlink & "_COPY" const brokenSymlinkInSubDir = subDir/brokenSymlinkName const brokenSymlinkInSubDir2 = subDir2/brokenSymlinkName createDir(subDir) createSymlink(brokenSymlinkSrc, brokenSymlink)
discard """
output: '''true
true
true
5
4
3
2
1
0
it should stop now
18446744073709551615
4294967295
'''
"""
# bug 1420
var x = 40'u32
var y = 30'u32
echo x > y # works
echo((40'i32) > (30'i32))
echo((40'u32) > (30'u32)) # Error: ordinal type expected
# bug #4220
const count: uint = 5
var stop_me = false
for i in countdown(count, 0):
echo i
if stop_me: break
if i == 0:
echo "it should stop now"
stop_me = true
# bug #3985
const
HIGHEST_64BIT_UINT = 0xFFFFFFFFFFFFFFFF'u
HIGHEST_32BIT_UINT = 0xFFFFFFFF'u
echo($HIGHEST_64BIT_UINT)
echo($HIGHEST_32BIT_UINT)