public void RequiresValidation() { string json = @"{ ""type"": ""AdaptiveCard"", ""version"": ""1.2"", ""body"": [ { ""type"": ""TextBlock"", ""text"": ""This element requires version 1.2"", ""requires"": { ""adaptiveCards"": ""1.2"", ""foobar"": ""2"" } }, { ""type"": ""TextBlock"", ""text"": ""This element has no explicit requirements"" } ] }"; var parseResult = AdaptiveCard.FromJson(json); var card = parseResult.Card; var textBlock = (AdaptiveTextBlock)card.Body[0]; var textBlockNoRequires = (AdaptiveTextBlock)card.Body[1]; AdaptiveFeatureRegistration featureRegistration = new AdaptiveFeatureRegistration(); featureRegistration.Set("foobar", "2"); Assert.IsTrue(textBlock.MeetsRequirements(featureRegistration)); Assert.IsTrue(textBlockNoRequires.MeetsRequirements(featureRegistration)); featureRegistration.Remove("foobar"); Assert.IsFalse(textBlock.MeetsRequirements(featureRegistration)); Assert.IsTrue(textBlockNoRequires.MeetsRequirements(featureRegistration)); featureRegistration.Set("foobar", "1.9.9.9"); Assert.IsFalse(textBlock.MeetsRequirements(featureRegistration)); Assert.IsTrue(textBlockNoRequires.MeetsRequirements(featureRegistration)); featureRegistration.Set("foobar", "99"); Assert.IsTrue(textBlock.MeetsRequirements(featureRegistration)); Assert.IsTrue(textBlockNoRequires.MeetsRequirements(featureRegistration)); }
public static async Task <RenderedTestResult> RenderCard(FileViewModel cardFile, FileViewModel hostConfigFile, Dictionary <string, IAdaptiveCardResourceResolver> resourceResolvers) { string error = null; string roundTrippedJsonString = null; FrameworkElement xaml = null; double cardWidth = 400; WeakReference weakRefCard = null; try { AdaptiveHostConfig hostConfig = AdaptiveHostConfig.FromJsonString(hostConfigFile.Contents).HostConfig; if (hostConfig == null) { error = "Parsing hostConfig failed"; } else { AdaptiveCard card = AdaptiveCard.FromJsonString(cardFile.Contents).AdaptiveCard; if (card == null) { error = "Parsing card failed"; } else { roundTrippedJsonString = card.ToJson().ToString(); card = AdaptiveCard.FromJsonString(roundTrippedJsonString).AdaptiveCard; AdaptiveFeatureRegistration featureRegistration = new AdaptiveFeatureRegistration(); featureRegistration.Set("acTest", "1.0"); var renderer = new AdaptiveCardRenderer() { HostConfig = hostConfig, FeatureRegistration = featureRegistration }; foreach (var resourceResolver in resourceResolvers) { renderer.ResourceResolvers.Set(resourceResolver.Key, resourceResolver.Value); } if (hostConfigFile.Name.Contains("windows-timeline")) { renderer.SetFixedDimensions(320, 180); cardWidth = 320; } else if (hostConfigFile.Name.Contains("windows-live-tile")) { renderer.SetFixedDimensions(310, 310); cardWidth = 310; } RenderedAdaptiveCard renderedCard = renderer.RenderAdaptiveCard(card); weakRefCard = new WeakReference(renderedCard); xaml = renderedCard.FrameworkElement as FrameworkElement; if (xaml == null) { error = "Rendering card failed"; } else { xaml = new Border() { Background = new SolidColorBrush(Colors.White), Child = xaml, IsHitTestVisible = false // Disable HitTest so that mouse pointer can't accidently hover over a button }; // The theme is important to set since it'll ensure buttons/inputs appear correctly if (hostConfigFile.Name.Contains("windows-notification")) { xaml.RequestedTheme = ElementTheme.Dark; } else { xaml.RequestedTheme = ElementTheme.Light; } } } } } catch (Exception ex) { error = ex.ToString(); } return(new RenderedTestResult { Error = error, RoundTrippedJSON = roundTrippedJsonString, Tree = xaml, CardWidth = cardWidth, WeakCard = weakRefCard }); }
public static async Task <RenderedTestResult> RenderCard(FileViewModel cardFile, FileViewModel hostConfigFile) { string error = null; string roundTrippedJsonString = null; FrameworkElement xaml = null; double cardWidth = 400; WeakReference weakRefCard = null; try { AdaptiveHostConfig hostConfig = null; if (hostConfigFile.Contents != null) { hostConfig = AdaptiveHostConfig.FromJsonString(hostConfigFile.Contents).HostConfig; if (hostConfig == null) { error = "Parsing hostConfig failed"; } } if (error == null) { AdaptiveCard card = AdaptiveCard.FromJsonString(cardFile.Contents).AdaptiveCard; if (card == null) { error = "Parsing card failed"; } else { roundTrippedJsonString = card.ToJson().ToString(); card = AdaptiveCard.FromJsonString(roundTrippedJsonString).AdaptiveCard; AdaptiveFeatureRegistration featureRegistration = new AdaptiveFeatureRegistration(); featureRegistration.Set("acTest", "1.0"); var renderer = new AdaptiveCardRenderer() { FeatureRegistration = featureRegistration }; if (hostConfig != null) { renderer.HostConfig = hostConfig; } renderer.ResourceResolvers.Set("symbol", new SampleResourceResolver()); if (hostConfigFile.Name.Contains(FileLoadHelpers.fixedNonInteractiveName)) { renderer.SetFixedDimensions(320, 180); cardWidth = 320; renderer.HostConfig.SupportsInteractivity = false; } RenderedAdaptiveCard renderedCard = renderer.RenderAdaptiveCard(card); weakRefCard = new WeakReference(renderedCard); xaml = renderedCard.FrameworkElement as FrameworkElement; if (xaml == null) { error = "Rendering card failed"; } else { xaml = new Border() { Background = new SolidColorBrush(Colors.White), Child = xaml, IsHitTestVisible = false // Disable HitTest so that mouse pointer can't accidently hover over a button }; // The theme is important to set since it'll ensure buttons/inputs appear correctly if (hostConfigFile.Name.Contains(FileLoadHelpers.testVarientHostConfigName)) { xaml.RequestedTheme = ElementTheme.Dark; } else { xaml.RequestedTheme = ElementTheme.Light; } } } } } catch (Exception ex) { error = ex.ToString(); } return(new RenderedTestResult { Error = error, RoundTrippedJSON = roundTrippedJsonString, Tree = xaml, CardWidth = cardWidth, WeakCard = weakRefCard }); }