1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
// 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;
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,
};
// 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_
|