Skip to content

Commit c63fff8

Browse files
committed
completly bugfix grid area parsing
1 parent c7a0819 commit c63fff8

File tree

2 files changed

+100
-13
lines changed

2 files changed

+100
-13
lines changed

src/AngleSharp.Css.Tests/Declarations/CssGridProperty.cs

Lines changed: 81 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -528,13 +528,91 @@ public void CssGridAreaSingleValueLegal()
528528
}
529529

530530
[Test]
531-
public void CssGridAreaSingleTextValueLegal()
531+
public void CssGridAreaSingleTextValueLegal1()
532532
{
533-
var source = "#nav-header {grid-area: navheader; }";
533+
var source = "#nav-header {grid-area: aaa; }";
534534
var css = ParseStyleSheet(source);
535535
var text = css.Rules[0].CssText;
536536

537-
var expected = "#nav-header { grid-area: navheader / navheader / navheader / navheader }";
537+
var expected = "#nav-header { grid-area: aaa / aaa / aaa / aaa }";
538+
Assert.AreEqual(expected, text);
539+
}
540+
541+
542+
[Test]
543+
public void CssGridAreaSingleTextValueLegal2()
544+
{
545+
var source = "#nav-header {grid-area: aaa / bbb; }";
546+
var css = ParseStyleSheet(source);
547+
var text = css.Rules[0].CssText;
548+
549+
var expected = "#nav-header { grid-area: aaa / bbb / aaa / bbb }";
550+
Assert.AreEqual(expected, text);
551+
}
552+
553+
[Test]
554+
public void CssGridAreaSingleTextValueLegal3()
555+
{
556+
var source = "#nav-header {grid-area: 1 / 2; }";
557+
var css = ParseStyleSheet(source);
558+
var text = css.Rules[0].CssText;
559+
560+
var expected = "#nav-header { grid-area: 1 / 2 / auto / auto }";
561+
Assert.AreEqual(expected, text);
562+
}
563+
564+
[Test]
565+
public void CssGridAreaSingleTextValueLegal4()
566+
{
567+
var source = "#nav-header {grid-area: aaa / 2; }";
568+
var css = ParseStyleSheet(source);
569+
var text = css.Rules[0].CssText;
570+
571+
var expected = "#nav-header { grid-area: aaa / 2 / aaa / auto }";
572+
Assert.AreEqual(expected, text);
573+
}
574+
575+
[Test]
576+
public void CssGridAreaSingleTextValueLegal5()
577+
{
578+
var source = "#nav-header {grid-area: aaa / bbb / ccc; }";
579+
var css = ParseStyleSheet(source);
580+
var text = css.Rules[0].CssText;
581+
582+
var expected = "#nav-header { grid-area: aaa / bbb / ccc / bbb }";
583+
Assert.AreEqual(expected, text);
584+
}
585+
586+
[Test]
587+
public void CssGridAreaSingleTextValueLegal6()
588+
{
589+
var source = "#nav-header {grid-area: aaa / bbb / ccc; }";
590+
var css = ParseStyleSheet(source);
591+
var text = css.Rules[0].CssText;
592+
593+
var expected = "#nav-header { grid-area: aaa / bbb / ccc / bbb }";
594+
Assert.AreEqual(expected, text);
595+
}
596+
597+
[Test]
598+
public void CssGridAreaSingleTextValueLegal7()
599+
{
600+
var source = "#nav-header {grid-area: 1; }";
601+
var css = ParseStyleSheet(source);
602+
var text = css.Rules[0].CssText;
603+
604+
var expected = "#nav-header { grid-area: 1 / auto / auto / auto }";
605+
Assert.AreEqual(expected, text);
606+
}
607+
608+
[Test]
609+
public void CssGridAreaSingleTextValueLegal8()
610+
{
611+
var source = "#nav-header {grid-area: 2 / aaa; }";
612+
var css = ParseStyleSheet(source);
613+
var text = css.Rules[0].CssText;
614+
615+
var expected = "#nav-header { grid-area: 2 / aaa / auto / aaa }";
538616
Assert.AreEqual(expected, text);
539617
}
540618

src/AngleSharp.Css/Declarations/GridAreaDeclaration.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,24 +59,33 @@ private static ICssValue GetItem(CssTupleValue tuple, Int32 index)
5959
return tuple.Items[index];
6060
}
6161

62-
return GetItemSimple(tuple, index / 2);
62+
return GetItemSimple(tuple, index);
6363
}
6464

6565
private static ICssValue GetItemSimple(CssTupleValue tuple, Int32 index)
6666
{
67-
if (tuple.Items.Length > index)
67+
if (index <= 2)
6868
{
69-
var nested = tuple.Items[index] as CssTupleValue;
70-
71-
if (nested != null && nested.Items.Length == 3 && nested.Items[0] == null && nested.Items[1] == null)
72-
{
73-
return nested.Items[2];
69+
if (tuple.Items.Length <= index)
70+
{if (!int.TryParse(tuple.Items[0].CssText, out int _))
71+
{
72+
return tuple.Items[0];
73+
}
7474
}
7575
}
76-
77-
if (tuple.Items.Length > 0 && !int.TryParse(tuple.Items[0].CssText, out int _))
76+
else if (index == 3)
7877
{
79-
return tuple.Items[0];
78+
if (tuple.Items.Length > 1)
79+
{
80+
if (!int.TryParse(tuple.Items[1].CssText, out int _))
81+
{
82+
return tuple.Items[1];
83+
}
84+
}
85+
else if (!int.TryParse(tuple.Items[0].CssText, out int _))
86+
{
87+
return tuple.Items[0];
88+
}
8089
}
8190

8291
return new Constant<Object>(CssKeywords.Auto, null);

0 commit comments

Comments
 (0)