ArgTools
Argument Handling
ArgTools.ArgRead
— TypeArgRead = Union{AbstractString, AbstractCmd, IO}
ArgRead
타입은 arg_read
함수가 읽을 수 있는 IO 핸들로 변환하는 방법을 알고 있는 타입의 유니온입니다. 자세한 내용은 arg_read
를 참조하세요.
ArgTools.ArgWrite
— TypeArgWrite = Union{AbstractString, AbstractCmd, IO}
ArgWrite
타입은 arg_write
함수가 쓰기 가능한 IO 핸들로 변환하는 방법을 아는 타입들의 유니온이며, Nothing
은 arg_write
가 임시 파일을 생성하여 처리합니다. 자세한 내용은 arg_write
를 참조하세요.
ArgTools.arg_read
— Functionarg_read(f::Function, arg::ArgRead) -> f(arg_io)
arg_read
함수는 다음 중 하나일 수 있는 인수 arg
를 허용합니다:
AbstractString
: 읽기 위해 열 파일 경로AbstractCmd
: 표준 출력을 읽는 명령IO
: 읽기 위해 열려 있는 IO 핸들
본문이 정상적으로 반환되든 오류를 발생시키든, 열려 있는 경로는 arg_read
에서 반환되기 전에 닫히고, IO
핸들은 arg_read
에서 반환되기 전에 플러시되지만 닫히지 않습니다.
참고: 파일을 열 때, ArgTools는 파일 open(...)
호출에 lock = false
를 전달합니다. 따라서 이 함수에서 반환된 객체는 여러 스레드에서 사용되어서는 안 됩니다. 이 제한은 미래에 완화될 수 있으며, 이는 작동하는 코드를 깨뜨리지 않을 것입니다.
ArgTools.arg_write
— Functionarg_write(f::Function, arg::ArgWrite) -> arg
arg_write(f::Function, arg::Nothing) -> tempname()
arg_read
함수는 다음과 같은 인수 arg
를 허용합니다:
AbstractString
: 쓰기 위해 열 파일 경로AbstractCmd
: 표준 입력으로 쓰기 위해 실행할 명령IO
: 쓰기 위해 열려 있는 IO 핸들Nothing
: 임시 경로에 쓰기 위해 열어야 함
본문이 정상적으로 반환되면, 열린 경로는 완료 시 닫히고; IO 핸들 인수는 열려 있지만 반환 전에 플러시됩니다. 인수가 nothing
인 경우, 쓰기 위해 임시 경로가 열리고 완료 시 닫히며 경로가 arg_write
에서 반환됩니다. 다른 모든 경우에는 arg
자체가 반환됩니다. 이는 인수가 전달되었는지 여부에 관계없이 일관되게 작성된 내용을 반환할 수 있는 유용한 패턴입니다.
본문 평가 중 오류가 발생하면, arg_write
에 의해 쓰기 위해 열린 경로는 삭제됩니다. 이는 문자열로 전달되었든 arg
가 nothing
일 때 생성된 임시 경로이든 상관없이 적용됩니다.
참고: 파일을 열 때, ArgTools는 파일 open(...)
호출에 lock = false
를 전달합니다. 따라서 이 함수에서 반환된 객체는 여러 스레드에서 사용되지 않아야 합니다. 이 제한은 미래에 완화될 수 있으며, 이는 작동하는 코드를 깨뜨리지 않을 것입니다.
ArgTools.arg_isdir
— Functionarg_isdir(f::Function, arg::AbstractString) -> f(arg)
arg_isdir
함수는 arg
를 받아들이며, 이는 기존 디렉토리의 경로여야 합니다(그렇지 않으면 오류가 발생합니다) 그리고 그 경로를 f
에 전달하여 최종적으로 f(arg)
의 결과를 반환합니다. 이는 확실히 ArgTools
에서 제공하는 가장 덜 유용한 도구이며, 주로 arg_mkdir
와의 대칭성을 위해 존재하고 일관된 오류 메시지를 제공하기 위해 존재합니다.
ArgTools.arg_mkdir
— Functionarg_mkdir(f::Function, arg::AbstractString) -> arg
arg_mkdir(f::Function, arg::Nothing) -> mktempdir()
arg_mkdir
함수는 arg
를 받아들이며, 이는 다음 중 하나여야 합니다:
- 이미 존재하는 빈 디렉토리에 대한 경로,
- 디렉토리로 생성할 수 있는 존재하지 않는 경로, 또는
nothing
인 경우, 임시 디렉토리가 생성됩니다.
모든 경우에 디렉토리에 대한 경로가 반환됩니다. f(arg)
실행 중 오류가 발생하면, 디렉토리는 원래 상태로 복원됩니다: 이미 존재했지만 비어 있었다면 비워지고, 존재하지 않았다면 삭제됩니다.
Function Testing
ArgTools.arg_readers
— Functionarg_readers(arg :: AbstractString, [ type = ArgRead ]) do arg::Function
## 사전 테스트 설정 ##
@arg_test arg begin
arg :: ArgRead
## `arg`를 사용한 테스트 ##
end
## 사후 테스트 정리 ##
end
arg_readers
함수는 읽을 경로와 단일 인수 do 블록을 받아들이며, 이는 arg_read
가 처리할 수 있는 각 테스트 리더 유형에 대해 한 번 호출됩니다. 선택적 type
인수가 주어지면 do 블록은 해당 유형의 인수를 생성하는 리더에 대해서만 호출됩니다.
do 블록에 전달된 arg
는 인수 값 자체가 아닙니다. 일부 테스트 인수 유형은 각 테스트 케이스에 대해 초기화 및 종료가 필요하기 때문입니다. 열린 파일 핸들 인수를 고려해 보십시오: 한 테스트에 사용한 후에는 다시 사용할 수 없습니다. 다음 테스트를 위해 파일을 닫고 다시 열어야 합니다. 이 함수 arg
는 @arg_test arg begin ... end
를 사용하여 ArgRead
인스턴스로 변환될 수 있습니다.
ArgTools.arg_writers
— Functionarg_writers([ type = ArgWrite ]) do path::String, arg::Function
## 테스트 전 설정 ##
@arg_test arg begin
arg :: ArgWrite
## `arg`를 사용한 테스트 ##
end
## 테스트 후 정리 ##
end
arg_writers
함수는 do 블록을 받아들이며, 이는 arg_write
가 처리할 수 있는 각 테스트 작성자 유형에 대해 한 번 호출됩니다. 이때 임시(존재하지 않는) path
와 다양한 쓰기 가능한 인수 유형으로 변환될 수 있는 arg
가 사용됩니다. 선택적 type
인수가 주어지면, do 블록은 해당 유형의 인수를 생성하는 작성자에 대해서만 호출됩니다.
do 블록에 전달된 arg
는 인수 값 자체가 아닙니다. 일부 테스트 인수 유형은 각 테스트 케이스에 대해 초기화 및 종료가 필요하기 때문입니다. 열린 파일 핸들 인수를 고려해 보십시오: 한 테스트에 사용한 후에는 다시 사용할 수 없습니다. 다음 테스트를 위해 파일을 닫고 다시 열어야 합니다. 이 함수 arg
는 @arg_test arg begin ... end
를 사용하여 ArgWrite
인스턴스로 변환될 수 있습니다.
또한 arg_readers
와 같은 경로 이름을 사용하는 arg_writers
메서드도 있습니다:
arg_writers(path::AbstractString, [ type = ArgWrite ]) do arg::Function
## 테스트 전 설정 ##
@arg_test arg begin
# 여기서 `arg :: ArgWrite`
## `arg`를 사용한 테스트 ##
end
## 테스트 후 정리 ##
end
이 메서드는 tempname()
에 의해 생성된 경로 이름 대신 path
를 지정해야 할 경우 유용합니다. path
가 arg_writers
외부에서 전달되므로, 이 형태에서는 do 블록에 대한 인수가 아닙니다.
ArgTools.@arg_test
— Macro@arg_test arg1 arg2 ... body
@arg_test
매크로는 arg_readers
와 arg_writers
에서 제공하는 arg
함수를 실제 인수 값으로 변환하는 데 사용됩니다. @arg_test arg body
를 작성하면 arg(arg -> body)
와 동일합니다.