summary refs log tree commit diff stats
path: root/tests/manyloc/packages/noconflicts.nim
blob: 2183d01a8334e55ef5af77a46a8783c4ad445abb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
discard """
  output: '''package1/strutils
package2/strutils
noconflicts
new os.nim'''
"""

import package1/strutils as su1
import package2.strutils as su2

import os

su1.foo()
su2.foo()
echo "noconflicts"
yay()
itle='author Clay Sweetser <clay.sweetser@gmail.com> 2014-04-15 02:30:15 -0400 committer Clay Sweetser <clay.sweetser@gmail.com> 2014-04-16 03:35:09 -0400 Added tests for getFileInfo proc.' href='/ahoang/Nim/commit/tests/stdlib/tgetfileinfo.nim?h=devel&id=9ce0ac38e5816910730843f4ef0c565e3c839ad0'>9ce0ac38e ^
58187f212 ^
9ce0ac38e ^


69e2b61c0 ^
9ce0ac38e ^




69e2b61c0 ^
9ce0ac38e ^




c7298561c ^

9ce0ac38e ^


69e2b61c0 ^
e0ae9f524 ^
9ce0ac38e ^




69e2b61c0 ^
e0ae9f524 ^
9ce0ac38e ^

4414dafd5 ^










a85e954b5 ^


4414dafd5 ^



a85e954b5 ^



4414dafd5 ^


a85e954b5 ^





4414dafd5 ^
779b1cc5b ^

8ed2431db ^
779b1cc5b ^

8ed2431db ^
4414dafd5 ^

a85e954b5 ^


4414dafd5 ^
779b1cc5b ^
8ed2431db ^













779b1cc5b ^

8ed2431db ^



e0ae9f524 ^
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
           
                               
                                                      
                 


                   
                               










                                                 
                                                  




                                      
                            










                                                                        
                 






                                                                           

                 


















                                                                            
                                          


                                            
                   




                                            
                   




                                           

                                 


                                             
                            
             




                                              
                            
             

                                              










                                                  


                                           



                                      



                                                                       


                      





                            
 

                                        
                        

                                              
 

                        


                              
 
                                          













                                                      

                                             



                              
                 
discard """
  matrix: "--mm:refc; --mm:orc"
  output: "pcDir\npcFile\npcLinkToDir\npcLinkToFile\n"
  joinable: false
"""

import os, strutils
import std/[syncio, assertions]
# Cases
#  1 - String : Existing File : Symlink true
#  2 - String : Existing File : Symlink false
#  3 - String : Non-existing File : Symlink true
#  4 - String : Non-existing File : Symlink false
#  5 - Handle : Valid File
#  6 - Handle : Invalid File
#  7 - Handle : Valid Handle
#  8 - Handle : Invalid Handle

proc genBadFileName(limit = 100): string =
    ## Generates a filename of a nonexistent file.
    ## Returns "" if generation fails.
    result = "a"
    var hitLimit = true

    for i in 0..100:
      if fileExists(result):
        result.add("a")
      else:
        hitLimit = false
        break
    if hitLimit:
      result = ""

proc caseOneAndTwo(followLink: bool) =
  try:
    discard getFileInfo(getAppFilename(), followLink)
    #echo("String : Existing File : Symlink $# : Success" % $followLink)
  except OSError:
    echo("String : Existing File : Symlink $# : Failure" % $followLink)

proc caseThreeAndFour(followLink: bool) =
  var invalidName = genBadFileName()
  try:
    discard getFileInfo(invalidName, true)
    echo("String : Non-existing File : Symlink $# : Failure" % $followLink)
  except OSError:
    discard
    #echo("String : Non-existing File : Symlink $# : Success" % $followLink)

proc testGetFileInfo =
  # Case 1
  caseOneAndTwo(true)

  # Case 2
  caseOneAndTwo(false)

  # Case 3
  caseThreeAndFour(true)

  # Case 4
  caseThreeAndFour(false)

  # Case 5 and 7
  block:
    let
      testFile = open(getAppFilename())
      testHandle = getFileHandle(testFile)
    try:
      discard getFileInfo(testFile)
      #echo("Handle : Valid File : Success")
    except IOError:
      echo("Handle : Valid File : Failure")

    try:
      discard getFileInfo(testHandle)
      #echo("Handle : Valid File : Success")
    except IOError:
      echo("Handle : Valid File : Failure")

  # Case 6 and 8
  block:
    let
      testFile: File = nil
      testHandle = FileHandle(-1)
    try:
      discard getFileInfo(testFile)
      echo("Handle : Invalid File : Failure")
    except IOError, OSError:
      discard
      #echo("Handle : Invalid File : Success")

    try:
      discard getFileInfo(testHandle)
      echo("Handle : Invalid File : Failure")
    except IOError, OSError:
      discard
      #echo("Handle : Invalid File : Success")

  # Test kind for files, directories and symlinks.
  block:
    let
      tmp = getTempDir()
      dirPath      = tmp / "test-dir"
      filePath     = tmp / "test-file"
      linkDirPath  = tmp / "test-link-dir"
      linkFilePath = tmp / "test-link-file"

    createDir(dirPath)
    writeFile(filePath, "")
    when defined(posix):
      createSymlink(dirPath, linkDirPath)
      createSymlink(filePath, linkFilePath)

    let
      dirInfo = getFileInfo(dirPath)
      fileInfo = getFileInfo(filePath)
    when defined(posix):
      let
        linkDirInfo = getFileInfo(linkDirPath, followSymlink = false)
        linkFileInfo = getFileInfo(linkFilePath, followSymlink = false)

    echo dirInfo.kind
    echo fileInfo.kind
    when defined(posix):
      echo linkDirInfo.kind
      echo linkFileInfo.kind
    else:
      echo pcLinkToDir
      echo pcLinkToFile

    doAssert dirInfo.isSpecial == false
    doAssert fileInfo.isSpecial == false
    when defined(posix):
      doAssert linkDirInfo.isSpecial == false
      doAssert linkFileInfo.isSpecial == false

    removeDir(dirPath)
    removeFile(filePath)
    when defined(posix):
      removeFile(linkDirPath)
      removeFile(linkFilePath)

  # Test that `isSpecial` is set correctly
  block:
    when defined(posix):
      let
        tmp = getTempDir()
        fifoPath     = tmp / "test-fifo"
        linkFifoPath = tmp / "test-link-fifo"

      doAssert execShellCmd("mkfifo " & fifoPath) == 0
      createSymlink(fifoPath, linkFifoPath)

      let
        fifoInfo = getFileInfo(fifoPath)
        linkFifoInfo = getFileInfo(linkFifoPath)

      doAssert fifoInfo.isSpecial == true
      doAssert linkFifoInfo.isSpecial == true

      removeFile(fifoPath)
      removeFile(linkFifoPath)

testGetFileInfo()