Skip to content
This repository was archived by the owner on Sep 26, 2020. It is now read-only.

Commit 588f9e7

Browse files
Gien VerschatseKrzysztof-Cieslak
authored andcommitted
Rename file patch (#32)
* added failing test for rename file * fixed rename file command * added test for rename file command without project param * better naming for tests and update test coverage file
1 parent 3cbf664 commit 588f9e7

File tree

6 files changed

+66
-26
lines changed

6 files changed

+66
-26
lines changed

src/Forge.Core/FileHelper.fs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ let deleteFile fileName =
3838
file.Delete ()
3939

4040
/// Renames the file to the target file name.
41-
let renameFile target fileName = (FileInfo fileName).MoveTo target
42-
41+
let renameFile fileName target = (FileInfo fileName).MoveTo (directory </> target)
4342

4443
/// Renames the directory to the target directory name.
4544
let renameDir target dirName = (DirectoryInfo dirName).MoveTo target

src/Forge.Core/ProjectManager.fs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ module Furnace =
253253
state
254254
else
255255
renameFile path newName
256-
updateProj (FsProject.renameFile path newName) state
256+
257+
let dir = getParentDir path
258+
let name' = relative (directory </> path) ((directory </> dir |> Path.GetDirectoryName) + Path.DirectorySeparatorChar.ToString() )
259+
let newName' = relative (directory </> newName) ((directory </> dir |> Path.GetDirectoryName) + Path.DirectorySeparatorChar.ToString() )
260+
updateProj (FsProject.renameFile name' newName') state
257261

258262

259263
let listSourceFiles (filter: string option) (state: ActiveState) =

src/Forge.ProjectSystem/ProjectSystem.fs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -508,9 +508,9 @@ type SourceTree (files:SourceFile list) =
508508

509509
/// Check if the target exists in the project file tree
510510
let hasTarget (target:string) =
511-
let target = normalizeFileName target
512-
if isDirectory target then tree.ContainsKey target
513-
elif data.ContainsKey target then true else
511+
let temp = normalizeFileName target
512+
if isDirectory temp then tree.ContainsKey temp
513+
elif data.ContainsKey temp then true else
514514
false
515515

516516
let moveFile shift target =
@@ -617,24 +617,25 @@ type SourceTree (files:SourceFile list) =
617617
// TODO - check path & name for validity
618618
// TODO - if there's a .fs & .fsi pair rename both files
619619
if not ^ hasTarget path then ()
620-
elif not ^ checkFile newName "is not a valid file name" then () else
621-
let path = normalizeFileName path
622-
let dir = getDirectory path
623-
let file = Path.GetFileName path
624-
// update the SourceFile record
625-
if data.ContainsKey path then
626-
let srcfile = {data.[path] with Include = dir+newName}
627-
data.Remove path |> ignore
628-
data.[dir+newName] <- srcfile
629-
// update the file position listing
630-
if tree.ContainsKey dir then
631-
let arr = tree.[dir]
632-
printfn "%A" arr
633-
let idx = ResizeArray.findIndex ((=) file) arr
634-
arr.[idx] <- newName
635-
tree.[dir] <- arr
636-
637-
// TODO add railway result/errors
620+
elif not ^ checkFile newName "is not a valid file name" then ()
621+
else
622+
let path = normalizeFileName path
623+
let dir = getDirectory path
624+
let file = Path.GetFileName path
625+
// update the SourceFile record
626+
if data.ContainsKey path then
627+
let srcfile = {data.[path] with Include = newName}
628+
data.Remove path |> ignore
629+
data.[newName] <- srcfile
630+
// update the file position listing
631+
if tree.ContainsKey dir then
632+
let arr = tree.[dir]
633+
printfn "%A" arr
634+
let idx = ResizeArray.findIndex ((=) file) arr
635+
arr.[idx] <- newName
636+
tree.[dir] <- arr
637+
638+
// TODO add railway result/errors
638639

639640

640641
member __.RenameDir (dir:string) (newName:string) =

tests/Forge.IntegrationTests/Forge.IntegrationTests.fsproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
1+
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
22
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
33
<PropertyGroup>
44
<Name>Forge.IntegrationTests</Name>
@@ -56,6 +56,7 @@
5656
<Compile Include="RemoveFileTests.fs" />
5757
<Compile Include="NewFileTests.fs" />
5858
<Compile Include="NewScaffoldTests.fs" />
59+
<Compile Include="RenameFileTests.fs" />
5960
</ItemGroup>
6061
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
6162
<Choose>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
[<NUnit.Framework.TestFixture>]
2+
[<NUnit.Framework.Category "Rename file">]
3+
module ``Rename File Tests``
4+
5+
open NUnit.Framework
6+
open Assertions
7+
open FsUnit
8+
9+
[<Test>]
10+
let ``Rename file changes name in fsproj`` () =
11+
let dir = "rename_file"
12+
13+
["new project -n Sample --dir src -t console"
14+
"new file -n src/Sample/Test --project src/Sample/Sample.fsproj --template fs"
15+
"rename file -n src/Sample/Test.fs -r src/Sample/Renamed.fs --project src/Sample/Sample.fsproj"
16+
]
17+
|> initTest dir
18+
19+
let project = dir </> "src" </> "Sample" </> "Sample.fsproj" |> loadProject
20+
21+
project |> hasFile "Renamed.fs"
22+
23+
[<Test>]
24+
let ``Rename file without project changes name in fsproj`` () =
25+
let dir = "rename_file_no_project"
26+
27+
["new project -n Sample --dir src -t console"
28+
"new file -n src/Sample/Test --project src/Sample/Sample.fsproj --template fs"
29+
"rename file -n src/Sample/Test.fs -r src/Sample/Renamed.fs"
30+
]
31+
|> initTest dir
32+
33+
let project = dir </> "src" </> "Sample" </> "Sample.fsproj" |> loadProject
34+
35+
project |> hasFile "Renamed.fs"

tests/TestCoverage.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* [ ] Parse - add below (?)
2121
* [ ] Parse - add dir
2222
* [ ] Parse - remove dir
23-
* [ ] Parse - rename file
23+
* [x] Parse - rename file
2424
* [ ] Parse - rename directory
2525
* [ ] Path Helper - normalize file name
2626
* [ ] Path Helper - get root

0 commit comments

Comments
 (0)