Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Evan Edmond
fslpy
Commits
ce2d5b52
Commit
ce2d5b52
authored
Nov 14, 2016
by
Paul McCarthy
Browse files
fsl.utils.path test suite updated.
parent
5d644d61
Changes
1
Hide whitespace changes
Inline
Side-by-side
tests/test_fsl_utils_path.py
View file @
ce2d5b52
...
...
@@ -5,7 +5,12 @@
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
from
__future__
import
print_function
import
os
import
os.path
as
op
import
shutil
import
tempfile
import
pytest
...
...
@@ -18,7 +23,7 @@ def test_addExt_exists_shouldPass(testdir):
are valid.
"""
replacements
=
fslimage
.
REPLACEMENT
S
groups
=
fslimage
.
FILE_GROUP
S
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
tests
=
[
...
...
@@ -41,7 +46,7 @@ def test_addExt_exists_shouldPass(testdir):
assert
fslpath
.
addExt
(
prefix
,
allowedExts
,
mustExist
=
True
,
replace
=
replacement
s
)
==
output
fileGroups
=
group
s
)
==
output
def
test_addExt_exists_shouldFail
(
testdir
):
...
...
@@ -49,8 +54,8 @@ def test_addExt_exists_shouldFail(testdir):
error.
"""
replacements
=
fslimage
.
REPLACEMENT
S
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
groups
=
fslimage
.
FILE_GROUP
S
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
shouldFail
=
[
...
...
@@ -83,7 +88,7 @@ def test_addExt_exists_shouldFail(testdir):
for
test
in
shouldFail
:
prefix
=
op
.
join
(
testdir
,
'nifti_formats'
,
test
[
0
])
allowed
=
allowedExts
replace
=
replacements
group
=
groups
if
len
(
test
)
>=
2
:
if
not
(
test
[
1
]
==
False
):
...
...
@@ -91,14 +96,14 @@ def test_addExt_exists_shouldFail(testdir):
if
len
(
test
)
==
3
:
if
not
(
test
[
2
]
==
False
):
replace
=
test
[
2
]
group
=
test
[
2
]
with
pytest
.
raises
(
fslpath
.
PathError
):
fslpath
.
addExt
(
prefix
,
allowed
,
mustExist
=
True
,
replace
=
replace
)
fileGroups
=
group
)
def
test_addExt_noExist
(
testdir
):
...
...
@@ -136,7 +141,7 @@ def test_addExt_noExist(testdir):
def
test_removeExt
(
testdir
):
def
test_removeExt
():
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
...
...
@@ -170,13 +175,13 @@ def test_removeExt(testdir):
assert
fslpath
.
removeExt
(
path
,
allowed
)
==
output
def
test_getExt
(
testdir
):
def
test_getExt
():
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
# len(test) == 2 -> allowedExts set from above
# Otherwise, allowedExts set from test tuple
shouldPas
s
=
[
test
s
=
[
(
'blah.blah'
,
'.blah'
,
None
),
(
'blah.blah'
,
'.blah'
,
[
'.blah'
]),
(
'blah.blah'
,
'blah'
,
[
'blah'
]),
...
...
@@ -189,36 +194,74 @@ def test_getExt(testdir):
(
'blah.hdr'
,
'.hdr'
),
(
'blah.img'
,
'.img'
),
(
'blah.img.gz'
,
'.img.gz'
),
]
shouldRaise
=
[
(
'blah'
,
''
),
(
'blah.blah'
,
''
),
(
'blah.blah'
,
''
,
[
'bla'
]),
(
'blah.nii.gz'
,
''
,
[
'.nii'
]),
]
for
test
in
shouldPas
s
:
for
test
in
test
s
:
filename
=
test
[
0
]
output
=
test
[
1
]
if
len
(
test
)
==
2
:
allowed
=
allowedExts
else
:
allowed
=
test
[
2
]
print
filename
,
'=='
,
output
print
(
filename
,
'=='
,
output
)
assert
fslpath
.
getExt
(
filename
,
allowed
)
==
output
def
test_splitExt
():
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
for
test
in
shouldRaise
:
filename
=
test
[
0
]
output
=
test
[
1
]
# len(test) == 2 -> allowedExts set from above
# Otherwise, allowedExts set from test tuple
tests
=
[
(
'blah'
,
(
'blah'
,
''
)),
(
'blah.blah'
,
(
'blah.blah'
,
''
)),
(
'blah.blah'
,
(
'blah'
,
'.blah'
),
[
'.blah'
]),
(
'blah.blah'
,
(
'blah.'
,
'blah'
),
[
'blah'
]),
(
'blah.nii'
,
(
'blah'
,
'.nii'
)),
(
'blah.nii.gz'
,
(
'blah'
,
'.nii.gz'
)),
(
'blah.img'
,
(
'blah'
,
'.img'
)),
(
'blah.hdr'
,
(
'blah'
,
'.hdr'
)),
(
'blah.img.gz'
,
(
'blah'
,
'.img.gz'
)),
(
'blah.nii.gz'
,
(
'blah.nii.gz'
,
''
),
[]),
(
'blah.nii.gz'
,
(
'blah.nii'
,
'.gz'
),
[
'.gz'
]),
(
'blah.nii.gz'
,
(
'blah.nii.gz'
,
''
),
[
'.nii'
]),
(
'blah.nii.gz'
,
(
'blah'
,
'.nii.gz'
),
[
'.nii.gz'
]),
(
'blah.nii.gz'
,
(
'blah.'
,
'nii.gz'
),
[
'nii.gz'
]),
(
'blah.blah'
,
(
'blah'
,
'.blah'
),
None
),
(
'blah.blah'
,
(
'blah'
,
'.blah'
),
[
'.blah'
]),
(
'blah.blah'
,
(
'blah.'
,
'blah'
),
[
'blah'
]),
(
'blah'
,
(
'blah'
,
''
),
None
),
(
'blah.nii'
,
(
'blah'
,
'.nii'
),
None
),
(
'blah.nii.gz'
,
(
'blah.nii'
,
'.gz'
),
None
),
(
'blah.nii'
,
(
'blah'
,
'.nii'
)),
(
'blah.nii.gz'
,
(
'blah'
,
'.nii.gz'
)),
(
'blah.hdr'
,
(
'blah'
,
'.hdr'
)),
(
'blah.img'
,
(
'blah'
,
'.img'
)),
(
'blah.img.gz'
,
(
'blah'
,
'.img.gz'
)),
(
'blah'
,
(
'blah'
,
''
)),
(
'blah.blah'
,
(
'blah.blah'
,
''
)),
(
'blah.blah'
,
(
'blah.blah'
,
''
),
[
'bla'
]),
(
'blah.nii.gz'
,
(
'blah.nii.gz'
,
''
),
[
'.nii'
]),
]
for
test
in
tests
:
filename
=
test
[
0
]
outbase
,
outext
=
test
[
1
]
if
len
(
test
)
==
2
:
allowed
=
allowedExts
else
:
allowed
=
test
[
2
]
with
pytest
.
raises
(
fslpath
.
PathError
):
fslpath
.
getExt
(
filename
,
allowed
)
print
(
filename
,
'=='
,
(
outbase
,
outext
))
assert
fslpath
.
splitExt
(
filename
,
allowed
)
==
(
outbase
,
outext
)
def
test_deepest
():
...
...
@@ -281,4 +324,284 @@ def test_shallowest():
]
for
path
,
suffixes
,
output
in
tests
:
assert
fslpath
.
shallowest
(
path
,
suffixes
)
==
output
assert
fslpath
.
shallowest
(
path
,
suffixes
)
==
output
def
test_getFileGroup
():
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
groups
=
fslimage
.
FILE_GROUPS
# (files_to_create,
# [(path, expected),
# ...
# ]
# )
#
# expected == 'all' is equivalent to expected == files_to_create
allTests
=
[
([
'file.hdr'
,
'file.img'
],
[
(
'file.hdr'
,
'all'
),
(
'file.img'
,
'all'
)]),
([
'file.hdr.gz'
,
'file.img.gz'
],
[
(
'file.hdr.gz'
,
'all'
),
(
'file.img.gz'
,
'all'
)]),
([
'file.hdr'
,
'file.img'
,
'file.nii'
],
[
(
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
[
'file.hdr'
,
'file.img'
])]),
([
'file.hdr'
,
'file.img'
,
'file.blob'
],
[
(
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
[
'file.hdr'
,
'file.img'
])]),
([
'file.hdr'
],
[
(
'file.hdr'
,
[
'file.hdr'
]),
(
'file.img'
,
[
'file.img'
])]),
([
'file.img'
],
[
(
'file.hdr'
,
[
'file.hdr'
]),
(
'file.img'
,
[
'file.img'
])]),
]
workdir
=
tempfile
.
mkdtemp
()
try
:
for
files_to_create
,
tests
in
allTests
:
for
fn
in
files_to_create
:
with
open
(
op
.
join
(
workdir
,
fn
),
'wt'
)
as
f
:
f
.
write
(
'{}
\n
'
.
format
(
fn
))
for
path
,
expected
in
tests
:
if
expected
==
'all'
:
expected
=
list
(
files_to_create
)
fullPaths
=
fslpath
.
getFileGroup
(
op
.
join
(
workdir
,
path
),
allowedExts
=
allowedExts
,
fileGroups
=
groups
,
fullPaths
=
True
)
exts
=
fslpath
.
getFileGroup
(
op
.
join
(
workdir
,
path
),
allowedExts
=
allowedExts
,
fileGroups
=
groups
,
fullPaths
=
False
)
assert
sorted
(
fullPaths
)
==
sorted
([
op
.
join
(
workdir
,
e
)
for
e
in
expected
])
assert
sorted
(
exts
)
==
sorted
([
fslpath
.
getExt
(
e
,
allowedExts
)
for
e
in
expected
])
for
f
in
files_to_create
:
try
:
os
.
remove
(
op
.
join
(
workdir
,
f
))
except
:
pass
finally
:
shutil
.
rmtree
(
workdir
)
def
test_imcp_shouldPass
(
move
=
False
):
allowedExts
=
fslimage
.
ALLOWED_EXTENSIONS
groups
=
fslimage
.
FILE_GROUPS
#
# (files_to_create,
# [( imcp_src, imcp_dest, files_which_should_exist),
# ( imcp_src, imcp_dest, [files_which_should_exist]),
# ([imcp_srcs], imcp_dest, files_which_should_exist),
# ([imcp_srcs], imcp_dest, [files_which_should_exist]),
# ...
# ]
# )
#
# if icmp_dest == '', it means to copy to the directory
# files_which_should_exist == 'all' is equivalent to files_which_should_exist == files_to_create
shouldPass
=
[
([
'file.hdr'
,
'file.img'
],
[
(
'file'
,
'file'
,
'all'
),
(
'file'
,
'file.img'
,
'all'
),
(
'file'
,
'file.hdr'
,
'all'
),
(
'file'
,
''
,
'all'
),
(
'file.img'
,
'file'
,
'all'
),
(
'file.img'
,
'file.img'
,
'all'
),
(
'file.img'
,
'file.hdr'
,
'all'
),
(
'file.img'
,
''
,
'all'
),
(
'file.hdr'
,
'file'
,
'all'
),
(
'file.hdr'
,
'file.img'
,
'all'
),
(
'file.hdr'
,
'file.hdr'
,
'all'
),
(
'file.hdr'
,
''
,
'all'
),
]),
([
'file.hdr'
,
'file.img'
,
'file.blob'
],
[
(
'file'
,
'file'
,
[
'file.hdr'
,
'file.img'
]),
(
'file'
,
'file.img'
,
[
'file.hdr'
,
'file.img'
]),
(
'file'
,
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file'
,
''
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
'file'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
'file.img'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
''
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
'file'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
'file.img'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
''
,
[
'file.hdr'
,
'file.img'
]),
]),
([
'file.hdr'
,
'file.img'
,
'file.nii'
],
[
(
'file.img'
,
'file'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
'file.img'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.img'
,
''
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
'file'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
'file.img'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
'file.hdr'
,
[
'file.hdr'
,
'file.img'
]),
(
'file.hdr'
,
''
,
[
'file.hdr'
,
'file.img'
]),
(
'file.nii'
,
'file'
,
'file.nii'
),
(
'file.nii'
,
'file.nii'
,
'file.nii'
),
(
'file.nii'
,
''
,
'file.nii'
),
]),
([
'file.nii'
],
[
(
'file'
,
'file'
,
'all'
),
(
'file'
,
'file.nii'
,
'all'
),
(
'file'
,
''
,
'all'
),
(
'file.nii'
,
'file'
,
'all'
),
(
'file.nii'
,
'file.nii'
,
'all'
),
(
'file.nii'
,
''
,
'all'
),
]),
([
'file.nii.gz'
],
[
(
'file'
,
'file'
,
'all'
),
(
'file'
,
'file.nii.gz'
,
'all'
),
(
'file'
,
''
,
'all'
),
(
'file.nii.gz'
,
'file'
,
'all'
),
(
'file.nii.gz'
,
'file.nii.gz'
,
'all'
),
(
'file.nii.gz'
,
''
,
'all'
),
]),
([
'file.nii'
,
'file.blob'
],
[
(
'file'
,
'file'
,
'file.nii'
),
(
'file'
,
'file.nii'
,
'file.nii'
),
(
'file'
,
''
,
'file.nii'
),
(
'file.nii'
,
'file'
,
'file.nii'
),
(
'file.nii'
,
'file.nii'
,
'file.nii'
),
(
'file.nii'
,
''
,
'file.nii'
),
]),
([
'file.nii'
,
'file.nii.gz'
],
[
(
'file.nii'
,
'file'
,
'file.nii'
),
(
'file.nii'
,
'file.nii'
,
'file.nii'
),
(
'file.nii'
,
''
,
'file.nii'
),
(
'file.nii.gz'
,
'file'
,
'file.nii.gz'
),
(
'file.nii.gz'
,
'file.nii.gz'
,
'file.nii.gz'
),
(
'file.nii.gz'
,
''
,
'file.nii.gz'
),
]),
([
'file.hdr'
,
'file.img'
,
'file.nii'
,
'file.nii.gz'
],
[
([
'file.img'
,
'file.nii'
,
'file.nii.gz'
],
''
,
'all'
),
(
'file.img'
,
''
,
[
'file.hdr'
,
'file.img'
]),
([
'file.hdr'
,
'file.img'
],
''
,
[
'file.hdr'
,
'file.img'
]),
(
'file.nii'
,
''
,
'file.nii'
),
([
'file.nii'
,
'file.nii.gz'
],
''
,
[
'file.nii'
,
'file.nii.gz'
]),
]),
([
'001.hdr'
,
'001.img'
,
'002.hdr'
,
'002.img'
,
'003.hdr'
,
'003.img'
],
[
([
'001'
,
'002'
,
'003'
],
''
,
'all'
),
([
'001.img'
,
'002.img'
,
'003.img'
],
''
,
'all'
),
([
'001.hdr'
,
'002.hdr'
,
'003.hdr'
],
''
,
'all'
),
([
'001.img'
,
'002'
,
'003'
],
''
,
'all'
),
([
'001.hdr'
,
'002'
,
'003'
],
''
,
'all'
),
([
'001.img'
,
'002.hdr'
,
'003.img'
],
''
,
'all'
),
([
'001.hdr'
,
'002.img'
,
'003.hdr'
],
''
,
'all'
),
([
'001'
,
'003'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.img'
,
'003.img'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.hdr'
,
'003.hdr'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.img'
,
'003'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.hdr'
,
'003'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.img'
,
'003.img'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.hdr'
,
'003.hdr'
],
''
,
[
'001.hdr'
,
'001.img'
,
'003.hdr'
,
'003.img'
]),
([
'001.img'
,
'001.hdr'
,
'002.img'
,
'002.hdr'
,
'003.img'
,
'003.hdr'
],
''
,
'all'
),
]),
]
indir
=
tempfile
.
mkdtemp
()
outdir
=
tempfile
.
mkdtemp
()
try
:
for
files_to_create
,
tests
in
shouldPass
:
if
not
isinstance
(
files_to_create
,
list
):
files_to_create
=
[
files_to_create
]
for
imcp_src
,
imcp_dest
,
should_exist
in
tests
:
if
not
isinstance
(
imcp_src
,
list
):
imcp_src
=
[
imcp_src
]
if
should_exist
==
'all'
:
should_exist
=
list
(
files_to_create
)
elif
not
isinstance
(
should_exist
,
list
):
should_exist
=
[
should_exist
]
imcp_dest
=
op
.
join
(
outdir
,
imcp_dest
)
# Each input file contains
# its name in plain text,
# so we can verify that the
# files were correctly copied
for
fn
in
files_to_create
:
with
open
(
op
.
join
(
indir
,
fn
),
'wt'
)
as
f
:
f
.
write
(
'{}
\n
'
.
format
(
fn
))
for
src
in
imcp_src
:
src
=
op
.
join
(
indir
,
src
)
if
move
:
fslpath
.
immv
(
src
,
imcp_dest
,
allowedExts
=
allowedExts
,
fileGroups
=
groups
)
else
:
fslpath
.
imcp
(
src
,
imcp_dest
,
allowedExts
=
allowedExts
,
fileGroups
=
groups
)
copied
=
os
.
listdir
(
outdir
)
copied
=
[
f
for
f
in
copied
if
op
.
isfile
(
op
.
join
(
outdir
,
f
))]
assert
sorted
(
copied
)
==
sorted
(
should_exist
)
# check file contents
for
fn
in
should_exist
:
with
open
(
op
.
join
(
outdir
,
fn
),
'rt'
)
as
f
:
assert
f
.
read
()
==
'{}
\n
'
.
format
(
fn
)
# If move, check that
# input files are gone
if
move
:
for
f
in
should_exist
:
assert
not
op
.
exists
(
op
.
join
(
indir
,
f
))
for
f
in
files_to_create
:
try
:
os
.
remove
(
op
.
join
(
indir
,
f
))
except
:
pass
for
f
in
should_exist
:
os
.
remove
(
op
.
join
(
outdir
,
f
))
finally
:
shutil
.
rmtree
(
indir
)
shutil
.
rmtree
(
outdir
)
def
test_immv_shouldPass
():
test_imcp_shouldPass
(
move
=
True
)
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment