1
+ using System . Linq ;
2
+ using NUnit . Framework ;
3
+ using Rubberduck . JunkDrawer . Extensions ;
4
+ using Rubberduck . Parsing . Symbols ;
5
+ using Rubberduck . Parsing . VBA . DeclarationCaching ;
6
+ using Rubberduck . Refactorings . MoveToFolder ;
7
+ using Rubberduck . UI . Refactorings . MoveToFolder ;
8
+ using Rubberduck . VBEditor . SafeComWrappers ;
9
+ using Rubberduck . VBEditor . SafeComWrappers . Abstract ;
10
+ using RubberduckTests . Mocks ;
11
+
12
+ namespace RubberduckTests . Refactoring . MoveToFolder
13
+ {
14
+ [ TestFixture ]
15
+ public class MoveMultipleToFolderViewModelTests
16
+ {
17
+ [ Test ]
18
+ [ Category ( "Refactorings" ) ]
19
+ public void InitialFolderIsInitialTargetFromModel ( )
20
+ {
21
+ using ( var state = MockParser . CreateAndParse ( TestVbe ( ) ) )
22
+ {
23
+ var model = TestModel ( "FooBar.Foo" , state . DeclarationFinder ) ;
24
+
25
+ var initialTargetFolder = model . TargetFolder ;
26
+ var viewModel = TestViewModel ( model ) ;
27
+
28
+ Assert . AreEqual ( initialTargetFolder , viewModel . NewFolder ) ;
29
+ }
30
+ }
31
+
32
+ [ Test ]
33
+ [ Category ( "Refactorings" ) ]
34
+ public void UpdatingTargetFolderUpdatesModel ( )
35
+ {
36
+ using ( var state = MockParser . CreateAndParse ( TestVbe ( ) ) )
37
+ {
38
+ var model = TestModel ( "FooBar.Foo" , state . DeclarationFinder ) ;
39
+ var viewModel = TestViewModel ( model ) ;
40
+
41
+ const string newTarget = "Test.Test.Test" ;
42
+ viewModel . NewFolder = newTarget ;
43
+
44
+ Assert . AreEqual ( newTarget , model . TargetFolder ) ;
45
+ }
46
+ }
47
+
48
+ [ Test ]
49
+ [ Category ( "Refactorings" ) ]
50
+ [ TestCase ( null ) ]
51
+ [ TestCase ( "" ) ]
52
+ public void EmptyTargetFolder_Error ( string emptyFolderName )
53
+ {
54
+ using ( var state = MockParser . CreateAndParse ( TestVbe ( ) ) )
55
+ {
56
+ var model = TestModel ( "FooBar.Foo" , state . DeclarationFinder ) ;
57
+ var viewModel = TestViewModel ( model ) ;
58
+
59
+ viewModel . NewFolder = emptyFolderName ;
60
+
61
+ Assert . IsTrue ( viewModel . HasErrors ) ;
62
+ Assert . IsFalse ( viewModel . IsValidFolder ) ;
63
+ }
64
+ }
65
+
66
+ [ Test ]
67
+ [ Category ( "Refactorings" ) ]
68
+ [ TestCase ( "raeraf afrwefe \n fefaef" ) ]
69
+ [ TestCase ( "raeraf afrwefe \r fefaef" ) ]
70
+ [ TestCase ( "raeraf afrwefe \u0000 fefaef" ) ]
71
+ public void TargetFolderWithControlCharacter_Error ( string folderName )
72
+ {
73
+ using ( var state = MockParser . CreateAndParse ( TestVbe ( ) ) )
74
+ {
75
+ var model = TestModel ( "FooBar.Foo" , state . DeclarationFinder ) ;
76
+ var viewModel = TestViewModel ( model ) ;
77
+
78
+ viewModel . NewFolder = folderName ;
79
+
80
+ Assert . IsTrue ( viewModel . HasErrors ) ;
81
+ Assert . IsFalse ( viewModel . IsValidFolder ) ;
82
+ }
83
+ }
84
+
85
+ [ Test ]
86
+ [ Category ( "Refactorings" ) ]
87
+ public void NonEmptyTargetFolderWithoutControlCharacter_NoError ( )
88
+ {
89
+ using ( var state = MockParser . CreateAndParse ( TestVbe ( ) ) )
90
+ {
91
+ var model = TestModel ( "FooBar.Foo" , state . DeclarationFinder ) ;
92
+ var viewModel = TestViewModel ( model ) ;
93
+
94
+ viewModel . NewFolder = ";oehaha .adaiafa.a@#$^%&#@$&%%$%^$.ad3.1010101. . . . rqrq" ;
95
+
96
+ Assert . IsFalse ( viewModel . HasErrors ) ;
97
+ Assert . IsTrue ( viewModel . IsValidFolder ) ;
98
+ }
99
+ }
100
+
101
+ private MoveMultipleToFolderViewModel TestViewModel ( MoveMultipleToFolderModel model )
102
+ {
103
+ return new MoveMultipleToFolderViewModel ( model ) ;
104
+ }
105
+
106
+ private MoveMultipleToFolderModel TestModel ( string sourceFolder , DeclarationFinder finder )
107
+ {
108
+ var modulesToMove = finder . UserDeclarations ( DeclarationType . Module )
109
+ . OfType < ModuleDeclaration > ( )
110
+ . Where ( module => module . CustomFolder . Equals ( sourceFolder )
111
+ || module . CustomFolder . IsSubFolderOf ( sourceFolder ) )
112
+ . ToList ( ) ;
113
+
114
+ var initialTarget = sourceFolder ;
115
+
116
+ return new MoveMultipleToFolderModel ( modulesToMove , initialTarget ) ;
117
+ }
118
+
119
+ private IVBE TestVbe ( )
120
+ {
121
+ const string targetFolderComponentCode = @"
122
+ '@Folder ""Test.Foo.Bar.Test.Baz""" ;
123
+
124
+ const string component1Code = @"
125
+ '@Folder ""FooBar.Foo.Barr.Foo.Test""" ;
126
+
127
+ const string component2Code = @"
128
+ '@Folder ""FooBar.Foo.Barz.Test.Foo""" ;
129
+
130
+ return new MockVbeBuilder ( )
131
+ . ProjectBuilder ( "TestProject" , ProjectProtection . Unprotected )
132
+ . AddComponent ( "TargetFolderComponent" , ComponentType . ClassModule , targetFolderComponentCode )
133
+ . AddComponent ( "Component1" , ComponentType . ClassModule , component1Code )
134
+ . AddComponent ( "Component2" , ComponentType . ClassModule , component2Code )
135
+ . AddProjectToVbeBuilder ( )
136
+ . Build ( )
137
+ . Object ;
138
+ }
139
+
140
+ }
141
+ }
0 commit comments