Changeset 7590 for lang/powershell

Show
Ignore:
Timestamp:
03/06/08 22:13:36 (9 months ago)
Author:
coma2n
Message:

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

Location:
lang/powershell/PSCustomProviders/trunk
Files:
3 added
5 modified

Legend:

Unmodified
Added
Removed
  • lang/powershell/PSCustomProviders/trunk/buildfile/Dotnet.PowerShell.PSTodo.build

    r7573 r7590  
    6060        </target> 
    6161         
     62        <target name="release" depends="build, install"> 
     63        </target> 
     64         
    6265        <target name="debug" description="�\�[�X��ug���[�h�Ńr���h���܂�"> 
    6366                <property name="configuration" value="Debug" /> 
  • lang/powershell/PSCustomProviders/trunk/src/Dotnet.PowerShell.PSTodo.Test/Dotnet.PowerShell.PSTodo.Test.2005.csproj

    r7573 r7590  
    4141    <None Include="TestData\case-2\300" /> 
    4242    <None Include="TestData\case-3\100" /> 
     43    <None Include="TestData\case-4\100" /> 
     44    <None Include="TestData\case-4\200" /> 
    4345    <None Include="UnitTest.2005.nunit" /> 
    4446  </ItemGroup> 
  • lang/powershell/PSCustomProviders/trunk/src/Dotnet.PowerShell.PSTodo.Test/PSTodo/PSTodoProvider_Test.cs

    r7573 r7590  
    131131                [Test, Category("Success")] 
    132132                public void アイテムを追加できる() { 
    133                         string rootPath = CreateTodoDrive("case-1"); 
    134  
    135                         rsEngine.Invoke("Set-Location Todo:"); 
    136                         Collection<PSObject> result = rsEngine.Invoke("New-Item Hoge -value HogeHoge"); 
     133                        CreateTodoDrive("case-1"); 
     134 
     135                        Collection<PSObject> result = rsEngine.Invoke("New-Item Hoge -Description HogeHoge"); 
    137136 
    138137                        Assert.That(result, Has.Property("Count", 1)); 
    139                         Assert.That(Directory.GetFiles(rootPath), Has.Length(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); 
    140144                } 
    141145 
     
    145149                [Test, Category("Success")] 
    146150                public void アイテム一覧を列挙できる() { 
    147                         string rootPath = CreateTodoDrive("case-2"); 
    148  
    149                         rsEngine.Invoke("Set-Location Todo:"); 
     151                        CreateTodoDrive("case-2"); 
     152 
    150153                        Collection<PSObject> result = rsEngine.Invoke("Get-ChildItem"); 
    151154 
     
    158161                [Test, Category("Success")] 
    159162                public void アイテムを削除できる() { 
    160                         string rootPath = CreateTodoDrive("case-3"); 
    161  
    162                         rsEngine.Invoke("Set-Location Todo:"); 
     163                        CreateTodoDrive("case-3"); 
     164 
    163165                        rsEngine.Invoke("Remove-Item 100"); 
    164166 
    165                         Assert.That(Directory.GetFiles(rootPath), Has.Length(0)); 
     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); 
    166203                } 
    167204 
     
    171208 
    172209                /// <summary> 
    173                 /// 指定したケース名のディレクトリをルートディレクトリとする「Todo」ドライブを作成します。 
     210                /// 指定したケース名のディレクトリをルートディレクトリとする「Todo」ドライブを作成し、 
     211                /// そのドライブに対してSet-Locationを行います。 
    174212                /// </summary> 
    175213                /// <param name="caseName">ケース名</param> 
     
    181219                                string.Format("New-PSDrive Todo Todo '{0}'", path) 
    182220                        ); 
     221                        rsEngine.Invoke("Set-Location Todo:"); 
     222 
    183223                        return path; 
    184224                } 
  • lang/powershell/PSCustomProviders/trunk/src/Dotnet.PowerShell.PSTodo/PSTodo/PSTodoItem.cs

    r7503 r7590  
    100100                } 
    101101 
     102                /// <summary> 
     103                /// タイトルと詳細、完了かどうかを設定するコンストラクタ 
     104                /// </summary> 
     105                /// <param name="title">タイトル</param> 
     106                /// <param name="description">詳細</param> 
     107                /// <param name="isComplete">完了かどうか</param> 
     108                /// <exception cref="ArgumentException">引数が不正な時</exception> 
     109                /// <exception cref="ArgumentNullException">引数がnullの時</exception> 
     110                public PSTodoItem(string title, string description, bool isComplete) 
     111                        : this(title) { 
     112                        this.description = description; 
     113                        this.isComplete = isComplete; 
     114                } 
     115 
    102116                #endregion 
    103117 
  • lang/powershell/PSCustomProviders/trunk/src/Dotnet.PowerShell.PSTodo/PSTodo/PSTodoProvider.cs

    r7586 r7590  
    4343        public class PSTodoProvider : NavigationCmdletProvider { 
    4444 
     45                #region innerClass 
     46 
     47                #region PSTodoItemParameters class 
     48 
     49                /// <summary> 
     50                /// アイテムのパラメータ情報を格納するクラス 
     51                /// </summary> 
     52                [Serializable] 
     53                [DebuggerStepThrough] 
     54                public sealed class PSTodoItemParameters { 
     55 
     56                        #region fields 
     57 
     58                        private string description; 
     59                        private SwitchParameter complete; 
     60 
     61                        #endregion 
     62 
     63                        #region properties 
     64 
     65                        /// <summary> 
     66                        /// 詳細を取得、設定します。 
     67                        /// </summary> 
     68                        [Parameter(Position = 0)] 
     69                        public string Description { 
     70                                get { return description; } 
     71                                set { description = value; } 
     72                        } 
     73 
     74                        /// <summary> 
     75                        /// 完了したかどうかを取得、設定します。 
     76                        /// </summary> 
     77                        [Parameter(Position = 1)] 
     78                        public SwitchParameter Complete { 
     79                                get { return complete; } 
     80                                set { complete = value; } 
     81                        } 
     82 
     83                        #endregion 
     84 
     85                        #region constructors 
     86 
     87                        /// <summary> 
     88                        /// 標準的なコンストラクタ 
     89                        /// </summary> 
     90                        public PSTodoItemParameters() { 
     91                        } 
     92 
     93                        #endregion 
     94 
     95                } 
     96 
     97                #endregion 
     98 
     99                #endregion 
     100 
    45101                #region constructors 
    46102 
     
    58114                /// 指定したアイテムを指定したファイル名でシリアル化します。 
    59115                /// </summary> 
    60                 /// <param name="todoItem">アイテム</param> 
     116                /// <param name="item">アイテム</param> 
    61117                /// <param name="path">ファイル名</param> 
    62                 private void Serialize(PSTodoItem todoItem, string path) { 
     118                private void Serialize(PSTodoItem item, string path) { 
    63119                        using(FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write)) { 
    64120                                BinaryFormatter formatter = new BinaryFormatter(); 
    65121 
    66                                 formatter.Serialize(fs, todoItem); 
     122                                formatter.Serialize(fs, item); 
    67123                        } 
    68124                } 
     
    112168 
    113169                /// <summary> 
     170                /// <see cref="ContainerCmdletProvider.NewItem(string, string, object)"/> 
     171                /// </summary> 
     172                /// <param name="path"></param> 
     173                /// <param name="itemTypeName"></param> 
     174                /// <param name="newItemValue"></param> 
     175                protected override void NewItem(string path, string itemTypeName, object newItemValue) { 
     176                        PSTodoItemParameters itemParams = (PSTodoItemParameters)base.DynamicParameters; 
     177 
     178                        PSTodoItem item = new PSTodoItem( 
     179                                Path.GetFileName(path), 
     180                                itemParams.Description, itemParams.Complete 
     181                        ); 
     182                        Serialize(item, path); 
     183 
     184                        if(!base.Stopping) { 
     185                                WriteItemObject(item, path, false); 
     186                        } 
     187                } 
     188 
     189                /// <summary> 
     190                /// <see cref="ContainerCmdletProvider.NewItemDynamicParameters(string, string, object)"/> 
     191                /// </summary> 
     192                /// <param name="path"></param> 
     193                /// <param name="itemTypeName"></param> 
     194                /// <param name="newItemValue"></param> 
     195                /// <returns></returns> 
     196                protected override object NewItemDynamicParameters(string path, string itemTypeName, object newItemValue) { 
     197                        return new PSTodoItemParameters(); 
     198                } 
     199 
     200                /// <summary> 
    114201                /// <see cref="ContainerCmdletProvider.GetChildItems(string, bool)"/> 
    115202                /// </summary> 
     
    127214 
    128215                /// <summary> 
     216                /// <see cref="ContainerCmdletProvider.RenameItem(string, string)"/> 
     217                /// </summary> 
     218                /// <param name="path"></param> 
     219                /// <param name="newName"></param> 
     220                protected override void RenameItem(string path, string newName) { 
     221                        string destPath = Path.Combine( 
     222                                Path.GetDirectoryName(path), newName 
     223                        ); 
     224                        File.Move(path, destPath); 
     225                        try { 
     226                                PSTodoItem item = Deserialize(destPath); 
     227                                item.Title = newName; 
     228 
     229                                Serialize(item, destPath); 
     230 
     231                        } catch(Exception exp) { 
     232                                File.Move(destPath, path); 
     233 
     234                                base.ThrowTerminatingError( 
     235                                        new ErrorRecord(exp, "001", ErrorCategory.WriteError, path) 
     236                                ); 
     237                        } 
     238                } 
     239 
     240                /// <summary> 
     241                /// <see cref="ItemCmdletProvider.SetItem(string, object)"/> 
     242                /// </summary> 
     243                /// <param name="path"></param> 
     244                /// <param name="value"></param> 
     245                protected override void SetItem(string path, object value) { 
     246                        PSTodoItemParameters itemParams = (PSTodoItemParameters)base.DynamicParameters; 
     247 
     248                        PSTodoItem item = Deserialize(path); 
     249                        if(!string.IsNullOrEmpty(itemParams.Description)) { 
     250                                item.Description = itemParams.Description; 
     251                        } 
     252                        item.IsComplete = itemParams.Complete; 
     253 
     254                        Serialize(item, path); 
     255                } 
     256 
     257                /// <summary> 
     258                /// <see cref="ItemCmdletProvider.SetItemDynamicParameters(string, object)"/> 
     259                /// </summary> 
     260                /// <param name="path"></param> 
     261                /// <param name="value"></param> 
     262                /// <returns></returns> 
     263                protected override object SetItemDynamicParameters(string path, object value) { 
     264                        return new PSTodoItemParameters(); 
     265                } 
     266 
     267                /// <summary> 
    129268                /// <see cref="NavigationCmdletProvider.IsItemContainer"/> 
    130269                /// </summary> 
     
    142281                protected override bool ItemExists(string path) { 
    143282                        return Directory.Exists(path) || File.Exists(path); 
    144                 } 
    145  
    146                 /// <summary> 
    147                 /// <see cref="ContainerCmdletProvider.NewItem(string, string, object)"/> 
    148                 /// </summary> 
    149                 /// <param name="path"></param> 
    150                 /// <param name="itemTypeName"></param> 
    151                 /// <param name="newItemValue"></param> 
    152                 protected override void NewItem(string path, string itemTypeName, object newItemValue) { 
    153                         PSTodoItem todoItem = new PSTodoItem(Path.GetFileName(path)); 
    154                         todoItem.Description = newItemValue != null ? newItemValue.ToString() : string.Empty; 
    155  
    156                         Serialize(todoItem, path); 
    157  
    158                         WriteItemObject(todoItem, path, false); 
    159283                } 
    160284