diff options
19 files changed, 685 insertions, 103 deletions
diff --git a/src/System.ComponentModel.TypeConverter/dir.props b/src/System.ComponentModel.TypeConverter/dir.props index 34b2edfd20..ec6b27dedd 100644 --- a/src/System.ComponentModel.TypeConverter/dir.props +++ b/src/System.ComponentModel.TypeConverter/dir.props @@ -1,7 +1,7 @@ <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="..\dir.props" /> <PropertyGroup> - <AssemblyVersion>4.1.1.0</AssemblyVersion> + <AssemblyVersion>4.2.0.0</AssemblyVersion> </PropertyGroup> </Project> diff --git a/src/System.ComponentModel.TypeConverter/pkg/System.ComponentModel.TypeConverter.pkgproj b/src/System.ComponentModel.TypeConverter/pkg/System.ComponentModel.TypeConverter.pkgproj index 0a04b74bf4..8a570ec22e 100644 --- a/src/System.ComponentModel.TypeConverter/pkg/System.ComponentModel.TypeConverter.pkgproj +++ b/src/System.ComponentModel.TypeConverter/pkg/System.ComponentModel.TypeConverter.pkgproj @@ -6,7 +6,7 @@ <SupportedFramework>net45;netcore45;wp8;wpa81</SupportedFramework> </ProjectReference> <ProjectReference Include="..\ref\System.ComponentModel.TypeConverter.csproj"> - <SupportedFramework>net462;netcoreapp1.0;$(AllXamarinFrameworks)</SupportedFramework> + <SupportedFramework>net463;netcoreapp1.1;$(AllXamarinFrameworks)</SupportedFramework> </ProjectReference> <ProjectReference Include="..\src\System.ComponentModel.TypeConverter.builds" /> </ItemGroup> diff --git a/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.Manual.cs b/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.Manual.cs new file mode 100644 index 0000000000..657e2a7bda --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.Manual.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Stub to unblock explosing System.Timers + +namespace System.ComponentModel +{ + public partial interface ISynchronizeInvoke + { + IAsyncResult BeginInvoke(Delegate method, object[] args); + object EndInvoke(IAsyncResult result); + object Invoke(Delegate method, object[] args); + bool InvokeRequired { get; } + } + + public partial interface ISupportInitialize + { + void BeginInit(); + void EndInit(); + } + + public partial class Component : IDisposable + { + public Component() { } + public void Dispose() { } + protected virtual void Dispose(bool disposing) { } + ~Component() { } + protected virtual object GetService(Type service) { return default(object); } + public override string ToString() { return default(string); } + protected virtual bool CanRaiseEvents { get { return default(bool); } } + protected bool DesignMode { get { return default(bool); } } + public virtual ISite Site { get { return default(ISite); } set { } } + } +} diff --git a/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.cs b/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.cs index a7c6e527c8..236858a187 100644 --- a/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.cs +++ b/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.cs @@ -5,7 +5,6 @@ // Changes to this file must follow the http://aka.ms/api-review process. // ------------------------------------------------------------------------------ - namespace System.ComponentModel { public partial class ArrayConverter : System.ComponentModel.CollectionConverter @@ -648,6 +647,41 @@ namespace System.ComponentModel } } +namespace System.Timers +{ + public partial class Timer : System.ComponentModel.Component, System.ComponentModel.ISupportInitialize + { + public Timer() { } + public Timer(double interval) { } + public void BeginInit() { } + public void Close() { } + protected override void Dispose(bool disposing) { } + public void EndInit() { } + public void Start() { } + public void Stop() { } + public bool AutoReset { get { return default(bool); } set { } } + public bool Enabled { get { return default(bool); } set { } } + public double Interval { get { return default(double); } set { } } + public override System.ComponentModel.ISite Site { get { return default(System.ComponentModel.ISite); } set { } } + public System.ComponentModel.ISynchronizeInvoke SynchronizingObject { get { return default(System.ComponentModel.ISynchronizeInvoke); } set { } } + public event ElapsedEventHandler Elapsed { add { } remove { } } + } + + public partial class TimersDescriptionAttribute : System.ComponentModel.DescriptionAttribute + { + public TimersDescriptionAttribute(string description) { } + public override string Description { get { return default(string); } } + } + + public delegate void ElapsedEventHandler(object sender, ElapsedEventArgs e); + + public partial class ElapsedEventArgs : EventArgs + { + internal ElapsedEventArgs(long fileTime) { } + public DateTime SignalTime { get { return default(DateTime); } } + } +} + namespace System { public partial class UriTypeConverter : System.ComponentModel.TypeConverter diff --git a/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.csproj b/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.csproj index 4017d64217..c75d3aaaf1 100644 --- a/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.csproj +++ b/src/System.ComponentModel.TypeConverter/ref/System.ComponentModel.TypeConverter.csproj @@ -3,10 +3,11 @@ <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> <PropertyGroup> <OutputType>Library</OutputType> - <NuGetTargetMoniker>.NETStandard,Version=v1.5</NuGetTargetMoniker> + <NuGetTargetMoniker>.NETStandard,Version=v1.7</NuGetTargetMoniker> </PropertyGroup> <ItemGroup> <Compile Include="System.ComponentModel.TypeConverter.cs" /> + <Compile Include="System.ComponentModel.Manual.cs" /> </ItemGroup> <ItemGroup> <None Include="project.json" /> diff --git a/src/System.ComponentModel.TypeConverter/ref/project.json b/src/System.ComponentModel.TypeConverter/ref/project.json index fa730bd026..0ea2b2490c 100644 --- a/src/System.ComponentModel.TypeConverter/ref/project.json +++ b/src/System.ComponentModel.TypeConverter/ref/project.json @@ -8,9 +8,9 @@ "System.Runtime": "4.0.0" }, "frameworks": { - "netstandard1.5": { + "netstandard1.7": { "imports": [ - "dotnet5.1" + "dotnet5.8" ] } } diff --git a/src/System.ComponentModel.TypeConverter/src/Resources/Strings.resx b/src/System.ComponentModel.TypeConverter/src/Resources/Strings.resx index e730cadc26..f316fab3b3 100644 --- a/src/System.ComponentModel.TypeConverter/src/Resources/Strings.resx +++ b/src/System.ComponentModel.TypeConverter/src/Resources/Strings.resx @@ -192,4 +192,25 @@ <data name="TypeDescriptorSameAssociation" xml:space="preserve"> <value>Cannot create an association when the primary and secondary objects are the same.</value> </data> + <data name="InvalidParameter" xml:space="preserve"> + <value>Invalid value '{1}' for parameter '{0}'.</value> + </data> + <data name="TimerAutoReset" xml:space="preserve"> + <value>Indicates whether the timer will be restarted when it is enabled.</value> + </data> + <data name="TimerEnabled" xml:space="preserve"> + <value>Indicates whether the timer is enabled to fire events at a defined interval.</value> + </data> + <data name="TimerInterval" xml:space="preserve"> + <value>The number of milliseconds between timer events.</value> + </data> + <data name="TimerIntervalElapsed" xml:space="preserve"> + <value>Occurs when the Interval has elapsed.</value> + </data> + <data name="TimerInvalidInterval" xml:space="preserve"> + <value>'{0}' is not a valid value for 'Interval'. 'Interval' must be greater than {1}.</value> + </data> + <data name="TimerSynchronizingObject" xml:space="preserve"> + <value>The object used to marshal the event handler calls issued when an interval has elapsed.</value> + </data> </root> diff --git a/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.builds b/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.builds index e45e2407b3..32575af192 100644 --- a/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.builds +++ b/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.builds @@ -4,13 +4,7 @@ <ItemGroup> <Project Include="System.ComponentModel.TypeConverter.csproj" /> <Project Include="System.ComponentModel.TypeConverter.csproj"> - <TargetGroup>net45</TargetGroup> - </Project> - <Project Include="System.ComponentModel.TypeConverter.csproj"> - <TargetGroup>net462</TargetGroup> - </Project> - <Project Include="System.ComponentModel.TypeConverter.csproj"> - <TargetGroup>netstandard1.0</TargetGroup> + <TargetGroup>net463</TargetGroup> </Project> </ItemGroup> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" /> diff --git a/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj b/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj index d632da0a0b..cc4be9940c 100644 --- a/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj +++ b/src/System.ComponentModel.TypeConverter/src/System.ComponentModel.TypeConverter.csproj @@ -5,10 +5,8 @@ <ProjectGuid>{AF3EBF3B-526A-4B51-9F3D-62B0113CD01F}</ProjectGuid> <RootNamespace>System.ComponentModel.TypeConverter</RootNamespace> <AssemblyName>System.ComponentModel.TypeConverter</AssemblyName> - <AssemblyVersion Condition="'$(TargetGroup)' == 'netstandard1.0' OR '$(TargetGroup)'=='net45'">4.0.0.0</AssemblyVersion> - <ContractProject Condition="'$(TargetGroup)' == 'netstandard1.0' OR '$(TargetGroup)'=='net45'">..\ref\4.0\$(AssemblyName).depproj</ContractProject> - <IsPartialFacadeAssembly Condition="'$(TargetGroup)'=='net45' OR '$(TargetGroup)'=='net462'">true</IsPartialFacadeAssembly> - <NuGetTargetMoniker Condition="'$(TargetGroup)' == ''">.NETStandard,Version=v1.5</NuGetTargetMoniker> + <IsPartialFacadeAssembly Condition="'$(TargetGroup)'=='net463'">true</IsPartialFacadeAssembly> + <NuGetTargetMoniker Condition="'$(TargetGroup)' == ''">.NETStandard,Version=v1.7</NuGetTargetMoniker> </PropertyGroup> <!-- Default configurations to help VS understand the configurations --> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'" /> @@ -55,6 +53,11 @@ <Compile Include="System\ComponentModel\UriTypeConverter.cs" /> </ItemGroup> <ItemGroup Condition="'$(TargetGroup)'==''"> + <Compile Include="System\Timers\ElapsedEventArgs.cs" /> + <Compile Include="System\Timers\ElapsedEventHandler.cs" /> + <Compile Include="System\Timers\System.ComponentModel.cs" /> + <Compile Include="System\Timers\Timer.cs" /> + <Compile Include="System\Timers\TimersDescriptionAttribute.cs" /> <Compile Include="System\ComponentModel\AttributeCollection.cs" /> <Compile Include="System\ComponentModel\AttributeProviderAttribute.cs" /> <Compile Include="System\ComponentModel\CancelEventHandler.cs" /> @@ -98,7 +101,7 @@ <ItemGroup Condition="'$(TargetGroup)'==''"> <EmbeddedResource Include="$(MsBuildThisFileDirectory)Resources\$(AssemblyName).rd.xml" /> </ItemGroup> - <ItemGroup Condition="'$(TargetGroup)'=='net45' OR '$(TargetGroup)'=='net462'"> + <ItemGroup Condition="'$(TargetGroup)'=='net463'"> <TargetingPackReference Include="mscorlib" /> <TargetingPackReference Include="System" /> </ItemGroup> diff --git a/src/System.ComponentModel.TypeConverter/src/System/Timers/ElapsedEventArgs.cs b/src/System.ComponentModel.TypeConverter/src/System/Timers/ElapsedEventArgs.cs new file mode 100644 index 0000000000..ed95b6fab3 --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/src/System/Timers/ElapsedEventArgs.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Timers +{ + public class ElapsedEventArgs : EventArgs + { + private DateTime _signalTime; + + internal ElapsedEventArgs(long fileTime) + { + _signalTime = DateTime.FromFileTime(fileTime); + } + + public DateTime SignalTime + { + get + { + return _signalTime; + } + } + } +} + diff --git a/src/System.ComponentModel.TypeConverter/src/System/Timers/ElapsedEventHandler.cs b/src/System.ComponentModel.TypeConverter/src/System/Timers/ElapsedEventHandler.cs new file mode 100644 index 0000000000..483abd7f92 --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/src/System/Timers/ElapsedEventHandler.cs @@ -0,0 +1,8 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Timers +{ + public delegate void ElapsedEventHandler(object sender, ElapsedEventArgs e); +} diff --git a/src/System.ComponentModel.TypeConverter/src/System/Timers/System.ComponentModel.cs b/src/System.ComponentModel.TypeConverter/src/System/Timers/System.ComponentModel.cs new file mode 100644 index 0000000000..37192540a4 --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/src/System/Timers/System.ComponentModel.cs @@ -0,0 +1,44 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// Stub to unblock explosing System.Timers + +namespace System.ComponentModel.Design +{ + public partial interface IDesignerHost + { + IComponent RootComponent { get; } + } +} + +namespace System.ComponentModel +{ + public partial interface ISynchronizeInvoke + { + IAsyncResult BeginInvoke(Delegate method, object[] args); + object EndInvoke(IAsyncResult result); + object Invoke(Delegate method, object[] args); + bool InvokeRequired { get; } + } + + public partial interface ISupportInitialize + { + void BeginInit(); + void EndInit(); + } + + public partial class Component : IDisposable + { + public Component() { } + public void Dispose() { } + protected virtual void Dispose(bool disposing) { } + ~Component() { } + protected virtual object GetService(Type service) { return default(object); } + public override string ToString() { return default(string); } + protected virtual bool CanRaiseEvents { get { return default(bool); } } + protected bool DesignMode { get { return default(bool); } } + public virtual ISite Site { get { return default(ISite); } set { } } + + } +} diff --git a/src/System.ComponentModel.TypeConverter/src/System/Timers/Timer.cs b/src/System.ComponentModel.TypeConverter/src/System/Timers/Timer.cs new file mode 100644 index 0000000000..34881dc488 --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/src/System/Timers/Timer.cs @@ -0,0 +1,352 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Threading; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Security.Permissions; + +namespace System.Timers +{ + /// <summary> + /// <para>Handles recurring events in an application.</para> + /// </summary> + [DefaultProperty("Interval"), DefaultEvent("Elapsed"), HostProtection(Synchronization = true, ExternalThreading = true)] + public partial class Timer : Component, ISupportInitialize + { + private double _interval; + private bool _enabled; + private bool _initializing; + private bool _delayedEnable; + private ElapsedEventHandler _onIntervalElapsed; + private bool _autoReset; + private ISynchronizeInvoke _synchronizingObject; + private bool _disposed; + private Threading.Timer _timer; + private TimerCallback _callback; + private object _cookie; + + /// <summary> + /// <para>Initializes a new instance of the <see cref='System.Timers.Timer'/> class, with the properties + /// set to initial values.</para> + /// </summary> + public Timer() + : base() + { + _interval = 100; + _enabled = false; + _autoReset = true; + _initializing = false; + _delayedEnable = false; + _callback = new TimerCallback(MyTimerCallback); + } + + /// <summary> + /// <para> + /// Initializes a new instance of the <see cref='System.Timers.Timer'/> class, setting the <see cref='System.Timers.Timer.Interval'/> property to the specified period. + /// </para> + /// </summary> + public Timer(double interval) + : this() + { + if (interval <= 0) + throw new ArgumentException(SR.Format(SR.InvalidParameter, "interval", interval)); + + double roundedInterval = Math.Ceiling(interval); + if (roundedInterval > int.MaxValue || roundedInterval <= 0) + { + throw new ArgumentException(SR.Format(SR.InvalidParameter, "interval", interval)); + } + + interval = (int)roundedInterval; + } + + /// <summary> + /// <para>Gets or sets a value indicating whether the Timer raises the Tick event each time the specified + /// Interval has elapsed, + /// when Enabled is set to true.</para> + /// </summary> + [TimersDescription(nameof(SR.TimerAutoReset), null), DefaultValue(true)] + public bool AutoReset + { + get + { + return _autoReset; + } + + set + { + if (DesignMode) + _autoReset = value; + else if (_autoReset != value) + { + _autoReset = value; + if (_timer != null) + { + UpdateTimer(); + } + } + } + } + + /// <summary> + /// <para>Gets or sets a value indicating whether the <see cref='System.Timers.Timer'/> + /// is able + /// to raise events at a defined interval.</para> + /// </summary> + // The default value by design is false, don't change it. + [TimersDescription(nameof(SR.TimerEnabled), null), DefaultValue(false)] + public bool Enabled + { + get + { + return _enabled; + } + + set + { + if (DesignMode) + { + _delayedEnable = value; + _enabled = value; + } + else if (_initializing) + _delayedEnable = value; + else if (_enabled != value) + { + if (!value) + { + if (_timer != null) + { + _cookie = null; + _timer.Dispose(); + _timer = null; + } + _enabled = value; + } + else + { + _enabled = value; + if (_timer == null) + { + if (_disposed) + { + throw new ObjectDisposedException(GetType().Name); + } + + int i = (int)Math.Ceiling(_interval); + _cookie = new object(); + _timer = new Threading.Timer(_callback, _cookie, i, _autoReset ? i : Timeout.Infinite); + } + else + { + UpdateTimer(); + } + } + + } + } + } + + + private void UpdateTimer() + { + int i = (int)Math.Ceiling(_interval); + _timer.Change(i, _autoReset ? i : Timeout.Infinite); + } + + /// <summary> + /// <para>Gets or + /// sets the interval on which + /// to raise events.</para> + /// </summary> + [TimersDescription(nameof(SR.TimerInterval), null), DefaultValue(100d)] + public double Interval + { + get + { + return _interval; + } + + set + { + if (value <= 0) + throw new ArgumentException(SR.Format(SR.TimerInvalidInterval, value, 0)); + + _interval = value; + if (_timer != null) + { + UpdateTimer(); + } + } + } + + + /// <summary> + /// <para>Occurs when the <see cref='System.Timers.Timer.Interval'/> has + /// elapsed.</para> + /// </summary> + [TimersDescription(nameof(SR.TimerIntervalElapsed), null)] + public event ElapsedEventHandler Elapsed + { + add + { + _onIntervalElapsed += value; + } + remove + { + _onIntervalElapsed -= value; + } + } + + /// <summary> + /// <para> + /// Sets the enable property in design mode to true by default. + /// </para> + /// </summary> + /// <internalonly/> + public override ISite Site + { + set + { + base.Site = value; + if (DesignMode) + _enabled = true; + } + + get + { + return base.Site; + } + } + + + /// <summary> + /// <para>Gets or sets the object used to marshal event-handler calls that are issued when + /// an interval has elapsed.</para> + /// </summary> + [DefaultValue(null), TimersDescription(nameof(SR.TimerSynchronizingObject), null)] + public ISynchronizeInvoke SynchronizingObject + { + get + { + if (_synchronizingObject == null && DesignMode) + { + IDesignerHost host = (IDesignerHost)GetService(typeof(IDesignerHost)); + if (host != null) + { + object baseComponent = host.RootComponent; + if (baseComponent != null && baseComponent is ISynchronizeInvoke) + _synchronizingObject = (ISynchronizeInvoke)baseComponent; + } + } + + return _synchronizingObject; + } + + set + { + _synchronizingObject = value; + } + } + + /// <summary> + /// <para> + /// Notifies + /// the object that initialization is beginning and tells it to stand by. + /// </para> + /// </summary> + public void BeginInit() + { + Close(); + _initializing = true; + } + + /// <summary> + /// <para>Disposes of the resources (other than memory) used by + /// the <see cref='System.Timers.Timer'/>.</para> + /// </summary> + public void Close() + { + _initializing = false; + _delayedEnable = false; + _enabled = false; + + if (_timer != null) + { + _timer.Dispose(); + _timer = null; + } + } + + protected override void Dispose(bool disposing) + { + Close(); + _disposed = true; + base.Dispose(disposing); + } + + /// <summary> + /// <para> + /// Notifies the object that initialization is complete. + /// </para> + /// </summary> + public void EndInit() + { + _initializing = false; + Enabled = _delayedEnable; + } + + /// <summary> + /// <para>Starts the timing by setting <see cref='System.Timers.Timer.Enabled'/> to <see langword='true'/>.</para> + /// </summary> + public void Start() + { + Enabled = true; + } + + /// <summary> + /// <para> + /// Stops the timing by setting <see cref='System.Timers.Timer.Enabled'/> to <see langword='false'/>. + /// </para> + /// </summary> + public void Stop() + { + Enabled = false; + } + + private void MyTimerCallback(object state) + { + // System.Threading.Timer will not cancel the work item queued before the timer is stopped. + // We don't want to handle the callback after a timer is stopped. + if (state != _cookie) + { + return; + } + + if (!_autoReset) + { + _enabled = false; + } + + ElapsedEventArgs elapsedEventArgs = new ElapsedEventArgs(DateTime.UtcNow.ToFileTime()); + try + { + // To avoid race between remove handler and raising the event + ElapsedEventHandler intervalElapsed = _onIntervalElapsed; + if (intervalElapsed != null) + { + if (SynchronizingObject != null && SynchronizingObject.InvokeRequired) + SynchronizingObject.BeginInvoke(intervalElapsed, new object[] { this, elapsedEventArgs }); + else + intervalElapsed(this, elapsedEventArgs); + } + } + catch + { + } + } + } +} + diff --git a/src/System.ComponentModel.TypeConverter/src/System/Timers/TimersDescriptionAttribute.cs b/src/System.ComponentModel.TypeConverter/src/System/Timers/TimersDescriptionAttribute.cs new file mode 100644 index 0000000000..aa8ec31b6d --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/src/System/Timers/TimersDescriptionAttribute.cs @@ -0,0 +1,46 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.ComponentModel; + +namespace System.Timers +{ + /// <summary> + /// DescriptionAttribute marks a property, event, or extender with a + /// description. Visual designers can display this description when referencing + /// the member. + /// </summary> + [AttributeUsage(AttributeTargets.All)] + public class TimersDescriptionAttribute : DescriptionAttribute + { + private bool replaced = false; + + /// <summary> + /// Constructs a new sys description. + /// </summary> + public TimersDescriptionAttribute(string description) : base(description) { } + + /// <summary> + /// Constructs a new localized sys description. + /// </summary> + internal TimersDescriptionAttribute(string description, string defaultValue) : base(SR.GetResourceString(description, defaultValue)) { } + + /// <summary> + /// Retrieves the description text. + /// </summary> + public override string Description + { + get + { + if (!replaced) + { + replaced = true; + DescriptionValue = SR.Format(base.Description); + } + return base.Description; + } + } + } +} diff --git a/src/System.ComponentModel.TypeConverter/src/project.json b/src/System.ComponentModel.TypeConverter/src/project.json index 7a57f7a92b..fb834cec7b 100644 --- a/src/System.ComponentModel.TypeConverter/src/project.json +++ b/src/System.ComponentModel.TypeConverter/src/project.json @@ -1,59 +1,35 @@ { - "frameworks": { - "netstandard1.5": { - "dependencies": { - "System.Collections": "4.0.0", - "System.Collections.NonGeneric": "4.0.0", - "System.Collections.Specialized": "4.0.0", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Primitives": "4.1.0", - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.10", - "System.Diagnostics.Tools": "4.0.0", - "System.Globalization": "4.0.0", - "System.Linq": "4.0.0", - "System.Reflection": "4.1.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.TypeExtensions": "4.1.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.20", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.10" - }, - "imports": [ - "dotnet5.6" - ] - }, - "netstandard1.0": { - "dependencies": { - "System.Collections": "4.0.0", - "System.ComponentModel": "4.0.0", - "System.ComponentModel.Primitives": "4.1.0", - "System.Diagnostics.Contracts": "4.0.0", - "System.Diagnostics.Debug": "4.0.0", - "System.Diagnostics.Tools": "4.0.0", - "System.Globalization": "4.0.0", - "System.Reflection": "4.0.0", - "System.Reflection.Extensions": "4.0.0", - "System.Reflection.Primitives": "4.0.0", - "System.Resources.ResourceManager": "4.0.0", - "System.Runtime": "4.0.0", - "System.Runtime.Extensions": "4.0.0", - "System.Threading": "4.0.0" - }, - "imports": [ - "dotnet5.1" - ] - }, - "net462": { - "dependencies": { - "Microsoft.TargetingPack.NETFramework.v4.6.2": "1.0.1" - } - }, - "net45": { - "dependencies": { - "Microsoft.TargetingPack.NETFramework.v4.5": "1.0.1" - } + "frameworks": { + "netstandard1.7": { + "dependencies": { + "System.Collections": "4.0.0", + "System.Collections.NonGeneric": "4.0.0", + "System.Collections.Specialized": "4.0.0", + "System.ComponentModel": "4.0.0", + "System.ComponentModel.Primitives": "4.1.0", + "System.Diagnostics.Contracts": "4.0.0", + "System.Diagnostics.Debug": "4.0.10", + "System.Diagnostics.Tools": "4.0.0", + "System.Globalization": "4.0.0", + "System.Linq": "4.0.0", + "System.Reflection": "4.1.0", + "System.Reflection.Extensions": "4.0.0", + "System.Reflection.TypeExtensions": "4.1.0", + "System.Resources.ResourceManager": "4.0.0", + "System.Runtime": "4.0.20", + "System.Runtime.Extensions": "4.0.0", + "System.Security.Permissions": "4.3.0-beta-devapi-24512-01", + "System.Threading": "4.0.10", + "System.Threading.Timer": "4.0.0" + }, + "imports": [ + "dotnet5.8" + ] + }, + "net463": { + "dependencies": { + "Microsoft.TargetingPack.NETFramework.v4.6": "1.0.1" + } + } } - } } diff --git a/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.builds b/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.builds index 659dc14d21..764e1e03cc 100644 --- a/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.builds +++ b/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.builds @@ -7,6 +7,10 @@ <TestTFMs>net462;net463</TestTFMs> <OSGroup>Windows_NT</OSGroup> </Project> + <Project Include="System.ComponentModel.TypeConverter.Tests.csproj"> + <TargetGroup>netstandard1.7</TargetGroup> + <TestTFMs>netcoreapp1.1</TestTFMs> + </Project> <Project Include="Performance\System.ComponentModel.TypeConverter.Performance.Tests.csproj"/> </ItemGroup> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.traversal.targets))\dir.traversal.targets" /> diff --git a/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj b/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj index 2a3b8ae4d6..c972549468 100644 --- a/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj +++ b/src/System.ComponentModel.TypeConverter/tests/System.ComponentModel.TypeConverter.Tests.csproj @@ -1,4 +1,4 @@ -<?xml version="1.0" encoding="utf-8"?> +<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), dir.props))\dir.props" /> <PropertyGroup> @@ -8,9 +8,14 @@ <ProjectGuid>{3F0326A1-9E19-4A6C-95CE-63E65C9D2030}</ProjectGuid> <RootNamespace>System.ComponentModel.TypeConverter.Tests</RootNamespace> <AssemblyName>System.ComponentModel.TypeConverter.Tests</AssemblyName> - <NugetTargetMoniker>.NETStandard,Version=v1.5</NugetTargetMoniker> + <NugetTargetMoniker Condition="'$(NugetTargetMoniker)'==''">.NETStandard,Version=v1.5</NugetTargetMoniker> <DefineConstants>$(DefineConstants);FUNCTIONAL_TESTS</DefineConstants> </PropertyGroup> + <ItemGroup Condition="'$(TargetGroup)'=='netstandard1.7'"> + <TestNugetTargetMoniker Include="$(NugetTargetMoniker)"> + <Folder>netcoreapp1.1</Folder> + </TestNugetTargetMoniker> + </ItemGroup> <PropertyGroup> <DebugEngines>{2E36F1D4-B23C-435D-AB41-18E608940038}</DebugEngines> </PropertyGroup> @@ -56,6 +61,7 @@ <Compile Include="SByteConverterTests.cs" /> <Compile Include="SingleConverterTests.cs" /> <Compile Include="StringConverterTests.cs" /> + <Compile Include="TimerTests.cs" /> <Compile Include="TimeSpanConverterTests.cs" /> <Compile Include="TypeConverterAttributeTests.cs" /> <Compile Include="TypeConverterTests.cs" /> diff --git a/src/System.ComponentModel.TypeConverter/tests/TimerTests.cs b/src/System.ComponentModel.TypeConverter/tests/TimerTests.cs new file mode 100644 index 0000000000..fbf2e0d8bc --- /dev/null +++ b/src/System.ComponentModel.TypeConverter/tests/TimerTests.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Xunit; +using System.Threading; +using System.Timers; + +namespace System.Timers.Tests +{ + public class TimerTests + { + + } +} diff --git a/src/System.ComponentModel.TypeConverter/tests/project.json b/src/System.ComponentModel.TypeConverter/tests/project.json index d951c2f6e0..f318562870 100644 --- a/src/System.ComponentModel.TypeConverter/tests/project.json +++ b/src/System.ComponentModel.TypeConverter/tests/project.json @@ -1,30 +1,48 @@ { - "dependencies": { - "Microsoft.NETCore.Platforms": "4.3.0-beta-devapi-24512-01", - "System.ComponentModel.TypeConverter": "4.3.0-beta-devapi-24512-01", - "System.Collections.NonGeneric": "4.3.0-beta-devapi-24512-01", - "System.Collections.Specialized": "4.3.0-beta-devapi-24512-01", - "System.ComponentModel.Primitives": "4.3.0-beta-devapi-24512-01", - "System.Globalization": "4.3.0-beta-devapi-24512-01", - "System.Linq.Expressions": "4.3.0-beta-devapi-24512-01", - "System.ObjectModel": "4.3.0-beta-devapi-24512-01", - "System.Runtime": "4.3.0-beta-devapi-24512-01", - "System.Text.RegularExpressions": "4.3.0-beta-devapi-24512-01", - "System.Threading.Tasks": "4.3.0-beta-devapi-24512-01", - "test-runtime": { - "target": "project", - "exclude": "compile" + "dependencies": { + "Microsoft.NETCore.Platforms": "4.3.0-beta-devapi-24512-01", + "System.Collections.NonGeneric": "4.3.0-beta-devapi-24512-01", + "System.Collections.Specialized": "4.3.0-beta-devapi-24512-01", + "System.ComponentModel.Primitives": "4.3.0-beta-devapi-24512-01", + "System.Globalization": "4.3.0-beta-devapi-24512-01", + "System.Linq.Expressions": "4.3.0-beta-devapi-24512-01", + "System.ObjectModel": "4.3.0-beta-devapi-24512-01", + "System.Reflection": "4.3.0-beta-devapi-24512-01", + "System.Runtime": "4.3.0-beta-devapi-24512-01", + "System.Text.RegularExpressions": "4.3.0-beta-devapi-24512-01", + "System.Threading.Thread": "4.3.0-beta-devapi-24512-01", + "System.Threading.Tasks": "4.3.0-beta-devapi-24512-01", + "test-runtime": { + "target": "project", + "exclude": "compile" + }, + "Microsoft.xunit.netcore.extensions": "1.0.0-prerelease-00807-03", + "Microsoft.DotNet.BuildTools.TestSuite": "1.0.0-prerelease-00807-03", + "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0039" }, - "Microsoft.xunit.netcore.extensions": "1.0.0-prerelease-00807-03", - "Microsoft.DotNet.BuildTools.TestSuite": "1.0.0-prerelease-00807-03", - "Microsoft.DotNet.xunit.performance": "1.0.0-alpha-build0039" - }, - "frameworks": { - "netstandard1.5": {} - }, - "supports": { - "coreFx.Test.netcoreapp1.0": {}, - "coreFx.Test.net462": {}, - "coreFx.Test.net463": {} - } + "frameworks": { + "netstandard1.5": {}, + "netstandard1.7": {} + }, + "supports": { + "coreFx.Test.netcoreapp1.0": {}, + "coreFx.Test.net462": {}, + "coreFx.Test.net463": {}, + "coreFx.Test.netcoreapp1.1-ns17": { + "netstandard1.7": [ + "win7-x86", + "win7-x64", + "win10-arm64", + "osx.10.10-x64", + "centos.7-x64", + "debian.8-x64", + "rhel.7-x64", + "ubuntu.14.04-x64", + "ubuntu.16.04-x64", + "fedora.23-x64", + "linux-x64", + "opensuse.13.2-x64" + ] + } + } } |