blob: 89f855ba17a29a7a35c22269eb08df844de916b8 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_INSPECT_SCENARIO_H_
#define UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_INSPECT_SCENARIO_H_
#include <optional>
#include <string>
#include <string_view>
#include <vector>
#include "base/component_export.h"
#include "ui/accessibility/platform/inspect/ax_inspect.h"
namespace base {
class FilePath;
}
namespace ui {
class AXScriptInstruction;
// Describes the test execution flow, which is parsed from a sequence
// of testing directives (instructions). The testing directives are typically
// found in a testing file in the comment section. For example, such section
// in a dump_tree HTML test file will instruct to wait for 'bananas' text in
// a document and then dump an accessible tree which includes aria-live property
// on all platforms:
// <!--
// @WAIT-FOR:bananas
// @MAC-ALLOW:AXARIALive
// @WIN-ALLOW:live*
// @UIA-WIN-ALLOW:LiveSetting*
// @BLINK-ALLOW:live*
// @BLINK-ALLOW:container*
// @AURALINUX-ALLOW:live*
// -->
class COMPONENT_EXPORT(AX_PLATFORM) AXInspectScenario {
public:
explicit AXInspectScenario(
const std::vector<AXPropertyFilter>& default_filters = {});
AXInspectScenario(AXInspectScenario&&);
~AXInspectScenario();
AXInspectScenario& operator=(AXInspectScenario&&);
// Parses a given testing scenario.
// @directive_prefix platform dependent directive prefix, for example,
// @MAC- is used for filter directives on Mac
// @lines lines containing directives as a text
// @default_filters set of default filters, a special type of directives,
// defining which property gets (or not) into the output,
// useful to not make each test to specify common filters
// all over
static AXInspectScenario From(
const std::string& directive_prefix,
const std::vector<std::string>& lines,
const std::vector<AXPropertyFilter>& default_filters = {});
// Parses a given testing scenario.
// @directive_prefix platform dependent directive prefix, for example,
// @MAC- is used for filter directives on Mac
// @scenario_path Path can be a plain file or HTML file containing a
// scenario in a <!-- --> comment section.
// @default_filters set of default filters, a special type of directives,
// defining which property gets (or not) into the output,
// useful to not make each test to specify common filters
// all over
static std::optional<AXInspectScenario> From(
const std::string& directive_prefix,
const base::FilePath& scenario_path,
const std::vector<AXPropertyFilter>& default_filters = {});
// A list of URLs of resources that are never expected to load. For example,
// a broken image url, which otherwise would make a test failing.
std::vector<std::string> no_load_expected;
// A list of strings must be present in the formatted tree before the test
// starts
std::vector<std::string> wait_for;
// A list of string indicating an element the default accessible action
// should be performed at before the test starts.
std::vector<std::string> default_action_on;
// A list of JavaScripts functions to be executed consequently. Function
// may return a value, which has to be present in a formatter tree before
// the next function evaluated.
std::vector<std::string> execute;
// A list of property filters which defines generated output of a formatted
// tree.
std::vector<AXPropertyFilter> property_filters;
// The node filters indicating subtrees that should be not included into
// a formatted tree.
std::vector<AXNodeFilter> node_filters;
// Scripting instructions.
std::vector<AXScriptInstruction> script_instructions;
// Whether to enable accessibility tree dumping in events tests (normally
// events tests only show events).
bool events_tree_dump_enabled = false;
private:
enum Directive {
// No directive.
kNone,
// Instructs to not wait for document load for url defined by the
// directive.
kNoLoadExpected,
// Delays a test unitl a string defined by the directive is present
// in the dump.
kWaitFor,
// Delays a test until a string returned by a script defined by the
// directive is present in the dump.
kExecuteAndWaitFor,
// Invokes default action on an accessible object defined by the
// directive.
kDefaultActionOn,
// Property filter directives, see AXPropertyFilter.
kPropertyFilterAllow,
kPropertyFilterAllowEmpty,
kPropertyFilterDeny,
// Scripting instruction.
kScript,
// Node filter directives, see AXNodeFilter.
kNodeFilter,
// Events tree dump directive to enable accessibility tree dumping in events
// tests.
kEventsTreeDump,
};
// Parses directives from the given line.
static Directive ParseDirective(const std::string& directive_prefix,
std::string_view directive);
// Adds a given directive into a scenario.
void ProcessDirective(Directive directive, std::string_view value);
};
} // namespace ui
#endif // UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_INSPECT_SCENARIO_H_