Esempio n. 1
0
        private void TestResultViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            TestResultViewModel item = sender as TestResultViewModel;

            if (e.PropertyName == nameof(TestResultViewModel.Status))
            {
                Passed.Results.Remove(item);
                Failed.Results.Remove(item);
                PassedButSourceWasChanged.Results.Remove(item);
                New.Results.Remove(item);
                Leaked.Results.Remove(item);

                if (item.Status.IsPassingStatus() && item.Status.OriginalMatched)
                {
                    Passed.Results.Add(item);
                }
                else if (item.Status.IsPassingStatus() && !item.Status.OriginalMatched)
                {
                    PassedButSourceWasChanged.Results.Add(item);
                }
                else
                {
                    Failed.Results.Add(item);
                }
            }
        }
        private async Task <TestResultViewModel> TestCard(FileViewModel cardFile, FileViewModel hostConfigFile)
        {
            var renderResult = await RenderCard(cardFile, hostConfigFile);

            var result = await TestResultViewModel.CreateAsync(
                cardFile : cardFile,
                hostConfigFile : hostConfigFile,
                actualError : renderResult.Item1,
                actualImageFile : renderResult.Item2,
                expectedFolder : _expectedFolder,
                sourceHostConfigsFolder : _sourceHostConfigsFolder,
                sourceCardsFolder : _sourceCardsFolder);

            OnSingleTestCompleted?.Invoke(this, result.Status);
            return(result);
        }
Esempio n. 3
0
        private void TestResultViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            TestResultViewModel item = sender as TestResultViewModel;

            if (e.PropertyName == nameof(TestResultViewModel.Status))
            {
                Passed.Results.Remove(item);
                Failed.Results.Remove(item);
                FailedButSourceWasChanged.Results.Remove(item);
                New.Results.Remove(item);

                switch (item.Status)
                {
                case TestStatus.Passed:
                    Passed.Results.Add(item);
                    break;
                }
            }
        }
Esempio n. 4
0
        private async Task <TestResultViewModel> TestCard(FileViewModel cardFile, FileViewModel hostConfigFile)
        {
            Dictionary <string, IAdaptiveCardResourceResolver> resourceResolvers = new Dictionary <string, IAdaptiveCardResourceResolver>();

            resourceResolvers.Add("symbol", new SampleResourceResolver());

            var renderResult = await RenderCard(cardFile, hostConfigFile, resourceResolvers);

            var result = await TestResultViewModel.CreateAsync(
                cardFile : cardFile,
                hostConfigFile : hostConfigFile,
                renderedTestResult : renderResult.Item1,
                actualImageFile : renderResult.Item2,
                actualJsonFile : renderResult.Item3,
                expectedFolder : _expectedFolder,
                sourceHostConfigsFolder : _sourceHostConfigsFolder,
                sourceCardsFolder : _sourceCardsFolder);

            OnSingleTestCompleted?.Invoke(this, result.Status);
            return(result);
        }
        private async Task <TestResultViewModel> TestCard(FileViewModel cardFile, FileViewModel hostConfigFile)
        {
            Dictionary <string, IAdaptiveCardResourceResolver> resourceResolvers = new Dictionary <string, IAdaptiveCardResourceResolver>();

            resourceResolvers.Add("symbol", new SampleResourceResolver());

            uint reruns = 0;
            TestResultViewModel result = null;
            bool retryImage            = true;

            while (retryImage)
            {
                var renderResult = await RenderCard(cardFile, hostConfigFile, resourceResolvers);

                result = await TestResultViewModel.CreateAsync(
                    cardFile : cardFile,
                    hostConfigFile : hostConfigFile,
                    renderedTestResult : renderResult.Item1,
                    actualImageFile : renderResult.Item2,
                    actualJsonFile : renderResult.Item3,
                    expectedFolder : _expectedFolder,
                    sourceHostConfigsFolder : _sourceHostConfigsFolder,
                    sourceCardsFolder : _sourceCardsFolder);

                if (!result.Status.IsPassingStatus())
                {
                    // Retry if we failed on image matching for an unchanged card to allow for
                    // occasional differences in image rendering
                    retryImage = result.Status.OriginalMatched && !result.Status.ImageMatched && (reruns < 3);
                    reruns++;
                }
                else
                {
                    retryImage = false;
                }
            }

            OnSingleTestCompleted?.Invoke(this, result.Status);
            return(result);
        }
        public static async Task <TestResultViewModel> CreateAsync(
            FileViewModel cardFile,
            FileViewModel hostConfigFile,
            string actualError,
            StorageFile actualImageFile,
            StorageFolder expectedFolder,
            StorageFolder sourceHostConfigsFolder,
            StorageFolder sourceCardsFolder,
            UIElement xamlCard)
        {
            var answer = new TestResultViewModel()
            {
                CardName                          = cardFile.Name,
                CardFile                          = cardFile,
                XamlCard                          = xamlCard,
                HostConfigName                    = hostConfigFile.Name,
                HostConfigFile                    = hostConfigFile,
                ActualError                       = actualError,
                ActualImageFile                   = actualImageFile,
                _expectedFolder                   = expectedFolder,
                _sourceHostConfigsFolder          = sourceHostConfigsFolder,
                _sourceCardsFolder                = sourceCardsFolder,
                _expectedFileNameWithoutExtension = GetStrippedFileName(hostConfigFile) + "." + GetStrippedFileName(cardFile)
            };

            try
            {
                var storedInfo = await StoredTestResultInfo.DeserializeFromFileAsync(expectedFolder, answer._expectedFileNameWithoutExtension);

                if (storedInfo == null)
                {
                    answer.Status = TestStatus.New;
                }
                else
                {
                    answer._oldHostConfigHash = storedInfo.HostConfigHash;
                    answer._oldCardHash       = storedInfo.CardHash;

                    if (storedInfo.Error != null)
                    {
                        answer.ExpectedError = storedInfo.Error;
                    }
                    else
                    {
                        answer.ExpectedImageFile = await expectedFolder.GetFileAsync(answer._expectedFileNameWithoutExtension + ".png");
                    }
                }

                // If both had error, compare via the error
                if (answer.ExpectedError != null && answer.ActualError != null)
                {
                    if (answer.ExpectedError == answer.ActualError)
                    {
                        answer.Status = TestStatus.Passed;
                    }
                    else
                    {
                        answer.Status = TestStatus.Failed;
                    }
                }

                // If neither had error, compare via the image
                else if (answer.ExpectedImageFile != null && answer.ActualImageFile != null)
                {
                    byte[] oldBytes = await GetPixelDataBytesAsync(answer.ExpectedImageFile);

                    byte[] newBytes = await GetPixelDataBytesAsync(answer.ActualImageFile);

                    if (ImageBytesAreTheSame(oldBytes, newBytes))
                    {
                        answer.Status = TestStatus.Passed;
                    }
                    else
                    {
                        answer.Status = TestStatus.Failed;
                    }
                }

                // Otherwise one had image and one had error, so fail
                else
                {
                    answer.Status = TestStatus.Failed;
                }

                // See if the source chagned by checking
                // if the hashes have changed since the stored info
                if (storedInfo.HostConfigHash != hostConfigFile.Hash ||
                    storedInfo.CardHash != cardFile.Hash)
                {
                    answer.Status = (answer.Status == TestStatus.Failed) ?
                                    TestStatus.FailedButSourceWasChanged :
                                    TestStatus.PassedButSourceWasChanged;
                }
            }
            catch
            {
                // Any exceptions being thrown get reported as "New", typically this results from file
                // not found of an expected file, which means it genuinely is new
                answer.Status = TestStatus.New;
            }

            return(answer);
        }