|
| 1 | +using System.Linq; |
| 2 | +using Xunit; |
| 3 | + |
| 4 | +namespace ExCSS.Tests.PropertyTests |
| 5 | +{ |
| 6 | + public class PageRuleTests : CssConstructionFunctions |
| 7 | + { |
| 8 | + private static PageRule ParsePage(string source) |
| 9 | + { |
| 10 | + var sheet = ParseStyleSheet(source); |
| 11 | + return (PageRule)sheet.Rules.First(); |
| 12 | + } |
| 13 | + |
| 14 | + [Theory] |
| 15 | + // CSS Paged Media 3 4.1: an @page selector is a comma-separated list of "[<name>]? [:<pseudo>]?" |
| 16 | + // entries. |
| 17 | + [InlineData("@page :left { margin: 1cm }", ":left")] |
| 18 | + [InlineData("@page :first { margin: 1cm }", ":first")] |
| 19 | + [InlineData("@page chapter { margin: 1cm }", "chapter")] |
| 20 | + [InlineData("@page chapter:left { margin: 1cm }", "chapter:left")] |
| 21 | + [InlineData("@page chapter1:left, chapter2:left { margin: 1cm }", "chapter1:left, chapter2:left")] |
| 22 | + [InlineData("@page a, b, c { margin: 1cm }", "a, b, c")] |
| 23 | + public void PageSelectorForms(string source, string expectedSelector) |
| 24 | + { |
| 25 | + var rule = ParsePage(source); |
| 26 | + |
| 27 | + Assert.Equal(RuleType.Page, rule.Type); |
| 28 | + Assert.Equal(expectedSelector, rule.SelectorText); |
| 29 | + } |
| 30 | + |
| 31 | + [Fact] |
| 32 | + public void PageSelectorListEntriesAreExposed() |
| 33 | + { |
| 34 | + var rule = ParsePage("@page chapter1:left, chapter2:right { margin: 1cm }"); |
| 35 | + var selector = Assert.IsType<PageSelector>(rule.Selector); |
| 36 | + |
| 37 | + Assert.Equal(2, selector.Entries.Count); |
| 38 | + Assert.Equal("chapter1", selector.Entries[0].Name); |
| 39 | + Assert.Equal("left", selector.Entries[0].Pseudo); |
| 40 | + Assert.Equal("chapter2", selector.Entries[1].Name); |
| 41 | + Assert.Equal("right", selector.Entries[1].Pseudo); |
| 42 | + } |
| 43 | + |
| 44 | + [Theory] |
| 45 | + // The @page "size" descriptor (CSS Paged Media 3 6.3). |
| 46 | + [InlineData("size: A4", "A4")] |
| 47 | + [InlineData("size: letter", "letter")] |
| 48 | + [InlineData("size: landscape", "landscape")] |
| 49 | + [InlineData("size: 8.5in 11in", "8.5in 11in")] |
| 50 | + [InlineData("size: 210mm", "210mm")] |
| 51 | + public void PageSizeDescriptor(string declaration, string value) |
| 52 | + { |
| 53 | + var style = ParseDeclarations(declaration); |
| 54 | + |
| 55 | + Assert.Equal(value, style.Size); |
| 56 | + } |
| 57 | + |
| 58 | + [Theory] |
| 59 | + // The "page" property (CSS Paged Media 3 3.4). |
| 60 | + [InlineData("page: chapter", "chapter")] |
| 61 | + [InlineData("page: auto", "auto")] |
| 62 | + public void PageProperty(string declaration, string value) |
| 63 | + { |
| 64 | + var style = ParseDeclarations(declaration); |
| 65 | + |
| 66 | + Assert.Equal(value, style.PageName); |
| 67 | + } |
| 68 | + } |
| 69 | +} |
0 commit comments