Files
Garry Newman d95169d8fa Unit Test Cleanup (#5064)
* Move all unit tests to Engine/Tests
* Fix Margin.EdgeSubtract
* Fix Capsule.Contains
* EnvironmentVariables.Remove if it's null
* Fixed ray trace never returning startedsolid
* Fix HistoryList.Navigate on empty list
* Fix GameObject.WorldPosition accepting NaNs
* Fix flex: initial expanding to the wrong grow/shrink
* Translation.TryConvert shouldn't throw on invalid enum strings
* Skip sound file tests on machines with no audio device
2026-06-12 13:23:50 +01:00

1420 lines
50 KiB
C#

using Sandbox.UI;
namespace UITests;
[TestClass]
public class StyleSettingTest
{
[TestMethod]
public void SetWidth()
{
Styles styles = new Styles();
styles.Set( "width", "140px" );
Assert.IsTrue( styles.Width.HasValue );
Assert.AreEqual( 140, styles.Width.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.Width.Value.Unit );
styles = new Styles();
styles.Set( "width: 140px" );
Assert.IsTrue( styles.Width.HasValue );
Assert.AreEqual( 140, styles.Width.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.Width.Value.Unit );
styles = new Styles();
styles.Set( " width : 140px ; " );
Assert.IsTrue( styles.Width.HasValue );
Assert.AreEqual( 140, styles.Width.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.Width.Value.Unit );
}
[TestMethod]
public void SetHeight()
{
Styles styles = new Styles();
styles.Set( "height", "140px" );
Assert.IsTrue( styles.Height.HasValue );
Assert.AreEqual( 140, styles.Height.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.Height.Value.Unit );
}
[TestMethod]
public void SetDisplay()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "display", "flex" ) );
Assert.AreEqual( DisplayMode.Flex, styles.Display );
}
{
Styles styles = new Styles();
Assert.IsFalse( styles.Set( "display", "bullshit" ) );
Assert.AreEqual( null, styles.Display );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "display", "none" ) );
Assert.AreEqual( DisplayMode.None, styles.Display );
}
}
[TestMethod]
public void SetPosition()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "position", "absolute" ) );
Assert.AreEqual( PositionMode.Absolute, styles.Position );
}
{
Styles styles = new Styles();
Assert.IsFalse( styles.Set( "position", "bullshit" ) );
Assert.AreEqual( null, styles.Position );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "position", "relative" ) );
Assert.AreEqual( PositionMode.Relative, styles.Position );
}
}
[TestMethod]
public void SetOverflow()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "overflow", "visible" ) );
Assert.AreEqual( OverflowMode.Visible, styles.Overflow );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "overflow", "hidden" ) );
Assert.AreEqual( OverflowMode.Hidden, styles.Overflow );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "overflow", "scroll" ) );
Assert.AreEqual( OverflowMode.Scroll, styles.Overflow );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "overflow", "clip" ) );
Assert.AreEqual( OverflowMode.Clip, styles.Overflow );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "overflow", "clip-whole" ) );
Assert.AreEqual( OverflowMode.ClipWhole, styles.Overflow );
}
}
[TestMethod]
public void SetFlexGrow()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-grow", "1" ) );
Assert.AreEqual( 1.0f, styles.FlexGrow );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-grow", "2" ) );
Assert.AreEqual( 2.0f, styles.FlexGrow );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-grow", "0.5" ) );
Assert.AreEqual( 0.5f, styles.FlexGrow );
}
}
[TestMethod]
public void SetFlexShrink()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-shrink", "1" ) );
Assert.AreEqual( 1.0f, styles.FlexShrink );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-shrink", "2" ) );
Assert.AreEqual( 2.0f, styles.FlexShrink );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-shrink", "0.5" ) );
Assert.AreEqual( 0.5f, styles.FlexShrink );
}
}
[TestMethod]
public void SetFlexWrap()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-wrap", "wrap" ) );
Assert.AreEqual( Wrap.Wrap, styles.FlexWrap );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-wrap", "nowrap" ) );
Assert.AreEqual( Wrap.NoWrap, styles.FlexWrap );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-wrap", "wrap-reverse" ) );
Assert.AreEqual( Wrap.WrapReverse, styles.FlexWrap );
}
}
[TestMethod]
public void SetJustifyContent()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "justify-content", "center" ) );
Assert.AreEqual( Justify.Center, styles.JustifyContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "justify-content", "flex-end" ) );
Assert.AreEqual( Justify.FlexEnd, styles.JustifyContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "justify-content", "flex-start" ) );
Assert.AreEqual( Justify.FlexStart, styles.JustifyContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "justify-content", "space-around" ) );
Assert.AreEqual( Justify.SpaceAround, styles.JustifyContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "justify-content", "space-between" ) );
Assert.AreEqual( Justify.SpaceBetween, styles.JustifyContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "justify-content", "space-evenly" ) );
Assert.AreEqual( Justify.SpaceEvenly, styles.JustifyContent );
}
}
[TestMethod]
public void SetAlignContent()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-content", "auto" ) );
Assert.AreEqual( Align.Auto, styles.AlignContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-content", "flex-start" ) );
Assert.AreEqual( Align.FlexStart, styles.AlignContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-content", "flex-end" ) );
Assert.AreEqual( Align.FlexEnd, styles.AlignContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-content", "stretch" ) );
Assert.AreEqual( Align.Stretch, styles.AlignContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-content", "space-between" ) );
Assert.AreEqual( Align.SpaceBetween, styles.AlignContent );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-content", "space-around" ) );
Assert.AreEqual( Align.SpaceAround, styles.AlignContent );
}
}
[TestMethod]
public void SetAlignItems()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-items", "auto" ) );
Assert.AreEqual( Align.Auto, styles.AlignItems );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-items", "flex-start" ) );
Assert.AreEqual( Align.FlexStart, styles.AlignItems );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-items", "flex-end" ) );
Assert.AreEqual( Align.FlexEnd, styles.AlignItems );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-items", "center" ) );
Assert.AreEqual( Align.Center, styles.AlignItems );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-items", "baseline" ) );
Assert.AreEqual( Align.Baseline, styles.AlignItems );
}
}
[TestMethod]
public void SetAlignSelf()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-self", "auto" ) );
Assert.AreEqual( Align.Auto, styles.AlignSelf );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-self", "flex-start" ) );
Assert.AreEqual( Align.FlexStart, styles.AlignSelf );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-self", "flex-end" ) );
Assert.AreEqual( Align.FlexEnd, styles.AlignSelf );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-self", "center" ) );
Assert.AreEqual( Align.Center, styles.AlignSelf );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "align-self", "baseline" ) );
Assert.AreEqual( Align.Baseline, styles.AlignSelf );
}
}
[TestMethod]
public void SetAspectRatio()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "aspect-ratio", "1" ) );
Assert.AreEqual( 1.0f, styles.AspectRatio );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "aspect-ratio", "2" ) );
Assert.AreEqual( 2.0f, styles.AspectRatio );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "aspect-ratio", "0.1" ) );
Assert.AreEqual( 0.1f, styles.AspectRatio );
}
}
[TestMethod]
public void SetFlexDirection()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-direction", "row" ) );
Assert.AreEqual( FlexDirection.Row, styles.FlexDirection );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-direction", "column" ) );
Assert.AreEqual( FlexDirection.Column, styles.FlexDirection );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-direction", "row-reverse" ) );
Assert.AreEqual( FlexDirection.RowReverse, styles.FlexDirection );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "flex-direction", "column-reverse" ) );
Assert.AreEqual( FlexDirection.ColumnReverse, styles.FlexDirection );
}
}
[TestMethod]
public void SetPadding()
{
Styles styles = new Styles();
styles.Set( "padding", "10px" );
Assert.IsTrue( styles.PaddingLeft.HasValue );
Assert.IsTrue( styles.PaddingRight.HasValue );
Assert.IsTrue( styles.PaddingTop.HasValue );
Assert.IsTrue( styles.PaddingBottom.HasValue );
Assert.AreEqual( 10, styles.PaddingLeft.Value.Value );
Assert.AreEqual( 10, styles.PaddingRight.Value.Value );
Assert.AreEqual( 10, styles.PaddingTop.Value.Value );
Assert.AreEqual( 10, styles.PaddingBottom.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingLeft.Value.Unit );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingRight.Value.Unit );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingTop.Value.Unit );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingBottom.Value.Unit );
styles = new Styles();
styles.Set( "padding", "10px 20px" );
Assert.AreEqual( 20, styles.PaddingLeft.Value.Value );
Assert.AreEqual( 20, styles.PaddingRight.Value.Value );
Assert.AreEqual( 10, styles.PaddingTop.Value.Value );
Assert.AreEqual( 10, styles.PaddingBottom.Value.Value );
styles = new Styles();
styles.Set( "padding", "10px 20px 5px" );
Assert.AreEqual( 20, styles.PaddingLeft.Value.Value );
Assert.AreEqual( 20, styles.PaddingRight.Value.Value );
Assert.AreEqual( 10, styles.PaddingTop.Value.Value );
Assert.AreEqual( 5, styles.PaddingBottom.Value.Value );
styles = new Styles();
styles.Set( "padding", "1px 2px 3px 4px" );
Assert.AreEqual( 1, styles.PaddingTop.Value.Value );
Assert.AreEqual( 2, styles.PaddingRight.Value.Value );
Assert.AreEqual( 3, styles.PaddingBottom.Value.Value );
Assert.AreEqual( 4, styles.PaddingLeft.Value.Value );
styles = new Styles();
styles.Set( "padding", "0 2px 0 4px" );
Assert.AreEqual( 0, styles.PaddingTop.Value.Value );
Assert.AreEqual( 2, styles.PaddingRight.Value.Value );
Assert.AreEqual( 0, styles.PaddingBottom.Value.Value );
Assert.AreEqual( 4, styles.PaddingLeft.Value.Value );
}
[TestMethod]
public void SetPaddingLeft()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "padding-left", "10px" ) );
Assert.IsTrue( styles.PaddingLeft.HasValue );
Assert.AreEqual( 10, styles.PaddingLeft.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingLeft.Value.Unit );
}
[TestMethod]
public void SetPaddingTop()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "padding-top", "10px" ) );
Assert.IsTrue( styles.PaddingTop.HasValue );
Assert.AreEqual( 10, styles.PaddingTop.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingTop.Value.Unit );
}
[TestMethod]
public void SetPaddingRight()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "padding-right", "10px" ) );
Assert.IsTrue( styles.PaddingRight.HasValue );
Assert.AreEqual( 10, styles.PaddingRight.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingRight.Value.Unit );
}
[TestMethod]
public void SetPaddingBottom()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "padding-bottom", "10px" ) );
Assert.IsTrue( styles.PaddingBottom.HasValue );
Assert.AreEqual( 10, styles.PaddingBottom.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.PaddingBottom.Value.Unit );
}
[TestMethod]
public void SetMargin()
{
Styles styles = new Styles();
styles.Set( "margin", "10px" );
Assert.IsTrue( styles.MarginLeft.HasValue );
Assert.IsTrue( styles.MarginRight.HasValue );
Assert.IsTrue( styles.MarginTop.HasValue );
Assert.IsTrue( styles.MarginBottom.HasValue );
Assert.AreEqual( 10, styles.MarginLeft.Value.Value );
Assert.AreEqual( 10, styles.MarginRight.Value.Value );
Assert.AreEqual( 10, styles.MarginTop.Value.Value );
Assert.AreEqual( 10, styles.MarginBottom.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginLeft.Value.Unit );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginRight.Value.Unit );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginTop.Value.Unit );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginBottom.Value.Unit );
styles = new Styles();
styles.Set( "margin", "10px 20px" );
Assert.AreEqual( 20, styles.MarginLeft.Value.Value );
Assert.AreEqual( 20, styles.MarginRight.Value.Value );
Assert.AreEqual( 10, styles.MarginTop.Value.Value );
Assert.AreEqual( 10, styles.MarginBottom.Value.Value );
styles = new Styles();
styles.Set( "margin", "10px 20px 30px" );
Assert.AreEqual( 20, styles.MarginLeft.Value.Value );
Assert.AreEqual( 20, styles.MarginRight.Value.Value );
Assert.AreEqual( 10, styles.MarginTop.Value.Value );
Assert.AreEqual( 30, styles.MarginBottom.Value.Value );
styles = new Styles();
styles.Set( "margin", "10px 20px 30px 40px" );
Assert.AreEqual( 10, styles.MarginTop.Value.Value );
Assert.AreEqual( 20, styles.MarginRight.Value.Value );
Assert.AreEqual( 30, styles.MarginBottom.Value.Value );
Assert.AreEqual( 40, styles.MarginLeft.Value.Value );
}
[TestMethod]
public void SetMarginLeft()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "margin-left", "10px" ) );
Assert.IsTrue( styles.MarginLeft.HasValue );
Assert.AreEqual( 10, styles.MarginLeft.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginLeft.Value.Unit );
}
[TestMethod]
public void SetMarginTop()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "margin-top", "10px" ) );
Assert.IsTrue( styles.MarginTop.HasValue );
Assert.AreEqual( 10, styles.MarginTop.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginTop.Value.Unit );
}
[TestMethod]
public void SetMarginRight()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "margin-right", "10px" ) );
Assert.IsTrue( styles.MarginRight.HasValue );
Assert.AreEqual( 10, styles.MarginRight.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginRight.Value.Unit );
}
[TestMethod]
public void SetMarginBottom()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "margin-bottom", "10px" ) );
Assert.IsTrue( styles.MarginBottom.HasValue );
Assert.AreEqual( 10, styles.MarginBottom.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.MarginBottom.Value.Unit );
}
[TestMethod]
public void SetBackgroundColor()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "background-color", "#f0f0" ) );
Assert.IsTrue( styles.BackgroundColor.HasValue );
Assert.AreEqual( 1.0f, styles.BackgroundColor.Value.r );
Assert.AreEqual( 0.0f, styles.BackgroundColor.Value.g );
Assert.AreEqual( 1.0f, styles.BackgroundColor.Value.b );
Assert.AreEqual( 0.0f, styles.BackgroundColor.Value.a );
}
[TestMethod]
public void SetBackgroundShorthandColorClearsImage()
{
// A color-only background must clear a previously-set image. (url() stays lazy so we never need a graphics device.)
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "background", "url( /ui/test.png )" ) );
var imageLazy = styles._backgroundImage;
Assert.IsNotNull( imageLazy );
Assert.IsTrue( styles.Set( "background", "#ff0000" ) );
Assert.IsNotNull( styles._backgroundImage );
Assert.AreNotSame( imageLazy, styles._backgroundImage );
Assert.IsTrue( styles.BackgroundColor.HasValue );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BackgroundColor.Value );
}
[TestMethod]
public void BackgroundColorRuleStompsImageFromLowerPriorityRule()
{
// A higher-priority color rule must stomp a lower-priority image rule through the cascade merge.
var imageRule = new Styles();
Assert.IsTrue( imageRule.Set( "background", "url( /ui/test.png )" ) );
var colorRule = new Styles();
Assert.IsTrue( colorRule.Set( "background", "#ff0000" ) );
var final = new Styles();
final.Add( imageRule );
final.Add( colorRule );
Assert.AreSame( colorRule._backgroundImage, final._backgroundImage );
Assert.AreNotSame( imageRule._backgroundImage, final._backgroundImage );
Assert.IsTrue( final.BackgroundColor.HasValue );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), final.BackgroundColor.Value );
}
[TestMethod]
public void SetColor()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "color", "#f0f0" ) );
Assert.IsTrue( styles.FontColor.HasValue );
Assert.AreEqual( 1.0f, styles.FontColor.Value.r );
Assert.AreEqual( 0.0f, styles.FontColor.Value.g );
Assert.AreEqual( 1.0f, styles.FontColor.Value.b );
Assert.AreEqual( 0.0f, styles.FontColor.Value.a );
}
[TestMethod]
public void SetFontSize()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "font-size", "20px" ) );
Assert.IsTrue( styles.FontSize.HasValue );
Assert.AreEqual( 20, styles.FontSize.Value );
}
[TestMethod]
public void SetFontWeight()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "font-weight", "500" ) );
Assert.IsTrue( styles.FontWeight.HasValue );
Assert.AreEqual( 500, styles.FontWeight.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "font-weight", "normal" ) );
Assert.IsTrue( styles.FontWeight.HasValue );
Assert.AreEqual( 400, styles.FontWeight.Value );
}
[TestMethod]
public void SetTransition()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "width 2s ease-in-out .5s" ) );
Assert.IsNotNull( styles.Transitions );
Assert.AreEqual( 1, styles.Transitions.List.Count );
Assert.AreEqual( "width", styles.Transitions.List[0].Property );
Assert.AreEqual( 2000, styles.Transitions.List[0].Duration );
Assert.AreEqual( "ease-in-out", styles.Transitions.List[0].TimingFunction );
Assert.AreEqual( 500, styles.Transitions.List[0].Delay );
styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "width 10ms" ) );
Assert.IsNotNull( styles.Transitions );
Assert.AreEqual( 1, styles.Transitions.List.Count );
Assert.AreEqual( "width", styles.Transitions.List[0].Property );
Assert.AreEqual( 10, styles.Transitions.List[0].Duration );
// Each property has an initial value, defined in the property's definition table
// https://w3c.github.io/csswg-drafts/css-transitions/#transition-timing-function-property
Assert.AreEqual( "ease", styles.Transitions.List[0].TimingFunction );
Assert.AreEqual( 0, styles.Transitions.List[0].Delay.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "width 10ms 2s ease-out, height 2s ease-in" ) );
Assert.IsNotNull( styles.Transitions );
Assert.AreEqual( 2, styles.Transitions.List.Count );
Assert.AreEqual( "width", styles.Transitions.List[0].Property );
Assert.AreEqual( 10, styles.Transitions.List[0].Duration );
Assert.AreEqual( "ease-out", styles.Transitions.List[0].TimingFunction );
Assert.AreEqual( 2000, styles.Transitions.List[0].Delay );
Assert.AreEqual( "height", styles.Transitions.List[1].Property );
Assert.AreEqual( 2000, styles.Transitions.List[1].Duration );
Assert.AreEqual( 0, styles.Transitions.List[1].Delay.Value );
Assert.AreEqual( "ease-in", styles.Transitions.List[1].TimingFunction );
}
[TestMethod]
public void SetTransitionFunctions()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "transform 350ms cubic-bezier(0.16, 1, 0.3, 1)" ) );
Assert.IsNotNull( styles.Transitions );
Assert.AreEqual( 1, styles.Transitions.List.Count );
Assert.AreEqual( "transform", styles.Transitions.List[0].Property );
Assert.AreEqual( 350, styles.Transitions.List[0].Duration );
Assert.AreEqual( "cubic-bezier(0.16,1,0.3,1)", styles.Transitions.List[0].TimingFunction.Replace( " ", "" ) );
styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "transform 350ms cubic-bezier( 0.16, 1, 0.3, 1 )" ) );
Assert.AreEqual( 1, styles.Transitions.List.Count );
Assert.IsTrue( styles.Transitions.List[0].TimingFunction.StartsWith( "cubic-bezier" ) );
Assert.IsTrue( styles.Transitions.List[0].TimingFunction.EndsWith( ")" ) );
styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "transform 350ms cubic-bezier(0.16, 1, 0.3, 1), opacity 250ms ease-out" ) );
Assert.AreEqual( 2, styles.Transitions.List.Count );
Assert.AreEqual( "transform", styles.Transitions.List[0].Property );
Assert.AreEqual( 350, styles.Transitions.List[0].Duration );
Assert.IsTrue( styles.Transitions.List[0].TimingFunction.StartsWith( "cubic-bezier" ) );
Assert.AreEqual( "opacity", styles.Transitions.List[1].Property );
Assert.AreEqual( 250, styles.Transitions.List[1].Duration );
Assert.AreEqual( "ease-out", styles.Transitions.List[1].TimingFunction );
styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "width 1s steps(4, end), height 500ms ease" ) );
Assert.AreEqual( 2, styles.Transitions.List.Count );
Assert.AreEqual( "width", styles.Transitions.List[0].Property );
Assert.AreEqual( 1000, styles.Transitions.List[0].Duration );
Assert.IsTrue( styles.Transitions.List[0].TimingFunction.StartsWith( "steps" ) );
Assert.AreEqual( "height", styles.Transitions.List[1].Property );
styles = new Styles();
Assert.IsTrue( styles.Set( "transition", "width 1s ease," ) );
Assert.AreEqual( 1, styles.Transitions.List.Count );
Assert.AreEqual( "width", styles.Transitions.List[0].Property );
}
[TestMethod]
public void SetBorderRadius()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-radius", "123px" ) );
Assert.IsTrue( styles.BorderTopLeftRadius.HasValue );
Assert.IsTrue( styles.BorderTopRightRadius.HasValue );
Assert.IsTrue( styles.BorderBottomLeftRadius.HasValue );
Assert.IsTrue( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 123, styles.BorderTopLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopLeftRadius.Value.Unit );
Assert.AreEqual( 123, styles.BorderTopRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopRightRadius.Value.Unit );
Assert.AreEqual( 123, styles.BorderBottomLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomLeftRadius.Value.Unit );
Assert.AreEqual( 123, styles.BorderBottomRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomRightRadius.Value.Unit );
styles = new Styles();
Assert.IsTrue( styles.Set( "border-radius", "10px 20px 30px 40px" ) );
Assert.IsTrue( styles.BorderTopLeftRadius.HasValue );
Assert.IsTrue( styles.BorderTopRightRadius.HasValue );
Assert.IsTrue( styles.BorderBottomLeftRadius.HasValue );
Assert.IsTrue( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 10, styles.BorderTopLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopLeftRadius.Value.Unit );
Assert.AreEqual( 20, styles.BorderTopRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopRightRadius.Value.Unit );
Assert.AreEqual( 30, styles.BorderBottomRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomRightRadius.Value.Unit );
Assert.AreEqual( 40, styles.BorderBottomLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomLeftRadius.Value.Unit );
styles = new Styles();
Assert.IsTrue( styles.Set( "border-radius", "10px 20px" ) );
Assert.IsTrue( styles.BorderTopLeftRadius.HasValue );
Assert.IsTrue( styles.BorderTopRightRadius.HasValue );
Assert.IsTrue( styles.BorderBottomLeftRadius.HasValue );
Assert.IsTrue( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 10, styles.BorderTopLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopLeftRadius.Value.Unit );
Assert.AreEqual( 20, styles.BorderTopRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopRightRadius.Value.Unit );
Assert.AreEqual( 10, styles.BorderBottomRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomRightRadius.Value.Unit );
Assert.AreEqual( 20, styles.BorderBottomLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomLeftRadius.Value.Unit );
styles = new Styles();
Assert.IsTrue( styles.Set( "border-radius", "10px 0 30px 40px" ) );
Assert.IsTrue( styles.BorderTopLeftRadius.HasValue );
Assert.IsTrue( styles.BorderTopRightRadius.HasValue );
Assert.IsTrue( styles.BorderBottomLeftRadius.HasValue );
Assert.IsTrue( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 10, styles.BorderTopLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopLeftRadius.Value.Unit );
Assert.AreEqual( 0, styles.BorderTopRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopRightRadius.Value.Unit );
Assert.AreEqual( 30, styles.BorderBottomRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomRightRadius.Value.Unit );
Assert.AreEqual( 40, styles.BorderBottomLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomLeftRadius.Value.Unit );
}
[TestMethod]
public void SetBorderTopLeftRadius()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-top-left-radius", "123px" ) );
Assert.IsTrue( styles.BorderTopLeftRadius.HasValue );
Assert.IsFalse( styles.BorderTopRightRadius.HasValue );
Assert.IsFalse( styles.BorderBottomLeftRadius.HasValue );
Assert.IsFalse( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 123, styles.BorderTopLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopLeftRadius.Value.Unit );
}
[TestMethod]
public void SetBorderTopRightRadius()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-top-right-radius", "123px" ) );
Assert.IsFalse( styles.BorderTopLeftRadius.HasValue );
Assert.IsTrue( styles.BorderTopRightRadius.HasValue );
Assert.IsFalse( styles.BorderBottomLeftRadius.HasValue );
Assert.IsFalse( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 123, styles.BorderTopRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopRightRadius.Value.Unit );
}
[TestMethod]
public void SetBorderBottomLeftRadius()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-bottom-left-radius", "123px" ) );
Assert.IsFalse( styles.BorderTopLeftRadius.HasValue );
Assert.IsFalse( styles.BorderTopRightRadius.HasValue );
Assert.IsTrue( styles.BorderBottomLeftRadius.HasValue );
Assert.IsFalse( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 123, styles.BorderBottomLeftRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomLeftRadius.Value.Unit );
}
[TestMethod]
public void SetBorderBottomRightRadius()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-bottom-right-radius", "123px" ) );
Assert.IsFalse( styles.BorderTopLeftRadius.HasValue );
Assert.IsFalse( styles.BorderTopRightRadius.HasValue );
Assert.IsFalse( styles.BorderBottomLeftRadius.HasValue );
Assert.IsTrue( styles.BorderBottomRightRadius.HasValue );
Assert.AreEqual( 123, styles.BorderBottomRightRadius.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomRightRadius.Value.Unit );
}
[TestMethod]
public void SetBorderLeftWidth()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-left-width", "10px" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderLeftWidth.Value.Unit );
}
[TestMethod]
public void SetBorderRightWidth()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-right-width", "10px" ) );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.AreEqual( 10, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderRightWidth.Value.Unit );
}
[TestMethod]
public void SetBorderTopWidth()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-top-width", "10px" ) );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.AreEqual( 10, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderTopWidth.Value.Unit );
}
[TestMethod]
public void SetBorderImage()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-image", "url( /ui/border.png ) 50 fill stretch" ) );
// The url() stays a lazy texture - only the parsed keywords and slice are asserted here.
Assert.AreEqual( BorderImageRepeat.Stretch, styles.BorderImageRepeat );
Assert.AreEqual( BorderImageFill.Filled, styles.BorderImageFill );
// A single slice value applies to all four sides.
Assert.IsTrue( styles.BorderImageWidthTop.HasValue );
Assert.AreEqual( 50, styles.BorderImageWidthTop.Value.Value );
Assert.AreEqual( 50, styles.BorderImageWidthRight.Value.Value );
Assert.AreEqual( 50, styles.BorderImageWidthBottom.Value.Value );
Assert.AreEqual( 50, styles.BorderImageWidthLeft.Value.Value );
}
[TestMethod]
public void SetBorderBottomWidth()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-bottom-width", "10px" ) );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.AreEqual( 10, styles.BorderBottomWidth.Value.Value );
Assert.AreEqual( LengthUnit.Pixels, styles.BorderBottomWidth.Value.Unit );
}
[TestMethod]
public void SetBorder()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border", "10px solid red" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsTrue( styles.BorderTopColor.HasValue );
Assert.IsTrue( styles.BorderRightColor.HasValue );
Assert.IsTrue( styles.BorderBottomColor.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderBottomWidth.Value.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderLeftColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderTopColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderRightColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderBottomColor.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "solid 10px red" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsTrue( styles.BorderTopColor.HasValue );
Assert.IsTrue( styles.BorderRightColor.HasValue );
Assert.IsTrue( styles.BorderBottomColor.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderBottomWidth.Value.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderLeftColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderTopColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderRightColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderBottomColor.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "10px red" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsTrue( styles.BorderTopColor.HasValue );
Assert.IsTrue( styles.BorderRightColor.HasValue );
Assert.IsTrue( styles.BorderBottomColor.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderBottomWidth.Value.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderLeftColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderTopColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderRightColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderBottomColor.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "10px" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.IsFalse( styles.BorderLeftColor.HasValue );
Assert.IsFalse( styles.BorderTopColor.HasValue );
Assert.IsFalse( styles.BorderRightColor.HasValue );
Assert.IsFalse( styles.BorderBottomColor.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderBottomWidth.Value.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "red" ) );
Assert.IsFalse( styles.BorderLeftWidth.HasValue );
Assert.IsFalse( styles.BorderTopWidth.HasValue );
Assert.IsFalse( styles.BorderRightWidth.HasValue );
Assert.IsFalse( styles.BorderBottomWidth.HasValue );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsTrue( styles.BorderTopColor.HasValue );
Assert.IsTrue( styles.BorderRightColor.HasValue );
Assert.IsTrue( styles.BorderBottomColor.HasValue );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderLeftColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderTopColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderRightColor.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderBottomColor.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "10px solid rgba( 0, 0, 0, 0.1 )" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsTrue( styles.BorderTopColor.HasValue );
Assert.IsTrue( styles.BorderRightColor.HasValue );
Assert.IsTrue( styles.BorderBottomColor.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( 10, styles.BorderBottomWidth.Value.Value );
Assert.AreEqual( new Color( 0, 0, 0, 0.1f ), styles.BorderLeftColor.Value );
Assert.AreEqual( new Color( 0, 0, 0, 0.1f ), styles.BorderTopColor.Value );
Assert.AreEqual( new Color( 0, 0, 0, 0.1f ), styles.BorderRightColor.Value );
Assert.AreEqual( new Color( 0, 0, 0, 0.1f ), styles.BorderBottomColor.Value );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "10px rgba( 0, 0, 0, 0.1 )" ) );
Assert.IsTrue( styles.Set( "border", "none" ) );
Assert.AreEqual( 0.0f, styles.BorderLeftWidth );
Assert.AreEqual( 0.0f, styles.BorderTopWidth );
Assert.AreEqual( 0.0f, styles.BorderRightWidth );
Assert.AreEqual( 0.0f, styles.BorderBottomWidth );
styles = new Styles();
Assert.IsTrue( styles.Set( "border", "10px rgba( 0, 0, 0, 0.1 )" ) );
Assert.IsTrue( styles.Set( "border", "0" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsTrue( styles.BorderTopWidth.HasValue );
Assert.IsTrue( styles.BorderRightWidth.HasValue );
Assert.IsTrue( styles.BorderBottomWidth.HasValue );
Assert.AreEqual( 0, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( 0, styles.BorderTopWidth.Value.Value );
Assert.AreEqual( 0, styles.BorderRightWidth.Value.Value );
Assert.AreEqual( 0, styles.BorderBottomWidth.Value.Value );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsTrue( styles.BorderTopColor.HasValue );
Assert.IsTrue( styles.BorderRightColor.HasValue );
Assert.IsTrue( styles.BorderBottomColor.HasValue );
}
[TestMethod]
public void SetBorderLeft()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "border-left", "10px solid red" ) );
Assert.IsTrue( styles.BorderLeftWidth.HasValue );
Assert.IsFalse( styles.BorderTopWidth.HasValue );
Assert.IsFalse( styles.BorderRightWidth.HasValue );
Assert.IsFalse( styles.BorderBottomWidth.HasValue );
Assert.IsTrue( styles.BorderLeftColor.HasValue );
Assert.IsFalse( styles.BorderTopColor.HasValue );
Assert.IsFalse( styles.BorderRightColor.HasValue );
Assert.IsFalse( styles.BorderBottomColor.HasValue );
Assert.AreEqual( 10, styles.BorderLeftWidth.Value.Value );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BorderLeftColor.Value );
}
[TestMethod]
public void SetBoxShadow()
{
Styles styles = new Styles();
styles.Set( "box-shadow", "10px 20px red" );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
styles = new Styles();
styles.Set( "box-shadow", "10px 20px 30px red" );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 30, styles.BoxShadow[0].Blur );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
styles = new Styles();
styles.Set( "box-shadow", "10px 20px 30px 40px red" );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 30, styles.BoxShadow[0].Blur );
Assert.AreEqual( 40, styles.BoxShadow[0].Spread );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
styles = new Styles();
styles.Set( "box-shadow", "10px 0 30px 40px red" );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 0, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 30, styles.BoxShadow[0].Blur );
Assert.AreEqual( 40, styles.BoxShadow[0].Spread );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
styles.Set( "box-shadow", "10px 0 30px 40px red inset" );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 0, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 30, styles.BoxShadow[0].Blur );
Assert.AreEqual( 40, styles.BoxShadow[0].Spread );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
}
[TestMethod]
public void SetBoxShadowMultiple()
{
Styles styles = new Styles();
styles.Set( "box-shadow", "10px 20px red, 5px 10px black" );
Assert.AreEqual( 2, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
Assert.AreEqual( 5, styles.BoxShadow[1].OffsetX );
Assert.AreEqual( 10, styles.BoxShadow[1].OffsetY );
Assert.AreEqual( new Color( 0, 0, 0, 1 ), styles.BoxShadow[1].Color );
styles.Set( "box-shadow", "1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black, 1px 1px black" );
Assert.AreEqual( 10, styles.BoxShadow.Count );
}
[TestMethod]
public void SetBoxShadowLeadingInset()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow", "inset 10px 20px 30px 40px red" ) );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 30, styles.BoxShadow[0].Blur );
Assert.AreEqual( 40, styles.BoxShadow[0].Spread );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
// Leading inset, three lengths, no spread
styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow", "inset 0 2px 6px rgba( 0, 0, 0, 0.7 )" ) );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( 0, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 2, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 6, styles.BoxShadow[0].Blur );
Assert.AreEqual( new Color( 0, 0, 0, 0.7f ), styles.BoxShadow[0].Color );
// Leading inset, two lengths
styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow", "inset 0 1px 0 rgba( 0, 0, 0, 0.5 )" ) );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( 0, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 1, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 0, styles.BoxShadow[0].Blur );
Assert.AreEqual( new Color( 0, 0, 0, 0.5f ), styles.BoxShadow[0].Color );
}
[TestMethod]
public void SetBoxShadowLeadingColor()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow", "red 10px 20px" ) );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
// Inset + leading color
styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow", "red inset 10px 20px 5px" ) );
Assert.AreEqual( 1, styles.BoxShadow.Count );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( 10, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 20, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 5, styles.BoxShadow[0].Blur );
Assert.AreEqual( new Color( 1, 0, 0, 1 ), styles.BoxShadow[0].Color );
}
[TestMethod]
public void SetBoxShadowMixedInsetAndOuter()
{
// The exact pattern that previously failed to parse — multiple shadows,
// some inset and some not, sharing a single declaration.
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow",
"inset 0 2px 6px rgba( 0, 0, 0, 0.7 ), 0 1px 2px rgba( 0, 0, 0, 0.4 )" ) );
Assert.AreEqual( 2, styles.BoxShadow.Count );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( 0, styles.BoxShadow[0].OffsetX );
Assert.AreEqual( 2, styles.BoxShadow[0].OffsetY );
Assert.AreEqual( 6, styles.BoxShadow[0].Blur );
Assert.AreEqual( new Color( 0, 0, 0, 0.7f ), styles.BoxShadow[0].Color );
Assert.AreEqual( false, styles.BoxShadow[1].Inset );
Assert.AreEqual( 0, styles.BoxShadow[1].OffsetX );
Assert.AreEqual( 1, styles.BoxShadow[1].OffsetY );
Assert.AreEqual( 2, styles.BoxShadow[1].Blur );
Assert.AreEqual( new Color( 0, 0, 0, 0.4f ), styles.BoxShadow[1].Color );
// Three-shadow stack: inset highlight, inset shadow, outer drop shadow
styles = new Styles();
Assert.IsTrue( styles.Set( "box-shadow",
"inset 0 1px 0 rgba( 255, 255, 255, 0.15 ), inset 0 -1px 0 rgba( 0, 0, 0, 0.5 ), 0 4px 14px rgba( 0, 0, 0, 0.5 )" ) );
Assert.AreEqual( 3, styles.BoxShadow.Count );
Assert.AreEqual( true, styles.BoxShadow[0].Inset );
Assert.AreEqual( true, styles.BoxShadow[1].Inset );
Assert.AreEqual( -1, styles.BoxShadow[1].OffsetY );
Assert.AreEqual( false, styles.BoxShadow[2].Inset );
Assert.AreEqual( 14, styles.BoxShadow[2].Blur );
}
[TestMethod]
public void SetCursor()
{
Styles styles = new Styles();
styles.Set( "cursor", "boobs" );
Assert.IsTrue( styles.Cursor != null );
Assert.AreEqual( "boobs", styles.Cursor );
}
[TestMethod]
public void SetPointerEvents()
{
Styles styles = new Styles();
styles.Set( "pointer-events", "none" );
Assert.IsTrue( styles.PointerEvents != null );
Assert.AreEqual( PointerEvents.None, styles.PointerEvents );
}
[TestMethod]
public void SetOpacity()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "opacity", "0.1" ) );
Assert.IsTrue( styles.Opacity.HasValue );
Assert.AreEqual( 0.1f, styles.Opacity.Value );
}
[TestMethod]
public void SetTextDecoration()
{
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "text-decoration", "underline" ) );
Assert.IsTrue( styles.TextDecorationLine.HasValue );
Assert.AreEqual( TextDecoration.Underline, styles.TextDecorationLine.Value & TextDecoration.Underline );
Assert.AreEqual( TextDecoration.None, styles.TextDecorationLine.Value & TextDecoration.LineThrough );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "text-decoration", "line-through" ) );
Assert.IsTrue( styles.TextDecorationLine.HasValue );
Assert.AreEqual( TextDecoration.None, styles.TextDecorationLine.Value & TextDecoration.Underline );
Assert.AreEqual( TextDecoration.LineThrough, styles.TextDecorationLine.Value & TextDecoration.LineThrough );
}
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "text-decoration", "line-through underline" ) );
Assert.IsTrue( styles.TextDecorationLine.HasValue );
Assert.AreEqual( TextDecoration.Underline, styles.TextDecorationLine.Value & TextDecoration.Underline );
Assert.AreEqual( TextDecoration.LineThrough, styles.TextDecorationLine.Value & TextDecoration.LineThrough );
}
}
[TestMethod]
public void SetFontStyle()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "font-style", "italic" ) );
Assert.IsTrue( styles.FontStyle.HasValue );
Assert.AreEqual( FontStyle.Italic, styles.FontStyle.Value & FontStyle.Italic );
}
[TestMethod]
public void BackdropFilterBlur()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "blur( 100px )" ) );
Assert.IsTrue( styles.BackdropFilterBlur.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterBlur.Value.Unit );
Assert.AreEqual( 100.0f, styles.BackdropFilterBlur.Value.Value );
}
[TestMethod]
public void BackdropFilterBrightness()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "brightness( 100 )" ) );
Assert.IsTrue( styles.BackdropFilterBrightness.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterBrightness.Value.Unit );
Assert.AreEqual( 100.0f, styles.BackdropFilterBrightness.Value.Value );
}
[TestMethod]
public void BackdropFilterContrast()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "contrast( 100 )" ) );
Assert.IsTrue( styles.BackdropFilterContrast.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterContrast.Value.Unit );
Assert.AreEqual( 100.0f, styles.BackdropFilterContrast.Value.Value );
}
[TestMethod]
public void BackdropFilterSaturate()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "saturate( 100 )" ) );
Assert.IsTrue( styles.BackdropFilterSaturate.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterSaturate.Value.Unit );
Assert.AreEqual( 100.0f, styles.BackdropFilterSaturate.Value.Value );
}
[TestMethod]
public void BackdropFilterGrayscale()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "grayscale( 1 )" ) );
Assert.IsTrue( styles.BackdropFilterSaturate.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterSaturate.Value.Unit );
Assert.AreEqual( 0.0f, styles.BackdropFilterSaturate.Value.Value );
}
[TestMethod]
public void BackdropFilterHueRotate()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "hue-rotate( 90deg )" ) );
Assert.IsTrue( styles.BackdropFilterHueRotate.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterHueRotate.Value.Unit );
Assert.AreEqual( 90, styles.BackdropFilterHueRotate.Value.Value );
}
[TestMethod]
public void BackdropFilterInvert()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "invert(70%)" ) );
Assert.IsTrue( styles.BackdropFilterInvert.HasValue );
Assert.AreEqual( LengthUnit.Percentage, styles.BackdropFilterInvert.Value.Unit );
Assert.AreEqual( 70.0f, styles.BackdropFilterInvert.Value.Value );
}
[TestMethod]
public void BackdropFilterMultiple()
{
Styles styles = new Styles();
Assert.IsTrue( styles.Set( "backdrop-filter", "blur( 100px ) invert(70%)" ) );
Assert.IsTrue( styles.BackdropFilterInvert.HasValue );
Assert.AreEqual( LengthUnit.Percentage, styles.BackdropFilterInvert.Value.Unit );
Assert.AreEqual( 70.0f, styles.BackdropFilterInvert.Value.Value );
Assert.IsTrue( styles.BackdropFilterBlur.HasValue );
Assert.AreEqual( LengthUnit.Pixels, styles.BackdropFilterBlur.Value.Unit );
Assert.AreEqual( 100.0f, styles.BackdropFilterBlur.Value.Value );
}
[TestMethod]
public void SetFontVariantNumeric()
{
{
var styles = new Styles();
Assert.IsTrue( styles.Set( "font-variant-numeric", "tabular-nums" ) );
Assert.AreEqual( FontVariantNumeric.TabularNums, styles.FontVariantNumeric );
}
{
var styles = new Styles();
Assert.IsTrue( styles.Set( "font-variant-numeric", "normal" ) );
Assert.AreEqual( FontVariantNumeric.Normal, styles.FontVariantNumeric );
}
{
var styles = new Styles();
Assert.IsFalse( styles.Set( "font-variant-numeric", "lining-nums" ) );
Assert.IsNull( styles.FontVariantNumeric );
}
}
}