diff --git a/cef-test-core/src/harness/feedback.rs b/cef-test-core/src/harness/feedback.rs index 71e14d1..9957894 100644 --- a/cef-test-core/src/harness/feedback.rs +++ b/cef-test-core/src/harness/feedback.rs @@ -8,6 +8,8 @@ pub enum Feedback { AssertFailure, /// Last instruction raised an error Error, + /// Last instruction was not supported by adaptor + Unsupported, } impl Feedback { diff --git a/cef-test-core/src/harness/harness.rs b/cef-test-core/src/harness/harness.rs index 99a68da..c2460f2 100644 --- a/cef-test-core/src/harness/harness.rs +++ b/cef-test-core/src/harness/harness.rs @@ -1,5 +1,5 @@ use super::{TestRunner, TestAdaptor, TestMetadata}; -use super::{Instruction, TestAssert, UIOp, Feedback}; +use super::{Instruction, TestAssert, TestOp, Feedback}; /// Harness which runs one or more tests pub struct TestHarness { @@ -21,7 +21,7 @@ impl TestHarness { Feedback::Success } - fn translate_ui_op(&self, _op: UIOp) -> Feedback { + fn translate_ui_op(&self, _op: TestOp) -> Feedback { // TODO Feedback::Success } @@ -29,7 +29,7 @@ impl TestHarness { fn translate_instruction(&self, instruction: Instruction) -> Feedback { match instruction { Instruction::Assertion(a) => self.translate_assertion(a), - Instruction::Interaction(i) => self.translate_ui_op(i), + Instruction::Operation(i) => self.translate_ui_op(i), } } diff --git a/cef-test-core/src/harness/instructions.rs b/cef-test-core/src/harness/instructions.rs index 917f5be..039975a 100644 --- a/cef-test-core/src/harness/instructions.rs +++ b/cef-test-core/src/harness/instructions.rs @@ -2,12 +2,91 @@ pub enum Instruction { /// Test assertion Assertion(TestAssert), - /// UI manipulation - Interaction(UIOp), + /// Test harness operation + Operation(TestOp), } /// Assertion -pub enum TestAssert {} +pub struct TestAssert { + /// Tab context + pub context: TabSelector, + /// Test assertion + pub assertion: GeneralAssertType, +} + +/// Test assertion information +pub enum GeneralAssertType { + /// Element-related assertion + Element(ElementAssert), +} + +/// Element assertion +pub struct ElementAssert { + /// Element to target + pub element: ElementSelector, + /// Test assertion + pub assert: ElementAssertionType, +} + +/// Assertion operations +pub enum ElementAssertionType { + /// Assert element exists + Exists, + /// Assert element contains text + TextEquals(String) +} /// User interface interaction -pub enum UIOp {} +pub struct TestOp { + /// Tab context + pub context: TabSelector, + /// Test operation + pub op: GeneralOpType, +} + +/// Element selection mode +pub enum ElementSelector { + /// Use CSS selector syntax + CSS(String), +} + +/// Tab selection mode +pub enum TabSelector { + /// Select by tab title + Title(String), + /// Select by tab's current URL + Url(String), + /// Select by tab identifier + Id(String), +} + +/// Test operation information +pub enum GeneralOpType { + /// Operate on an element + Element(ElementOp), + /// Basic context operation + Basic(BasicOpType), +} + +/// Basic operation type +pub enum BasicOpType { + /// Pause executing thread for time, in milliseconds + Sleep(u64), +} + +/// Element manipulation operation +pub struct ElementOp { + /// Element to target + pub element: ElementSelector, + /// Operation to perform + pub op: ElementOpType, +} + +/// Element operation type +pub enum ElementOpType { + /// Click on element + Click, + /// Wait for element to be created + WaitFor, +} + diff --git a/cef-test-core/src/harness/mod.rs b/cef-test-core/src/harness/mod.rs index 7598278..2867784 100644 --- a/cef-test-core/src/harness/mod.rs +++ b/cef-test-core/src/harness/mod.rs @@ -13,6 +13,6 @@ pub use adaptor::TestAdaptor; pub use feedback::Feedback; pub use harness::TestHarness; pub use headless_adaptor::HeadlessAdaptor; -pub use instructions::{Instruction, TestAssert, UIOp}; +pub use instructions::{Instruction, TestAssert, GeneralAssertType, ElementAssert, ElementAssertionType, TestOp, ElementSelector, TabSelector, GeneralOpType, BasicOpType, ElementOp, ElementOpType}; pub use json_runner::JsonRunner; pub use runner::{TestRunner, TestMetadata};