Skip to content

Commit 39f8697

Browse files
committed
update table abstraction libraries
1 parent a7a2b98 commit 39f8697

File tree

9 files changed

+814
-212
lines changed

9 files changed

+814
-212
lines changed

src/TableStorage.Abstractions.POCO.Tests/PocoTableStoreTests.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
using Microsoft.VisualStudio.TestTools.UnitTesting;
55
using Microsoft.WindowsAzure.Storage.Table;
66
using System.Reactive;
7+
using TableStorage.Abstractions.Models;
8+
using TableStorage.Abstractions.Store;
9+
710
namespace TableStorage.Abstractions.POCO.Tests
811
{
912
[TestClass]
@@ -38,6 +41,7 @@ public void CreateData()
3841
Name = "Lucy CEO",
3942
Department = new Department {Id = 1, Name = "E Team"}
4043
};
44+
4145
tableStore.Insert(new[] {employee, employee2, employee3});
4246
}
4347

@@ -126,7 +130,7 @@ public void insert_record_ignore_field()
126130
Department = new Department {Id = 5, Name = "Test"}
127131
};
128132
tableStore = new PocoTableStore<Employee, int, int>("TestEmployee", "UseDevelopmentStorage=true", e => e.CompanyId,
129-
e => e.Id, e => e.Department);
133+
e => e.Id, ignoredProperties: e => e.Department);
130134
tableStore.Insert(employee);
131135
var record = tableStore.GetRecord(99, 99);
132136
Assert.IsNull(record.Department);
@@ -683,7 +687,7 @@ public void insert_record_with_fixed_partition_key()
683687
};
684688
tableStore.Insert(employee);
685689

686-
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true");
690+
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true", new TableStorageOptions());
687691
var record = ts.GetRecord("SomeString", "1");
688692

689693
Assert.AreEqual("SomeString", record.PartitionKey);
@@ -765,7 +769,7 @@ public void insert_record_with_calculated_partition_key()
765769
};
766770
tableStore.Insert(employee);
767771

768-
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true");
772+
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true", new TableStorageOptions());
769773
var record = ts.GetRecord("SomeString_1", "1");
770774

771775
Assert.AreEqual("SomeString_1", record.PartitionKey);
@@ -856,7 +860,7 @@ public void insert_record_with_fixed_row_key()
856860
};
857861
tableStore.Insert(employee);
858862

859-
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true");
863+
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true", new TableStorageOptions());
860864
var record = ts.GetRecord("1", "UserRecord");
861865

862866
Assert.AreEqual("1", record.PartitionKey);
@@ -945,7 +949,7 @@ public void insert_record_with_calculated_row_key()
945949
};
946950
tableStore.Insert(employee);
947951

948-
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true");
952+
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true", new TableStorageOptions());
949953
var record = ts.GetRecord("1", "UserRecord_1");
950954

951955
Assert.AreEqual("1", record.PartitionKey);
@@ -1047,7 +1051,7 @@ public void insert_multiple_record_with_fixed_partition_key()
10471051

10481052
tableStore.Insert(new Employee[]{employee, employee2});
10491053

1050-
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true");
1054+
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true", new TableStorageOptions());
10511055
var records = ts.GetAllRecords();
10521056

10531057
Assert.AreEqual(5, records.Count());
@@ -1251,7 +1255,7 @@ public void insert_record_with_calculated_partition_key_from_multiple_properties
12511255
};
12521256
tableStore.Insert(employee);
12531257

1254-
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true");
1258+
var ts = new TableStore<DynamicTableEntity>("TestEmployee", "UseDevelopmentStorage=true", new TableStorageOptions());
12551259
var record = ts.GetRecord("1.22", "1");
12561260

12571261
Assert.AreEqual("1.22", record.PartitionKey);

src/TableStorage.Abstractions.POCO.Tests/TableStorage.Abstractions.POCO.Tests.csproj

Lines changed: 58 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3-
<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" />
3+
<Import Project="..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.props')" />
44
<PropertyGroup>
55
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
66
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
@@ -39,61 +39,86 @@
3939
<WarningLevel>4</WarningLevel>
4040
</PropertyGroup>
4141
<ItemGroup>
42-
<Reference Include="Microsoft.Azure.KeyVault.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
43-
<HintPath>..\packages\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll</HintPath>
42+
<Reference Include="FluentValidation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7de548da2fbae0f0, processorArchitecture=MSIL">
43+
<HintPath>..\packages\FluentValidation.8.1.2\lib\net45\FluentValidation.dll</HintPath>
44+
</Reference>
45+
<Reference Include="Microsoft.Azure.KeyVault.Core, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
46+
<HintPath>..\packages\Microsoft.Azure.KeyVault.Core.3.0.1\lib\net452\Microsoft.Azure.KeyVault.Core.dll</HintPath>
4447
</Reference>
4548
<Reference Include="Microsoft.CSharp" />
46-
<Reference Include="Microsoft.Data.Edm, Version=5.8.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
47-
<HintPath>..\packages\Microsoft.Data.Edm.5.8.2\lib\net40\Microsoft.Data.Edm.dll</HintPath>
49+
<Reference Include="Microsoft.Data.Edm, Version=5.8.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
50+
<HintPath>..\packages\Microsoft.Data.Edm.5.8.4\lib\net40\Microsoft.Data.Edm.dll</HintPath>
4851
</Reference>
49-
<Reference Include="Microsoft.Data.OData, Version=5.8.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
50-
<HintPath>..\packages\Microsoft.Data.OData.5.8.2\lib\net40\Microsoft.Data.OData.dll</HintPath>
52+
<Reference Include="Microsoft.Data.OData, Version=5.8.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
53+
<HintPath>..\packages\Microsoft.Data.OData.5.8.4\lib\net40\Microsoft.Data.OData.dll</HintPath>
5154
</Reference>
52-
<Reference Include="Microsoft.Data.Services.Client, Version=5.8.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
53-
<HintPath>..\packages\Microsoft.Data.Services.Client.5.8.2\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
55+
<Reference Include="Microsoft.Data.Services.Client, Version=5.8.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
56+
<HintPath>..\packages\Microsoft.Data.Services.Client.5.8.4\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
5457
</Reference>
5558
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
56-
<HintPath>..\packages\MSTest.TestFramework.1.1.18\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
59+
<HintPath>..\packages\MSTest.TestFramework.1.4.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
5760
</Reference>
5861
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
59-
<HintPath>..\packages\MSTest.TestFramework.1.1.18\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
62+
<HintPath>..\packages\MSTest.TestFramework.1.4.0\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
6063
</Reference>
61-
<Reference Include="Microsoft.WindowsAzure.Storage, Version=8.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
62-
<HintPath>..\packages\WindowsAzure.Storage.8.4.0\lib\net45\Microsoft.WindowsAzure.Storage.dll</HintPath>
64+
<Reference Include="Microsoft.WindowsAzure.Storage, Version=9.3.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
65+
<HintPath>..\packages\WindowsAzure.Storage.9.3.3\lib\net45\Microsoft.WindowsAzure.Storage.dll</HintPath>
6366
</Reference>
64-
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
65-
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
67+
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
68+
<HintPath>..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
6669
</Reference>
6770
<Reference Include="System" />
71+
<Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
72+
<HintPath>..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
73+
</Reference>
74+
<Reference Include="System.ComponentModel.DataAnnotations" />
75+
<Reference Include="System.ComponentModel.Primitives, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
76+
<HintPath>..\packages\System.ComponentModel.Primitives.4.3.0\lib\net45\System.ComponentModel.Primitives.dll</HintPath>
77+
<Private>True</Private>
78+
<Private>True</Private>
79+
</Reference>
6880
<Reference Include="System.Core" />
6981
<Reference Include="System.Data" />
82+
<Reference Include="System.Reactive, Version=4.1.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
83+
<HintPath>..\packages\System.Reactive.4.1.2\lib\net46\System.Reactive.dll</HintPath>
84+
</Reference>
7085
<Reference Include="System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
71-
<HintPath>..\packages\System.Reactive.Core.3.1.1\lib\net46\System.Reactive.Core.dll</HintPath>
86+
<HintPath>..\packages\System.Reactive.Core.4.1.2\lib\net46\System.Reactive.Core.dll</HintPath>
7287
</Reference>
73-
<Reference Include="System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
74-
<HintPath>..\packages\System.Reactive.Interfaces.3.1.1\lib\net45\System.Reactive.Interfaces.dll</HintPath>
88+
<Reference Include="System.Reactive.Interfaces, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
89+
<HintPath>..\packages\System.Reactive.Interfaces.4.1.2\lib\net46\System.Reactive.Interfaces.dll</HintPath>
7590
</Reference>
7691
<Reference Include="System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
77-
<HintPath>..\packages\System.Reactive.Linq.3.1.1\lib\net46\System.Reactive.Linq.dll</HintPath>
92+
<HintPath>..\packages\System.Reactive.Linq.4.1.2\lib\net46\System.Reactive.Linq.dll</HintPath>
7893
</Reference>
7994
<Reference Include="System.Reactive.PlatformServices, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
80-
<HintPath>..\packages\System.Reactive.PlatformServices.3.1.1\lib\net46\System.Reactive.PlatformServices.dll</HintPath>
95+
<HintPath>..\packages\System.Reactive.PlatformServices.4.1.2\lib\net46\System.Reactive.PlatformServices.dll</HintPath>
96+
</Reference>
97+
<Reference Include="System.Reactive.Windows.Threading, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
98+
<HintPath>..\packages\System.Reactive.Windows.Threading.4.1.2\lib\net46\System.Reactive.Windows.Threading.dll</HintPath>
99+
</Reference>
100+
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
101+
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
102+
</Reference>
103+
<Reference Include="System.Spatial, Version=5.8.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
104+
<HintPath>..\packages\System.Spatial.5.8.4\lib\net40\System.Spatial.dll</HintPath>
81105
</Reference>
82-
<Reference Include="System.Reactive.Windows.Threading, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
83-
<HintPath>..\packages\System.Reactive.Windows.Threading.3.1.1\lib\net45\System.Reactive.Windows.Threading.dll</HintPath>
106+
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
107+
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.1\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
84108
</Reference>
85-
<Reference Include="System.Spatial, Version=5.8.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
86-
<HintPath>..\packages\System.Spatial.5.8.2\lib\net40\System.Spatial.dll</HintPath>
109+
<Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
110+
<HintPath>..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll</HintPath>
87111
</Reference>
88112
<Reference Include="System.Windows" />
89-
<Reference Include="TableStorage.Abstractions, Version=1.1.1.0, Culture=neutral, processorArchitecture=MSIL">
90-
<HintPath>..\packages\TableStorage.Abstractions.1.1.1\lib\net46\TableStorage.Abstractions.dll</HintPath>
113+
<Reference Include="System.Windows.Forms" />
114+
<Reference Include="TableStorage.Abstractions, Version=2.1.2.0, Culture=neutral, processorArchitecture=MSIL">
115+
<HintPath>..\packages\TableStorage.Abstractions.2.1.2\lib\net461\TableStorage.Abstractions.dll</HintPath>
91116
</Reference>
92-
<Reference Include="TableStorage.Abstractions.TableEntityConverters, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
93-
<HintPath>..\packages\TableStorage.Abstractions.TableEntityConverters.1.1.2\lib\net462\TableStorage.Abstractions.TableEntityConverters.dll</HintPath>
117+
<Reference Include="TableStorage.Abstractions.TableEntityConverters, Version=1.1.4.0, Culture=neutral, processorArchitecture=MSIL">
118+
<HintPath>..\packages\TableStorage.Abstractions.TableEntityConverters.1.1.4\lib\net462\TableStorage.Abstractions.TableEntityConverters.dll</HintPath>
94119
</Reference>
95-
<Reference Include="Useful.Extensions, Version=1.0.8.0, Culture=neutral, processorArchitecture=MSIL">
96-
<HintPath>..\packages\Useful.Extensions.1.0.8\lib\net452\Useful.Extensions.dll</HintPath>
120+
<Reference Include="Useful.Extensions, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
121+
<HintPath>..\packages\Useful.Extensions.2.2.0\lib\net461\Useful.Extensions.dll</HintPath>
97122
</Reference>
98123
<Reference Include="WindowsBase" />
99124
</ItemGroup>
@@ -120,8 +145,8 @@
120145
<PropertyGroup>
121146
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
122147
</PropertyGroup>
123-
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.props'))" />
124-
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.targets'))" />
148+
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.props'))" />
149+
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.targets'))" />
125150
</Target>
126-
<Import Project="..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.1.18\build\net45\MSTest.TestAdapter.targets')" />
151+
<Import Project="..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.1.4.0\build\net45\MSTest.TestAdapter.targets')" />
127152
</Project>

src/TableStorage.Abstractions.POCO.Tests/app.config

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,32 @@
55
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
66
<dependentAssembly>
77
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
8-
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
8+
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
99
</dependentAssembly>
1010
<dependentAssembly>
1111
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral" />
12-
<bindingRedirect oldVersion="0.0.0.0-8.4.0.0" newVersion="8.4.0.0" />
12+
<bindingRedirect oldVersion="0.0.0.0-9.3.2.0" newVersion="9.3.2.0" />
1313
</dependentAssembly>
1414
<dependentAssembly>
1515
<assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
1616
<bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
1717
</dependentAssembly>
18+
<dependentAssembly>
19+
<assemblyIdentity name="Microsoft.Azure.KeyVault.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
20+
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
21+
</dependentAssembly>
22+
<dependentAssembly>
23+
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
24+
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
25+
</dependentAssembly>
26+
<dependentAssembly>
27+
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
28+
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
29+
</dependentAssembly>
30+
<dependentAssembly>
31+
<assemblyIdentity name="FluentValidation" publicKeyToken="7de548da2fbae0f0" culture="neutral" />
32+
<bindingRedirect oldVersion="0.0.0.0-8.0.0.0" newVersion="8.0.0.0" />
33+
</dependentAssembly>
1834
</assemblyBinding>
1935
</runtime>
2036
</configuration>

0 commit comments

Comments
 (0)