From 05a4febc4013cf3cb44fe55416d9f3979d0b8f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Naz=C4=B1m=20Can=20Alt=C4=B1nova?= Date: Mon, 17 Apr 2017 22:36:45 +0300 Subject: [PATCH] Fix parsing/serialization bug in contain property --- components/style/properties/longhand/box.mako.rs | 10 ++++++---- tests/unit/style/parsing/containment.rs | 12 +++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/components/style/properties/longhand/box.mako.rs b/components/style/properties/longhand/box.mako.rs index 851beb6267c..95f868af743 100644 --- a/components/style/properties/longhand/box.mako.rs +++ b/components/style/properties/longhand/box.mako.rs @@ -2096,8 +2096,10 @@ ${helpers.single_keyword("transform-style", const LAYOUT = 0x02, const STYLE = 0x04, const PAINT = 0x08, - const STRICT = SIZE.bits | LAYOUT.bits | STYLE.bits | PAINT.bits, - const CONTENT = LAYOUT.bits | STYLE.bits | PAINT.bits, + const STRICT = 0x10, + const STRICT_BITS = SIZE.bits | LAYOUT.bits | STYLE.bits | PAINT.bits, + const CONTENT = 0x20, + const CONTENT_BITS = LAYOUT.bits | STYLE.bits | PAINT.bits, } } @@ -2148,11 +2150,11 @@ ${helpers.single_keyword("transform-style", return Ok(result) } if input.try(|input| input.expect_ident_matching("strict")).is_ok() { - result.insert(STRICT); + result.insert(STRICT | STRICT_BITS); return Ok(result) } if input.try(|input| input.expect_ident_matching("content")).is_ok() { - result.insert(CONTENT); + result.insert(CONTENT | CONTENT_BITS); return Ok(result) } diff --git a/tests/unit/style/parsing/containment.rs b/tests/unit/style/parsing/containment.rs index d4cffe9f1a5..2ef6a08659e 100644 --- a/tests/unit/style/parsing/containment.rs +++ b/tests/unit/style/parsing/containment.rs @@ -3,6 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use parsing::parse; +use style_traits::ToCss; #[test] fn contain_longhand_should_parse_correctly() { @@ -13,11 +14,20 @@ fn contain_longhand_should_parse_correctly() { assert_eq!(none, SpecifiedValue::empty()); let strict = parse_longhand!(contain, "strict"); - assert_eq!(strict, contain::STRICT); + assert_eq!(strict, contain::STRICT | contain::STRICT_BITS); + + let strict = parse_longhand!(contain, "content"); + assert_eq!(strict, contain::CONTENT | contain::CONTENT_BITS); let style_paint = parse_longhand!(contain, "style paint"); assert_eq!(style_paint, contain::STYLE | contain::PAINT); + assert_roundtrip_with_context!(contain::parse, "strict"); + assert_roundtrip_with_context!(contain::parse, "size layout style paint"); + + assert_roundtrip_with_context!(contain::parse, "content"); + assert_roundtrip_with_context!(contain::parse, "layout style paint"); + // Assert that the `2px` is not consumed, which would trigger parsing failure in real use assert_parser_exhausted!(contain::parse, "layout 2px", false); }