aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-01-24 22:52:08 -0800
committerGitHub <noreply@github.com>2017-01-24 22:52:08 -0800
commit2da1977108daea20cf68068f2960033f3934dfc1 (patch)
tree6f4517737fd72c41afe94256cf048e97d13bb642
parent742ed2e03c4c083d911525b6a2bfe0de31b3668d (diff)
parent305db366a1ad5e39a8b41ce71e652acff477a777 (diff)
downloadservo-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.rs37
-rw-r--r--tests/unit/style/parsing/inherited_text.rs24
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"));
+}