diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-01-24 22:52:08 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-24 22:52:08 -0800 |
commit | 2da1977108daea20cf68068f2960033f3934dfc1 (patch) | |
tree | 6f4517737fd72c41afe94256cf048e97d13bb642 | |
parent | 742ed2e03c4c083d911525b6a2bfe0de31b3668d (diff) | |
parent | 305db366a1ad5e39a8b41ce71e652acff477a777 (diff) | |
download | servo-2da1977108daea20cf68068f2960033f3934dfc1.tar.gz servo-2da1977108daea20cf68068f2960033f3934dfc1.zip |
Auto merge of #15174 - DexterHaslem:15165-webkit-text-stroke-sh-ord, r=SimonSapin
make -webkit-text-stroke color and width shorthand no longer sensitive to ordering
<!-- Please describe your changes on the following line: -->
this makes `-webkit-text-stroke` shorthand work with line-width and color in either order.
I added a shorthand parser test to the existing inherited_text test, which wasn't very similar to any of the other tests in there, hope sticking shorthand below the longhand stuff is ok.
---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #15165 (github issue number if applicable).
<!-- Either: -->
- [X] There are tests for these changes OR
- [ ] These changes do not require tests because _____
<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15174)
<!-- Reviewable:end -->
-rw-r--r-- | components/style/properties/shorthand/inherited_text.mako.rs | 37 | ||||
-rw-r--r-- | tests/unit/style/parsing/inherited_text.rs | 24 |
2 files changed, 47 insertions, 14 deletions
diff --git a/components/style/properties/shorthand/inherited_text.mako.rs b/components/style/properties/shorthand/inherited_text.mako.rs index 38789c5275e..a75e6d8925d 100644 --- a/components/style/properties/shorthand/inherited_text.mako.rs +++ b/components/style/properties/shorthand/inherited_text.mako.rs @@ -76,25 +76,34 @@ use values::specified::{BorderWidth, Length}; use app_units::Au; - let (mut color, mut width, mut any) = (None, None, false); - % for value in "color width".split(): - if ${value}.is_none() { - if let Ok(value) = input.try(|input| _webkit_text_stroke_${value}::parse(context, input)) { - ${value} = Some(value); - any = true; + let mut color = None; + let mut width = None; + loop { + if color.is_none() { + if let Ok(value) = input.try(|input| _webkit_text_stroke_color::parse(context, input)) { + color = Some(value); + continue } } - % endfor - if !any { - return Err(()); + if width.is_none() { + if let Ok(value) = input.try(|input| _webkit_text_stroke_width::parse(context, input)) { + width = Some(value); + continue + } + } + break } - Ok(Longhands { - _webkit_text_stroke_color: color.or(Some(CSSColor { parsed: CSSParserColor::CurrentColor, - authored: None })), - _webkit_text_stroke_width: width.or(Some(BorderWidth::from_length(Length::Absolute(Au::from_px(0))))), - }) + if color.is_some() || width.is_some() { + Ok(Longhands { + _webkit_text_stroke_color: color.or(Some(CSSColor { parsed: CSSParserColor::CurrentColor, + authored: None })), + _webkit_text_stroke_width: width.or(Some(BorderWidth::from_length(Length::Absolute(Au::from_px(0))))), + }) + } else { + Err(()) + } } impl<'a> LonghandsToSerialize<'a> { diff --git a/tests/unit/style/parsing/inherited_text.rs b/tests/unit/style/parsing/inherited_text.rs index 51c801b6f91..faaa1cce02e 100644 --- a/tests/unit/style/parsing/inherited_text.rs +++ b/tests/unit/style/parsing/inherited_text.rs @@ -78,3 +78,27 @@ fn test_text_emphasis_position() { let left_under = parse_longhand!(text_emphasis_position, "left under"); assert_eq!(left_under, SpecifiedValue(HorizontalWritingModeValue::Under, VerticalWritingModeValue::Left)); } + + +#[test] +fn webkit_text_stroke_shorthand_should_parse_properly() { + use media_queries::CSSErrorReporterTest; + use servo_url::ServoUrl; + use style::properties::longhands::_webkit_text_stroke_color; + use style::properties::longhands::_webkit_text_stroke_width; + use style::properties::shorthands::_webkit_text_stroke; + + let url = ServoUrl::parse("http://localhost").unwrap(); + let context = ParserContext::new(Origin::Author, &url, Box::new(CSSErrorReporterTest)); + + let mut parser = Parser::new("thin red"); + let result = _webkit_text_stroke::parse_value(&context, &mut parser).unwrap(); + assert_eq!(result._webkit_text_stroke_color.unwrap(), parse_longhand!(_webkit_text_stroke_color, "red")); + assert_eq!(result._webkit_text_stroke_width.unwrap(), parse_longhand!(_webkit_text_stroke_width, "thin")); + + // ensure its no longer sensitive to order + let mut parser = Parser::new("red thin"); + let result = _webkit_text_stroke::parse_value(&context, &mut parser).unwrap(); + assert_eq!(result._webkit_text_stroke_color.unwrap(), parse_longhand!(_webkit_text_stroke_color, "red")); + assert_eq!(result._webkit_text_stroke_width.unwrap(), parse_longhand!(_webkit_text_stroke_width, "thin")); +} |