diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-12-06 17:30:40 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-06 17:30:40 -0800 |
commit | b54cfc9f259e72ea26e68ec8a7b1d617cf0812d3 (patch) | |
tree | 8cbb69aaa762b597146109183747afe31f08d913 /components/script/dom/bluetoothuuid.rs | |
parent | e2d956eb62f35e6646501b058296da33ca96fe00 (diff) | |
parent | 1cb694b947d07505f8abf5dd54c5e69f72c2a7a0 (diff) | |
download | servo-b54cfc9f259e72ea26e68ec8a7b1d617cf0812d3.tar.gz servo-b54cfc9f259e72ea26e68ec8a7b1d617cf0812d3.zip |
Auto merge of #14429 - szeged:syntax-to-type-error, r=jdm
Replace Syntax with TypeError in bluetoothuuid.rs
<!-- Please describe your changes on the following line: -->
1. Replacing `SyntaxError` with `TypeError` in `bluetoothuuid.rs` due to the specification change.
This indicates changes in the existing tests.
The error strings are from the chromium implementation.
2. We missed out a `$` character from the end of the `VALID_UUID_REGEX` global variable.
---
<!-- 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
<!-- Either: -->
- [x] There are tests for these changes OR
<!-- 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/14429)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/bluetoothuuid.rs')
-rw-r--r-- | components/script/dom/bluetoothuuid.rs | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/components/script/dom/bluetoothuuid.rs b/components/script/dom/bluetoothuuid.rs index bf8774650ba..e16d8141e50 100644 --- a/components/script/dom/bluetoothuuid.rs +++ b/components/script/dom/bluetoothuuid.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use dom::bindings::codegen::UnionTypes::StringOrUnsignedLong; -use dom::bindings::error::Error::Syntax; +use dom::bindings::error::Error::Type; use dom::bindings::error::Fallible; use dom::bindings::reflector::Reflector; use dom::bindings::str::DOMString; @@ -267,7 +267,19 @@ const BASE_UUID: &'static str = "-0000-1000-8000-00805f9b34fb"; const SERVICE_PREFIX: &'static str = "org.bluetooth.service"; const CHARACTERISTIC_PREFIX: &'static str = "org.bluetooth.characteristic"; const DESCRIPTOR_PREFIX: &'static str = "org.bluetooth.descriptor"; -const VALID_UUID_REGEX: &'static str = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}"; +const VALID_UUID_REGEX: &'static str = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"; +// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=314 +const UUID_ERROR_MESSAGE: &'static str = "It must be a valid UUID alias (e.g. 0x1234), \ + UUID (lowercase hex characters e.g. '00001234-0000-1000-8000-00805f9b34fb'),\nor recognized standard name from"; +// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=321 +const SERVICES_ERROR_MESSAGE: &'static str = "https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx\ + \ne.g. 'alert_notification'."; +// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=327 +const CHARACTERISTIC_ERROR_MESSAGE: &'static str = "https://developer.bluetooth.org/gatt/characteristics/Pages/\ + CharacteristicsHome.aspx\ne.g. 'aerobic_heart_rate_lower_limit'."; +// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=333 +const DESCRIPTOR_ERROR_MESSAGE: &'static str = "https://developer.bluetooth.org/gatt/descriptors/Pages/\ + DescriptorsHomePage.aspx\ne.g. 'gatt.characteristic_presentation_format'."; impl BluetoothUUID { // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-canonicaluuid @@ -325,22 +337,35 @@ fn resolve_uuid_name( prefix: &str) -> Fallible<DOMString> { match name { - // Step 1 + // Step 1. StringOrUnsignedLong::UnsignedLong(unsigned32) => { Ok(canonical_uuid(unsigned32)) }, StringOrUnsignedLong::String(dstring) => { - // Step 2 + // Step 2. let regex = Regex::new(VALID_UUID_REGEX).unwrap(); if regex.is_match(&*dstring) { Ok(dstring) } else { - // Step 3 + // Step 3. let concatenated = format!("{}.{}", prefix, dstring); let is_in_table = assigned_numbers_table.iter().find(|p| p.0 == concatenated); match is_in_table { Some(&(_, alias)) => Ok(canonical_uuid(alias)), - None => Err(Syntax), + None => { + let (attribute_type, error_url_message) = match prefix { + SERVICE_PREFIX => ("Service", SERVICES_ERROR_MESSAGE), + CHARACTERISTIC_PREFIX => ("Characteristic", CHARACTERISTIC_ERROR_MESSAGE), + DESCRIPTOR_PREFIX => ("Descriptor", DESCRIPTOR_ERROR_MESSAGE), + _ => unreachable!(), + }; + // Step 4. + return Err(Type(format!("Invalid {} name : '{}'.\n{} {}", + attribute_type, + dstring, + UUID_ERROR_MESSAGE, + error_url_message))); + }, } } }, |