فهرست منبع

Move Forms to Web

Ryan Nowak 6 سال پیش
والد
کامیت
2aa9933e54
22فایلهای تغییر یافته به همراه59 افزوده شده و 136 حذف شده
  1. 15 0
      src/Components/Components.sln
  2. 0 123
      src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.Manual.cs
  3. 2 5
      src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs
  4. 1 1
      src/Components/Components/src/Forms/DataAnnotationsValidator.cs
  5. 10 6
      src/Components/Components/src/RenderTree/RenderTreeBuilder.cs
  6. 0 1
      src/Components/Components/test/Microsoft.AspNetCore.Components.Tests.csproj
  7. 3 0
      src/Components/ComponentsNoDeps.slnf
  8. 8 0
      src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs
  9. 0 0
      src/Components/Web/src/Forms/EditContextFieldClassExtensions.cs
  10. 0 0
      src/Components/Web/src/Forms/EditForm.cs
  11. 0 0
      src/Components/Web/src/Forms/InputBase.cs
  12. 0 0
      src/Components/Web/src/Forms/InputCheckbox.cs
  13. 0 0
      src/Components/Web/src/Forms/InputDate.cs
  14. 0 0
      src/Components/Web/src/Forms/InputNumber.cs
  15. 0 0
      src/Components/Web/src/Forms/InputSelect.cs
  16. 0 0
      src/Components/Web/src/Forms/InputText.cs
  17. 0 0
      src/Components/Web/src/Forms/InputTextArea.cs
  18. 0 0
      src/Components/Web/src/Forms/ValidationMessage.cs
  19. 0 0
      src/Components/Web/src/Forms/ValidationSummary.cs
  20. 1 0
      src/Components/Web/src/Microsoft.AspNetCore.Components.Web.csproj
  21. 0 0
      src/Components/Web/test/Forms/InputBaseTest.cs
  22. 19 0
      src/Components/Web/test/Microsoft.AspNetCore.Components.Web.Tests.csproj

+ 15 - 0
src/Components/Components.sln

@@ -226,6 +226,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Blazor.HttpClient.Tests", "Blazor\Http\test\Microsoft.AspNetCore.Blazor.HttpClient.Tests.csproj", "{E4C01A3F-D3C1-4639-A6A9-930E918843DD}"
 EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Web.Tests", "Web\test\Microsoft.AspNetCore.Components.Web.Tests.csproj", "{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -1436,6 +1438,18 @@ Global
 		{E4C01A3F-D3C1-4639-A6A9-930E918843DD}.Release|x64.Build.0 = Release|Any CPU
 		{E4C01A3F-D3C1-4639-A6A9-930E918843DD}.Release|x86.ActiveCfg = Release|Any CPU
 		{E4C01A3F-D3C1-4639-A6A9-930E918843DD}.Release|x86.Build.0 = Release|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Debug|x64.ActiveCfg = Debug|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Debug|x64.Build.0 = Debug|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Debug|x86.Build.0 = Debug|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x64.ActiveCfg = Release|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x64.Build.0 = Release|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x86.ActiveCfg = Release|Any CPU
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684}.Release|x86.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -1543,6 +1557,7 @@ Global
 		{FC2A1EB0-A116-4689-92B7-239B1DCCF4CA} = {E9E9CF3C-CE9B-4282-B2BB-97EFC3872798}
 		{74D21785-2FAB-4266-B7C4-E311EC8EE0DF} = {7260DED9-22A9-4E9D-92F4-5E8A4404DEAF}
 		{E4C01A3F-D3C1-4639-A6A9-930E918843DD} = {7260DED9-22A9-4E9D-92F4-5E8A4404DEAF}
+		{DE297C91-B3E9-4C6F-B74D-0AF9EFEBF684} = {A27FF193-195B-4474-8E6C-840B2E339373}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {CC3C47E1-AD1A-4619-9CD3-E08A0148E5CE}

+ 0 - 123
src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.Manual.cs

@@ -119,129 +119,6 @@ namespace Microsoft.AspNetCore.Components
     }
 }
 
-namespace Microsoft.AspNetCore.Components.Forms
-{
-    public partial class DataAnnotationsValidator : Microsoft.AspNetCore.Components.ComponentBase
-    {
-        public DataAnnotationsValidator() { }
-        protected override void OnInitialized() { }
-    }
-
-    public partial class EditForm : Microsoft.AspNetCore.Components.ComponentBase
-    {
-        public EditForm() { }
-        [Parameter(CaptureUnmatchedValues = true)]
-        public System.Collections.Generic.IReadOnlyDictionary<string, object> AdditionalAttributes { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.RenderFragment<Microsoft.AspNetCore.Components.Forms.EditContext> ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.Forms.EditContext EditContext { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public object Model { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.Forms.EditContext> OnInvalidSubmit { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.Forms.EditContext> OnSubmit { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.EventCallback<Microsoft.AspNetCore.Components.Forms.EditContext> OnValidSubmit { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override void OnParametersSet() { }
-    }
-
-    public abstract partial class InputBase<T> : Microsoft.AspNetCore.Components.ComponentBase
-    {
-        protected InputBase() { }
-        [Parameter(CaptureUnmatchedValues = true)]
-        public System.Collections.Generic.IReadOnlyDictionary<string, object> AdditionalAttributes { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected string CssClass { get { throw null; } }
-        protected T CurrentValue { get { throw null; } set { } }
-        protected string CurrentValueAsString { get { throw null; } set { } }
-        protected Microsoft.AspNetCore.Components.Forms.EditContext EditContext { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
-        protected string FieldClass { get { throw null; } }
-        protected Microsoft.AspNetCore.Components.Forms.FieldIdentifier FieldIdentifier { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public T Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.EventCallback<T> ValueChanged { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public System.Linq.Expressions.Expression<System.Func<T>> ValueExpression { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected virtual string FormatValueAsString(T value) { throw null; }
-        public override System.Threading.Tasks.Task SetParametersAsync(Microsoft.AspNetCore.Components.ParameterCollection parameters) { throw null; }
-        protected abstract bool TryParseValueFromString(string value, out T result, out string validationErrorMessage);
-    }
-
-    public partial class InputCheckbox : Microsoft.AspNetCore.Components.Forms.InputBase<bool>
-    {
-        public InputCheckbox() { }
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override bool TryParseValueFromString(string value, out bool result, out string validationErrorMessage) { throw null; }
-    }
-
-    public partial class InputDate<T> : Microsoft.AspNetCore.Components.Forms.InputBase<T>
-    {
-        public InputDate() { }
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public string ParsingErrorMessage { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override string FormatValueAsString(T value) { throw null; }
-        protected override bool TryParseValueFromString(string value, out T result, out string validationErrorMessage) { throw null; }
-    }
-
-    public partial class InputNumber<T> : Microsoft.AspNetCore.Components.Forms.InputBase<T>
-    {
-        public InputNumber() { }
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public string ParsingErrorMessage { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override bool TryParseValueFromString(string value, out T result, out string validationErrorMessage) { throw null; }
-    }
-
-    public partial class InputSelect<T> : Microsoft.AspNetCore.Components.Forms.InputBase<T>
-    {
-        public InputSelect() { }
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public Microsoft.AspNetCore.Components.RenderFragment ChildContent { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override bool TryParseValueFromString(string value, out T result, out string validationErrorMessage) { throw null; }
-    }
-
-    public partial class InputText : Microsoft.AspNetCore.Components.Forms.InputBase<string>
-    {
-        public InputText() { }
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage) { throw null; }
-    }
-
-    public partial class InputTextArea : Microsoft.AspNetCore.Components.Forms.InputBase<string>
-    {
-        public InputTextArea() { }
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override bool TryParseValueFromString(string value, out string result, out string validationErrorMessage) { throw null; }
-    }
-
-    public partial class ValidationMessage<T> : Microsoft.AspNetCore.Components.ComponentBase, System.IDisposable
-    {
-        public ValidationMessage() { }
-        [Parameter(CaptureUnmatchedValues = true)]
-        public System.Collections.Generic.IReadOnlyDictionary<string, object> AdditionalAttributes { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        [Microsoft.AspNetCore.Components.ParameterAttribute]
-        public System.Linq.Expressions.Expression<System.Func<T>> For { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override void OnParametersSet() { }
-        void System.IDisposable.Dispose() { }
-    }
-
-    public partial class ValidationSummary : Microsoft.AspNetCore.Components.ComponentBase, System.IDisposable
-    {
-        public ValidationSummary() { }
-        [Parameter(CaptureUnmatchedValues = true)]
-        public System.Collections.Generic.IReadOnlyDictionary<string, object> AdditionalAttributes { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } private set { throw null; }}
-        protected override void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
-        protected override void OnParametersSet() { }
-        void System.IDisposable.Dispose() { }
-    }
-}
-
 namespace Microsoft.AspNetCore.Components.Routing
 {
     public partial class NavLink : Microsoft.AspNetCore.Components.IComponent, System.IDisposable

+ 2 - 5
src/Components/Components/ref/Microsoft.AspNetCore.Components.netstandard2.0.cs

@@ -636,11 +636,6 @@ namespace Microsoft.AspNetCore.Components.Forms
         public static System.Collections.Generic.IEnumerable<string> GetValidationMessages(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
         public static bool IsModified(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression<System.Func<object>> accessor) { throw null; }
     }
-    public static partial class EditContextFieldClassExtensions
-    {
-        public static string FieldClass(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
-        public static string FieldClass<TField>(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression<System.Func<TField>> accessor) { throw null; }
-    }
     public sealed partial class FieldChangedEventArgs
     {
         internal FieldChangedEventArgs() { }
@@ -782,10 +777,12 @@ namespace Microsoft.AspNetCore.Components.RenderTree
         public void Clear() { }
         public void CloseComponent() { }
         public void CloseElement() { }
+        public void CloseRegion() { }
         public Microsoft.AspNetCore.Components.RenderTree.ArrayRange<Microsoft.AspNetCore.Components.RenderTree.RenderTreeFrame> GetFrames() { throw null; }
         public void OpenComponent(int sequence, System.Type componentType) { }
         public void OpenComponent<TComponent>(int sequence) where TComponent : Microsoft.AspNetCore.Components.IComponent { }
         public void OpenElement(int sequence, string elementName) { }
+        public void OpenRegion(int sequence) { }
         public void SetKey(object value) { }
         public void SetUpdatesAttributeName(string updatesAttributeName) { }
         void System.IDisposable.Dispose() { }

+ 1 - 1
src/Components/Components/src/Forms/DataAnnotationsValidator.cs

@@ -19,7 +19,7 @@ namespace Microsoft.AspNetCore.Components.Forms
             {
                 throw new InvalidOperationException($"{nameof(DataAnnotationsValidator)} requires a cascading " +
                     $"parameter of type {nameof(EditContext)}. For example, you can use {nameof(DataAnnotationsValidator)} " +
-                    $"inside an {nameof(EditForm)}.");
+                    $"inside an EditForm.");
             }
 
             CurrentEditContext.AddDataAnnotationsValidation();

+ 10 - 6
src/Components/Components/src/RenderTree/RenderTreeBuilder.cs

@@ -619,17 +619,21 @@ namespace Microsoft.AspNetCore.Components.RenderTree
             Append(RenderTreeFrame.ComponentReferenceCapture(sequence, componentReferenceCaptureAction, parentFrameIndexValue));
         }
 
-        // Internal for tests
-        // Not public because there's no current use case for user code defining regions arbitrarily.
-        // Currently the sole use case for regions is when appending a RenderFragment.
-        internal void OpenRegion(int sequence)
+        /// <summary>
+        /// Appends a frame representing a region of frames.
+        /// </summary>
+        /// <param name="sequence">An integer that represents the position of the instruction in the source code.</param>
+        public  void OpenRegion(int sequence)
         {
             _openElementIndices.Push(_entries.Count);
             Append(RenderTreeFrame.Region(sequence));
         }
 
-        // See above for why this is not public
-        internal void CloseRegion()
+        /// <summary>
+        /// Marks a previously appended region frame as closed. Calls to this method
+        /// must be balanced with calls to <see cref="OpenRegion(int)"/>.
+        /// </summary>
+        public void CloseRegion()
         {
             var indexOfEntryBeingClosed = _openElementIndices.Pop();
             ref var entry = ref _entries.Buffer[indexOfEntryBeingClosed];

+ 0 - 1
src/Components/Components/test/Microsoft.AspNetCore.Components.Tests.csproj

@@ -8,7 +8,6 @@
   <ItemGroup>
     <Reference Include="Microsoft.AspNetCore.Components" />
     <Reference Include="Microsoft.Extensions.DependencyInjection" />
-    <Reference Include="Microsoft.AspNetCore.Html.Abstractions" />
   </ItemGroup>
 
   <ItemGroup>

+ 3 - 0
src/Components/ComponentsNoDeps.slnf

@@ -9,6 +9,8 @@
       "Blazor\\Build\\src\\Microsoft.AspNetCore.Blazor.Build.csproj",
       "Blazor\\Build\\test\\Microsoft.AspNetCore.Blazor.Build.Tests.csproj",
       "Blazor\\DevServer\\src\\Microsoft.AspNetCore.Blazor.DevServer.csproj",
+      "Blazor\\Http\\src\\Microsoft.AspNetCore.Blazor.HttpClient.csproj",
+      "Blazor\\Http\\test\\Microsoft.AspNetCore.Blazor.HttpClient.Tests.csproj",
       "Blazor\\Server\\src\\Microsoft.AspNetCore.Blazor.Server.csproj",
       "Blazor\\Templates\\src\\Microsoft.AspNetCore.Blazor.Templates.csproj",
       "Blazor\\testassets\\HostedInAspNet.Client\\HostedInAspNet.Client.csproj",
@@ -18,6 +20,7 @@
       "Blazor\\testassets\\MonoSanity\\MonoSanity.csproj",
       "Blazor\\testassets\\StandaloneApp\\StandaloneApp.csproj",
       "Web\\src\\Microsoft.AspNetCore.Components.Web.csproj",
+      "Web\\test\\Microsoft.AspNetCore.Components.Web.Tests.csproj",
       "Components\\perf\\Microsoft.AspNetCore.Components.Performance.csproj",
       "Components\\src\\Microsoft.AspNetCore.Components.csproj",
       "Components\\test\\Microsoft.AspNetCore.Components.Tests.csproj",

+ 8 - 0
src/Components/Web/ref/Microsoft.AspNetCore.Components.Web.netstandard2.0.cs

@@ -1,6 +1,14 @@
 // Copyright (c) .NET Foundation. All rights reserved.
 // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
 
+namespace Microsoft.AspNetCore.Components.Forms
+{
+    public static partial class EditContextFieldClassExtensions
+    {
+        public static string FieldClass(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, in Microsoft.AspNetCore.Components.Forms.FieldIdentifier fieldIdentifier) { throw null; }
+        public static string FieldClass<TField>(this Microsoft.AspNetCore.Components.Forms.EditContext editContext, System.Linq.Expressions.Expression<System.Func<TField>> accessor) { throw null; }
+    }
+}
 namespace Microsoft.AspNetCore.Components.Web
 {
     public static partial class RendererRegistryEventDispatcher

+ 0 - 0
src/Components/Components/src/Forms/EditContextFieldClassExtensions.cs → src/Components/Web/src/Forms/EditContextFieldClassExtensions.cs


+ 0 - 0
src/Components/Components/src/Forms/EditForm.cs → src/Components/Web/src/Forms/EditForm.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputBase.cs → src/Components/Web/src/Forms/InputBase.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputCheckbox.cs → src/Components/Web/src/Forms/InputCheckbox.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputDate.cs → src/Components/Web/src/Forms/InputDate.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputNumber.cs → src/Components/Web/src/Forms/InputNumber.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputSelect.cs → src/Components/Web/src/Forms/InputSelect.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputText.cs → src/Components/Web/src/Forms/InputText.cs


+ 0 - 0
src/Components/Components/src/Forms/InputComponents/InputTextArea.cs → src/Components/Web/src/Forms/InputTextArea.cs


+ 0 - 0
src/Components/Components/src/Forms/ValidationMessage.cs → src/Components/Web/src/Forms/ValidationMessage.cs


+ 0 - 0
src/Components/Components/src/Forms/ValidationSummary.cs → src/Components/Web/src/Forms/ValidationSummary.cs


+ 1 - 0
src/Components/Web/src/Microsoft.AspNetCore.Components.Web.csproj

@@ -6,6 +6,7 @@
     <Description>Support for rendering ASP.NET Core components for browsers.</Description>
     <GenerateDocumentationFile>true</GenerateDocumentationFile>
     <IsShippingPackage>true</IsShippingPackage>
+    <RootNamespace>Microsoft.AspNetCore.Components</RootNamespace>
   </PropertyGroup>
 
   <ItemGroup>

+ 0 - 0
src/Components/Components/test/Forms/InputBaseTest.cs → src/Components/Web/test/Forms/InputBaseTest.cs


+ 19 - 0
src/Components/Web/test/Microsoft.AspNetCore.Components.Web.Tests.csproj

@@ -0,0 +1,19 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>netcoreapp3.0</TargetFramework>
+    <RootNamespace>Microsoft.AspNetCore.Components</RootNamespace>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Reference Include="Microsoft.AspNetCore.Components" />
+    <Reference Include="Microsoft.AspNetCore.Components.Web" />
+    <Reference Include="Microsoft.Extensions.DependencyInjection" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Compile Include="$(ComponentsSharedSourceRoot)test\**\*.cs" LinkBase="Helpers" />
+    <Compile Include="$(SharedSourceRoot)test\SkipOnHelixAttribute.cs" />
+  </ItemGroup>
+
+</Project>