Create harness interface spec types

This commit is contained in:
NGnius 2023-01-15 21:15:30 -05:00
parent 4a4410443a
commit 9955517f4a
4 changed files with 89 additions and 8 deletions

View file

@ -8,6 +8,8 @@ pub enum Feedback {
AssertFailure,
/// Last instruction raised an error
Error,
/// Last instruction was not supported by adaptor
Unsupported,
}
impl Feedback {

View file

@ -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<R: TestRunner, A: TestAdaptor> {
@ -21,7 +21,7 @@ impl<R: TestRunner, A: TestAdaptor> TestHarness<R, A> {
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<R: TestRunner, A: TestAdaptor> TestHarness<R, A> {
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),
}
}

View file

@ -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,
}

View file

@ -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};