Пример #1
0
      public async Task <bool> Equals(IVisualStudioProjectFile x, IVisualStudioProjectFile y, IMessageSink messageSink)
      {
          var areEqual = true;

          var generateDocumentationFileAreEqual = await this.CompareSettable(x.GenerateDocumentationFile, y.GenerateDocumentationFile, messageSink, nameof(x.GenerateDocumentationFile));

          areEqual &= generateDocumentationFileAreEqual;

          var isPackableAreEqual = await this.CompareSettable(x.IsPackable, y.IsPackable, messageSink, nameof(x.IsPackable));

          areEqual &= isPackableAreEqual;

          var languageVersionAreEqual = await this.CompareSettable(x.LanguageVersion, y.LanguageVersion, messageSink, nameof(x.LanguageVersion));

          areEqual &= languageVersionAreEqual;

          var noWarnAreEqual = await this.CompareSettable(x.NoWarn, y.NoWarn, messageSink, nameof(x.NoWarn));

          areEqual &= noWarnAreEqual;

          var outputTypeAreEqual = await this.CompareSettable(x.OutputType, y.OutputType, messageSink, nameof(x.OutputType));

          areEqual &= outputTypeAreEqual;

          var sdkAreEqual = await this.CompareSettable(x.SDK, y.SDK, messageSink, nameof(x.SDK));

          areEqual &= sdkAreEqual;

          var targetFrameworkAreEqual = await this.CompareSettable(x.TargetFramework, y.TargetFramework, messageSink, nameof(x.TargetFramework));

          areEqual &= targetFrameworkAreEqual;


          var packageReferenceComparisonMessageRepository = new InMemoryMessageRepository();

          var packageReferencesEqual = await x.PackageReferences.SequenceEqualAsync(y.PackageReferences, DefaultIPackageReferenceEqualityComparer.Instance, this.NowUtcProvider, packageReferenceComparisonMessageRepository, false);

          if (!packageReferencesEqual)
          {
              await messageSink.AddErrorMessageAsync(this.NowUtcProvider, "Package references not equal.");

              await messageSink.CopyFromAsync(packageReferenceComparisonMessageRepository);
          }
          areEqual &= packageReferencesEqual;

          var projectReferenceComparisonMessageRepository = new InMemoryMessageRepository();

          var projectReferencesEqual = await x.ProjectReferences.SequenceEqualAsync(y.ProjectReferences, DefaultProjectReferenceEqualityComparer.Instance, this.NowUtcProvider, projectReferenceComparisonMessageRepository);

          if (!projectReferencesEqual)
          {
              await messageSink.AddErrorMessageAsync(this.NowUtcProvider, "Project references not equal.");

              await messageSink.CopyFromAsync(packageReferenceComparisonMessageRepository);
          }
          areEqual &= projectReferencesEqual;

          return(areEqual);
      }
        public static async Task <bool> SetEqualAsync <T>(this IEnumerable <T> x, IEnumerable <T> y, IEqualityComparer <T> equalityComparer, INowUtcProvider nowUtcProvider, IMessageSink messageSink)
        {
            async Task MessageHandler(string message)
            {
                await messageSink.AddErrorMessageAsync(nowUtcProvider, message);
            }

            var result = await x.SetEqualAsync(y, equalityComparer, MessageHandler);

            return(result);
        }
        public static async Task <bool> SequenceEqualAsync <T>(this IEnumerable <T> x, IEnumerable <T> y, IEqualityComparer <T> equalityComparer, INowUtcProvider nowUtcProvider, IMessageSink messageSink, bool stopAtFirstElementDifference = true)
        {
            async Task MessageHandler(string message)
            {
                await messageSink.AddErrorMessageAsync(nowUtcProvider, message);
            }

            var result = await x.SequenceEqualAsync(y, equalityComparer, MessageHandler, stopAtFirstElementDifference);

            return(result);
        }
        private async Task ReportError(string message, IMessageSink messageSink)
        {
            var nowUtc = await this.NowUtcProvider.GetNowUtcAsync();

            await messageSink.AddErrorMessageAsync(nowUtc, message);

            if (this.VisualStudioProjectFileDeserializationSettings.ThrowAtErrorOccurrence)
            {
                throw new Exception(message);
            }
        }
        private async Task <bool> TargetFrameworkIsSet(ProjectFile projectFile, IMessageSink messageSink)
        {
            var result = projectFile.TargetFramework.IsSet;

            if (!result)
            {
                var message = "TargetFramework was not set.";
                await messageSink.AddErrorMessageAsync(this.NowUtcProvider, message);
            }

            return(result);
        }
Пример #6
0
      private async Task <bool> CompareSettable <T>(Settable <T> settableX, Settable <T> settableY, IMessageSink messageSink, string propertyName)
      {
          var areEqual = settableX == settableY;

          if (!areEqual)
          {
              var message = $"{propertyName} values are not equal:\nX:{settableX}\nY:{settableY}";

              await messageSink.AddErrorMessageAsync(this.NowUtcProvider, message);
          }

          return(areEqual);
      }
        private async Task ReportErrors(IEnumerable <string> messages, IMessageSink messageSink)
        {
            var nowUtc = await this.NowUtcProvider.GetNowUtcAsync();

            foreach (var message in messages)
            {
                await messageSink.AddErrorMessageAsync(nowUtc, message);
            }

            if (this.VisualStudioProjectFileDeserializationSettings.ThrowAtErrorOccurrence)
            {
                throw new Exception("There were errors.");
            }
        }
Пример #8
0
        private async Task ValidateProjectFileAsync(ProjectFile projectFile, IMessageSink messageSink)
        {
            var isValidProjectFile = await this.VisualStudioProjectFileValidator.Validate(projectFile, messageSink);

            if (!isValidProjectFile)
            {
                var timestampUtc = await this.NowUtcProvider.GetNowUtcAsync();

                await messageSink.AddErrorMessageAsync(timestampUtc, "Project file invalid.");

                if (this.VisualStudioProjectFileDeserializationSettings.ThrowIfInvalidProjectFile)
                {
                    throw new Exception("Invalid project file.");
                }
            }
        }