mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
stylo: Fix and ensure alignment of restyle hints. Test it on Travis.
Turns out eRestyle_LaterSiblings was not really matching, sigh...
This commit is contained in:
parent
6d67525172
commit
27b2bad256
5 changed files with 58 additions and 1 deletions
|
@ -13,6 +13,7 @@ matrix:
|
||||||
script:
|
script:
|
||||||
- ./mach build -d --verbose
|
- ./mach build -d --verbose
|
||||||
- ./mach build-geckolib
|
- ./mach build-geckolib
|
||||||
|
- ./mach test-geckolib
|
||||||
- ./mach test-unit
|
- ./mach test-unit
|
||||||
- ./mach test-compiletest
|
- ./mach test-compiletest
|
||||||
- bash etc/ci/check_no_unwrap.sh
|
- bash etc/ci/check_no_unwrap.sh
|
||||||
|
|
|
@ -28,7 +28,7 @@ bitflags! {
|
||||||
// of a good reason for that.
|
// of a good reason for that.
|
||||||
const RESTYLE_DESCENDANTS = 0x02,
|
const RESTYLE_DESCENDANTS = 0x02,
|
||||||
#[doc = "Rerun selector matching on all later siblings of the element and all of their descendants."]
|
#[doc = "Rerun selector matching on all later siblings of the element and all of their descendants."]
|
||||||
const RESTYLE_LATER_SIBLINGS = 0x04,
|
const RESTYLE_LATER_SIBLINGS = 0x08,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ mod snapshot;
|
||||||
mod snapshot_helpers;
|
mod snapshot_helpers;
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
pub mod glue;
|
pub mod glue;
|
||||||
|
mod sanity_checks;
|
||||||
mod traversal;
|
mod traversal;
|
||||||
mod wrapper;
|
mod wrapper;
|
||||||
|
|
||||||
|
|
44
ports/geckolib/sanity_checks.rs
Normal file
44
ports/geckolib/sanity_checks.rs
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
//! Different static asserts that ensure the build does what it's expected to.
|
||||||
|
//!
|
||||||
|
//! TODO: maybe cfg(test) this?
|
||||||
|
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
|
||||||
|
use std::mem;
|
||||||
|
|
||||||
|
macro_rules! check_enum_value {
|
||||||
|
($a:expr, $b:expr) => {
|
||||||
|
unsafe {
|
||||||
|
mem::transmute::<[u32; $a as usize],
|
||||||
|
[u32; $b as usize]>([0; $a as usize]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NB: It's a shame we can't do this statically with bitflags, but no
|
||||||
|
// const-fn and no other way to access the numerical value :-(
|
||||||
|
macro_rules! check_enum_value_non_static {
|
||||||
|
($a:expr, $b:expr) => {
|
||||||
|
assert_eq!($a as usize, $b as usize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn assert_restyle_hints_match() {
|
||||||
|
use style::restyle_hints::*; // For flags
|
||||||
|
use gecko_bindings::structs::nsRestyleHint;
|
||||||
|
|
||||||
|
check_enum_value_non_static!(nsRestyleHint::eRestyle_Self, RESTYLE_SELF.bits());
|
||||||
|
// XXX This for Servo actually means something like an hypothetical
|
||||||
|
// Restyle_AllDescendants (but without running selector matching on the
|
||||||
|
// element). ServoRestyleManager interprets it like that, but in practice we
|
||||||
|
// should align the behavior with Gecko adding a new restyle hint, maybe?
|
||||||
|
//
|
||||||
|
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1291786
|
||||||
|
check_enum_value_non_static!(nsRestyleHint::eRestyle_SomeDescendants, RESTYLE_DESCENDANTS.bits());
|
||||||
|
check_enum_value_non_static!(nsRestyleHint::eRestyle_LaterSiblings, RESTYLE_LATER_SIBLINGS.bits());
|
||||||
|
}
|
|
@ -158,6 +158,17 @@ class MachCommands(CommandBase):
|
||||||
return suite
|
return suite
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@Command('test-geckolib',
|
||||||
|
description='Test geckolib sanity checks',
|
||||||
|
category='testing')
|
||||||
|
def test_geckolib(self):
|
||||||
|
self.ensure_bootstrapped()
|
||||||
|
|
||||||
|
env = self.build_env()
|
||||||
|
env["RUST_BACKTRACE"] = "1"
|
||||||
|
|
||||||
|
return call(["cargo", "test"], env=env, cwd=path.join("ports", "geckolib"))
|
||||||
|
|
||||||
@Command('test-unit',
|
@Command('test-unit',
|
||||||
description='Run unit tests',
|
description='Run unit tests',
|
||||||
category='testing')
|
category='testing')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue