diff --git a/src/NewTools-FileBrowser-Tests/StFileSystemModelTest.class.st b/src/NewTools-FileBrowser-Tests/StFileSystemModelTest.class.st new file mode 100644 index 000000000..64be1ac02 --- /dev/null +++ b/src/NewTools-FileBrowser-Tests/StFileSystemModelTest.class.st @@ -0,0 +1,56 @@ +Class { + #name : 'StFileSystemModelTest', + #superclass : 'TestCase', + #category : 'NewTools-FileBrowser-Tests-Utils', + #package : 'NewTools-FileBrowser-Tests', + #tag : 'Utils' +} + +{ #category : 'tests' } +StFileSystemModelTest >> testCreateDirectory [ + + | model fileRef | + model := StFileSystemModel new. + model currentDirectory: self temporaryDirectory. + model history: ConfigurableHistoryIterator new. + + fileRef := self temporaryDirectory / 'abc'. + + model createDirectory: 'abc'. + + self assert: fileRef exists. + self assert: fileRef isDirectory +] + +{ #category : 'tests' } +StFileSystemModelTest >> testCreateDirectoryShouldNotDuplicateFile [ + + | model fileRef | + model := StFileSystemModel new. + model currentDirectory: self temporaryDirectory. + + fileRef := self temporaryDirectory / 'abc'. + fileRef ensureCreateFile . + self should: [ model createDirectory: 'abc' ] raise: Error description: 'A file with that name already exists.' +] + +{ #category : 'tests' } +StFileSystemModelTest >> testCreateDirectoryShouldNotDuplicateFolder [ + + | model fileRef | + model := StFileSystemModel new. + model currentDirectory: self temporaryDirectory. + + fileRef := self temporaryDirectory / 'abc'. + fileRef ensureCreateDirectory. + self should: [ model createDirectory: 'abc' ] raise: Error description: 'A folder with that name already exists.' +] + +{ #category : 'tests' } +StFileSystemModelTest >> testCreateDirectoryShouldNotWorkWithEmptyName [ + + | model | + model := StFileSystemModel new. + self assert: (model createDirectory: '') equals: model. + self assert: (model createDirectory: nil) equals: model. +] diff --git a/src/NewTools-FileBrowser/StFileBrowserAbstractPresenter.class.st b/src/NewTools-FileBrowser/StFileBrowserAbstractPresenter.class.st index d88b4e46e..a6facebfd 100644 --- a/src/NewTools-FileBrowser/StFileBrowserAbstractPresenter.class.st +++ b/src/NewTools-FileBrowser/StFileBrowserAbstractPresenter.class.st @@ -67,8 +67,10 @@ StFileBrowserAbstractPresenter >> bookmarksTreeTable [ { #category : 'utilities' } StFileBrowserAbstractPresenter >> createDirectory [ - self model createDirectory. - self updateFileSystemPresenters. + [ self model createDirectory: (self requestDirectoryName: 'default-directory') ] + on: Error + do: [ :ex | self application alert: ex messageText ]. + self updateFileSystemPresenters ] { #category : 'accessing' } @@ -163,6 +165,20 @@ StFileBrowserAbstractPresenter >> openOnLastDirectory [ ^ StFileBrowserSettings openOnLastDirectory ] +{ #category : 'utilities' } +StFileBrowserAbstractPresenter >> requestDirectoryName: defaultName [ + "Open a dialog to request a directory from the user" + + | answer | + answer := [ self + request: 'Folder name' + initialAnswer: defaultName + title: 'Create New Folder' ] + on: SpCancelledInteractionError + do: [ :ex | self inform: 'Cancelled'. nil ]. + ^ answer +] + { #category : 'initialization' } StFileBrowserAbstractPresenter >> resetBookmarks [ "Reset bookmarks to their defaults" diff --git a/src/NewTools-FileBrowser/StFileSystemModel.class.st b/src/NewTools-FileBrowser/StFileSystemModel.class.st index 7d84c7601..acf2d7b40 100644 --- a/src/NewTools-FileBrowser/StFileSystemModel.class.st +++ b/src/NewTools-FileBrowser/StFileSystemModel.class.st @@ -90,30 +90,19 @@ StFileSystemModel >> bookmarks: aCollectionOfGroupBookMark [ ] { #category : 'utilities' } -StFileSystemModel >> createDirectory [ - "Create a directory with a default name" +StFileSystemModel >> createDirectory: name [ + "Create a directory named initialName " - ^ self createDirectory: 'new-folder' -] + | path | + name isEmptyOrNil ifTrue: [ ^ self ]. -{ #category : 'utilities' } -StFileSystemModel >> createDirectory: initialName [ - "Create a directory named initialName " + path := currentDirectory / name. + path isDirectory ifTrue: [ self error: 'A folder with that name already exists.' ]. + path isFile ifTrue: [ self error: 'A file with that name already exists.' ]. - | name path | - - (name := self requestUserDirectory: initialName) isEmptyOrNil - ifTrue: [ ^ self ]. - (path := currentDirectory / name) exists - ifFalse: [ - (currentDirectory / name) ensureCreateDirectory. - self openFolder: currentDirectory. - ^ self ]. - path isDirectory - ifTrue: [ self application alert: 'A folder with that name already exists.' ]. - path isFile - ifTrue: [ self application alert: 'A file with that name already exists.' ]. - self createDirectory: name + path exists ifTrue: [ ^ self ]. + (currentDirectory / name) ensureCreateDirectory. + self openFolder: currentDirectory ] { #category : 'accessing' } @@ -168,20 +157,6 @@ StFileSystemModel >> openFolder: aFileReference [ self history register: self currentDirectory. ] -{ #category : 'utilities' } -StFileSystemModel >> requestUserDirectory: initialName [ - "Open a dialog to request a directory from the user" - - | answer | - answer := [ self - request: 'Folder name' - initialAnswer: initialName - title: 'Create New Folder' ] - on: SpCancelledInteractionError - do: [ : ex | self inform: 'Cancelled'. nil ]. - ^ answer -] - { #category : 'initialization' } StFileSystemModel >> resetBookmarks [ "Reset the global bookmarks"