Enable resetable and String prefs.

This allows both boolean and string-type preferences. It
also implements a system where prefs that are read from a
configuration file can be reset back to their initial value,
which is useful in a number of cases e.g. when running tests
to ensure that each test starts with the same values for
the prefs.
This commit is contained in:
James Graham 2015-09-17 00:49:05 +01:00
parent d811f2d1ba
commit 79e548905e
10 changed files with 174 additions and 33 deletions

View file

@ -35,7 +35,7 @@ use std::collections::BTreeMap;
use std::net::SocketAddr;
use std::thread::{self, sleep_ms};
use url::Url;
use util::prefs::{get_pref, set_pref};
use util::prefs::{get_pref, reset_all_prefs, reset_pref, set_pref, PrefValue};
use util::task::spawn_named;
use uuid::Uuid;
use webdriver::command::{GetParameters, JavascriptCommandParameters, LocatorParameters};
@ -150,7 +150,7 @@ impl ToJson for GetPrefsParameters {
#[derive(Clone, PartialEq)]
struct SetPrefsParameters {
prefs: Vec<(String, bool)>
prefs: Vec<(String, PrefValue)>
}
impl Parameters for SetPrefsParameters {
@ -166,9 +166,9 @@ impl Parameters for SetPrefsParameters {
"prefs was not an array")));
let mut params = Vec::with_capacity(items.len());
for (name, val) in items.iter() {
let value = try!(val.as_boolean().ok_or(
WebDriverError::new(ErrorStatus::InvalidArgument,
"Pref is not a bool")));
let value = try!(PrefValue::from_json(val).or(
Err(WebDriverError::new(ErrorStatus::InvalidArgument,
"Pref is not a boolean or string"))));
let key = name.to_owned();
params.push((key, value));
}
@ -633,13 +633,14 @@ impl Handler {
.iter()
.map(|item| (item.clone(), get_pref(item).to_json()))
.collect::<BTreeMap<_, _>>();
Ok(WebDriverResponse::Generic(ValueResponse::new(prefs.to_json())))
}
fn handle_set_prefs(&self,
parameters: &SetPrefsParameters) -> WebDriverResult<WebDriverResponse> {
for &(ref key, ref value) in parameters.prefs.iter() {
set_pref(key, *value);
set_pref(key, value.clone());
}
Ok(WebDriverResponse::Void)
}