root/lang/powershell/PSCustomProviders/trunk/src/Dotnet.PowerShell.PSTodo.Test/PSTodo/PSTodoProvider_Test.cs @ 7590

Revision 7590, 6.7 kB (checked in by coma2n, 6 years ago)

lang/powershell/PSCustomProviders/trunk: #71 アイテムの編集機能を追加した

Line 
1#region license
2/*
3Copyright (c) 2008, Kouji Yamaguchi
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7
8* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
9
10* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
11
12* Neither the name of coma2n nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
13
14THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
15INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
16IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
17OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
18OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
19OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
20*/
21#endregion
22
23#region namespaces
24
25using System;
26using System.IO;
27using System.Collections.ObjectModel;
28using System.Management.Automation;
29using System.Management.Automation.Runspaces;
30using System.Diagnostics;
31
32using NUnit.Framework;
33using NUnit.Framework.SyntaxHelpers;
34
35#endregion
36
37namespace Dotnet.PowerShell.PSTodo {
38
39        #region Alias
40        using BrowsableState = System.ComponentModel.EditorBrowsableState;
41        using EditorBrowsable = System.ComponentModel.EditorBrowsableAttribute;
42        #endregion
43
44        #region PSTodoProvider_Test class
45
46        /// <summary>
47        /// PSTodoProviderのテストクラス
48        /// </summary>
49        [TestFixture]
50        public class PSTodoProvider_Test {
51
52                #region fields
53
54                /// <summary>
55                /// スクリプトエンジン
56                /// </summary>
57                private RunspaceInvoke rsEngine;
58                private RunspaceConfiguration rsConfig;
59
60                #region no touch!
61                /// <summary>
62                /// ストップウォッチ
63                /// </summary>
64                private Stopwatch watch;
65                #endregion
66
67                #endregion
68
69                #region setup
70
71                /// <summary>
72                ///
73                /// </summary>
74                [EditorBrowsable(BrowsableState.Never)]
75                public PSTodoProvider_Test() {
76                }
77
78                /// <summary>
79                ///
80                /// </summary>
81                [SetUp, EditorBrowsable(BrowsableState.Never)]
82                public void テスト毎の初期化() {
83                        rsEngine = new RunspaceInvoke(rsConfig);
84                        rsEngine.Invoke("Remove-PSDrive Todo");
85
86                        #region no touch!
87                        watch = Stopwatch.StartNew();
88                        Console.WriteLine("----- テスト開始 -----");
89                        #endregion
90                }
91
92                /// <summary>
93                ///
94                /// </summary>
95                [TestFixtureSetUp, EditorBrowsable(BrowsableState.Never)]
96                public void テスト全体の初期化() {
97                        rsConfig = RunspaceConfiguration.Create();
98                        rsConfig.Providers.Append(
99                                new ProviderConfigurationEntry("Todo", typeof(PSTodoProvider), "")
100                        );
101                }
102
103                /// <summary>
104                ///
105                /// </summary>
106                [TearDown, EditorBrowsable(BrowsableState.Never)]
107                public void テスト毎の終了処理() {
108                        #region no touch!
109                        watch.Stop();
110                        Console.WriteLine("----- テスト終了 -----");
111                        Console.WriteLine(string.Format("処理時間:{0} ミリ秒", watch.ElapsedMilliseconds));
112                        #endregion
113
114                        rsEngine.Dispose();
115                }
116
117                /// <summary>
118                ///
119                /// </summary>
120                [TestFixtureTearDown, EditorBrowsable(BrowsableState.Never)]
121                public void テスト全体の終了処理() {
122                }
123
124                #endregion
125
126                #region tests
127
128                /// <summary>
129                /// アイテムを追加する。
130                /// </summary>
131                [Test, Category("Success")]
132                public void アイテムを追加できる() {
133                        CreateTodoDrive("case-1");
134
135                        Collection<PSObject> result = rsEngine.Invoke("New-Item Hoge -Description HogeHoge");
136
137                        Assert.That(result, Has.Property("Count", 1));
138
139                        PSTodoItem item = (PSTodoItem)result[0].BaseObject;
140
141                        Assert.That(item.Title, Is.EqualTo("Hoge"));
142                        Assert.That(item.Description, Is.EqualTo("HogeHoge"));
143                        Assert.That(item.IsComplete, Is.False);
144                }
145
146                /// <summary>
147                /// アイテム一覧を列挙する。
148                /// </summary>
149                [Test, Category("Success")]
150                public void アイテム一覧を列挙できる() {
151                        CreateTodoDrive("case-2");
152
153                        Collection<PSObject> result = rsEngine.Invoke("Get-ChildItem");
154
155                        Assert.That(result, Has.Property("Count", 3));
156                }
157
158                /// <summary>
159                /// アイテムを削除する。
160                /// </summary>
161                [Test, Category("Success")]
162                public void アイテムを削除できる() {
163                        CreateTodoDrive("case-3");
164
165                        rsEngine.Invoke("Remove-Item 100");
166
167                        Collection<PSObject> result = rsEngine.Invoke("Get-ChildItem");
168
169                        Assert.That(result, Has.Property("Count", 0));
170                }
171
172                /// <summary>
173                /// アイテムの情報を編集する(タイトルのみ)。
174                /// </summary>
175                [Test, Category("Success")]
176                public void アイテムの情報を編集できる_ケース1() {
177                        CreateTodoDrive("case-4");
178
179                        rsEngine.Invoke("Rename-Item 100 101");
180
181                        Collection<PSObject> result = rsEngine.Invoke("Get-ChildItem");
182
183                        PSTodoItem item = (PSTodoItem)result[0].BaseObject;
184
185                        Assert.That(item.Title, Is.EqualTo("101"));
186                }
187
188                /// <summary>
189                /// アイテムの情報を編集する。(詳細、完了フラグ)
190                /// </summary>
191                [Test, Category("Success")]
192                public void アイテムの情報を編集できる_ケース2() {
193                        CreateTodoDrive("case-4");
194
195                        rsEngine.Invoke("Set-Item 200 -Description Hello -Complete");
196
197                        Collection<PSObject> result = rsEngine.Invoke("Get-ChildItem");
198
199                        PSTodoItem item = (PSTodoItem)result[1].BaseObject;
200
201                        Assert.That(item.Description, Is.EqualTo("Hello"));
202                        Assert.That(item.IsComplete, Is.True);
203                }
204
205                #endregion
206
207                #region methods
208
209                /// <summary>
210                /// 指定したケース名のディレクトリをルートディレクトリとする「Todo」ドライブを作成し、
211                /// そのドライブに対してSet-Locationを行います。
212                /// </summary>
213                /// <param name="caseName">ケース名</param>
214                /// <returns>ルートディレクトリのパス</returns>
215                private string CreateTodoDrive(string caseName) {
216                        string path = Path.Combine(Environment.CurrentDirectory, @"TestData\" + caseName);
217
218                        rsEngine.Invoke(
219                                string.Format("New-PSDrive Todo Todo '{0}'", path)
220                        );
221                        rsEngine.Invoke("Set-Location Todo:");
222
223                        return path;
224                }
225
226                #endregion
227
228        }
229
230        #endregion
231
232}
Note: See TracBrowser for help on using the browser.