Every python-pptx MSO_SHAPE preset round-trips to the ECMA-376 <a:prstGeom/@prst> token recorded on the enum member's xml_value. This manifest is a parameterised family: one manifest file expands into one case per MSO_SHAPE member (~180 cases), each backed by a distinct fixture pptx/shape-preset-geometry--<id>.pptx generated from the same gen_shape_preset_geometry.py script parameterised by --preset MSO_SHAPE_NAME.
| Library | Pass | Fail | Pending |
|---|---|---|---|
python-pptx | 0 | 0 | 182 |
pptxjs | 182 | 0 | 0 |
preset (182 values): action-button-back-or-previous, action-button-beginning, action-button-custom, action-button-document, action-button-end, action-button-forward-or-next, action-button-help, action-button-home, action-button-information, action-button-movie, action-button-return, action-button-sound, arc, balloon, bent-arrow, bent-up-arrow, bevel, block-arc, can, chart-plus, chart-star, chart-x, chevron, chord, circular-arrow, cloud, cloud-callout, corner, corner-tabs, cross, cube, curved-down-arrow, curved-down-ribbon, curved-left-arrow, curved-right-arrow, curved-up-arrow, curved-up-ribbon, decagon, diagonal-stripe, diamond, dodecagon, donut, double-brace, double-bracket, double-wave, down-arrow, down-arrow-callout, down-ribbon, explosion1, explosion2, flowchart-alternate-process, flowchart-card, flowchart-collate, flowchart-connector, flowchart-data, flowchart-decision, flowchart-delay, flowchart-direct-access-storage, flowchart-display, flowchart-document, flowchart-extract, flowchart-internal-storage, flowchart-magnetic-disk, flowchart-manual-input, flowchart-manual-operation, flowchart-merge, flowchart-multidocument, flowchart-offline-storage, flowchart-offpage-connector, flowchart-or, flowchart-predefined-process, flowchart-preparation, flowchart-process, flowchart-punched-tape, flowchart-sequential-access-storage, flowchart-sort, flowchart-stored-data, flowchart-summing-junction, flowchart-terminator, folded-corner, frame, funnel, gear-6, gear-9, half-frame, heart, heptagon, hexagon, horizontal-scroll, isosceles-triangle, left-arrow, left-arrow-callout, left-brace, left-bracket, left-circular-arrow, left-right-arrow, left-right-arrow-callout, left-right-circular-arrow, left-right-ribbon, left-right-up-arrow, left-up-arrow, lightning-bolt, line-callout-1, line-callout-1-accent-bar, line-callout-1-border-and-accent-bar, line-callout-1-no-border, line-callout-2, line-callout-2-accent-bar, line-callout-2-border-and-accent-bar, line-callout-2-no-border, line-callout-3, line-callout-3-accent-bar, line-callout-3-border-and-accent-bar, line-callout-3-no-border, line-callout-4, line-callout-4-accent-bar, line-callout-4-border-and-accent-bar, line-callout-4-no-border, line-inverse, math-divide, math-equal, math-minus, math-multiply, math-not-equal, math-plus, moon, non-isosceles-trapezoid, notched-right-arrow, no-symbol, octagon, oval, oval-callout, parallelogram, pentagon, pie, pie-wedge, plaque, plaque-tabs, quad-arrow, quad-arrow-callout, rectangle, rectangular-callout, regular-pentagon, right-arrow, right-arrow-callout, right-brace, right-bracket, right-triangle, rounded-rectangle, rounded-rectangular-callout, round-1-rectangle, round-2-diag-rectangle, round-2-same-rectangle, smiley-face, snip-1-rectangle, snip-2-diag-rectangle, snip-2-same-rectangle, snip-round-rectangle, square-tabs, star-10-point, star-12-point, star-16-point, star-24-point, star-32-point, star-4-point, star-5-point, star-6-point, star-7-point, star-8-point, striped-right-arrow, sun, swoosh-arrow, tear, trapezoid, up-arrow, up-arrow-callout, up-down-arrow, up-down-arrow-callout, up-ribbon, u-turn-arrow, vertical-scroll, wavescripts/gen_shape_preset_geometry.py — runs with --arg_template --preset {preset.mso} --out fixtures/pptx/shape-preset-geometry--{preset.id}.pptx
#!/usr/bin/env python3
"""Generate a single ``fixtures/pptx/shape-preset-geometry--<id>.pptx``.
Parameterised generator: the ``features/pptx/shape-preset-geometry.json``
manifest expands to one case per :class:`pptx.enum.shapes.MSO_SHAPE`
member, and the conformance runner invokes this script once per case
with ``--preset <MSO_SHAPE_NAME> --out <path>``.
Each invocation produces a single-slide presentation containing one
auto-shape added via ``shapes.add_shape(MSO_SHAPE.<name>, ...)``. The
underlying ``<a:prstGeom/@prst>`` token is whatever python-pptx emits
for that enum member; the manifest asserts that this token matches
``MSO_SHAPE.<name>.xml_value``.
"""
from __future__ import annotations
import argparse
import datetime as _dt
from pathlib import Path
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE
from pptx.util import Inches
_REPO_ROOT = Path(__file__).resolve().parent.parent
_REPRODUCIBLE_DT = _dt.datetime(2000, 1, 1, 0, 0, 0)
def _write(preset_name: str, out: Path) -> None:
shape_enum = getattr(MSO_SHAPE, preset_name)
prs = Presentation()
# "Title Only" layout — a title placeholder we leave empty plus our shape.
slide = prs.slides.add_slide(prs.slide_layouts[5])
slide.shapes.add_shape(shape_enum, Inches(1), Inches(1), Inches(2), Inches(2))
out.parent.mkdir(parents=True, exist_ok=True)
prs.save(out, zip_date_time=_REPRODUCIBLE_DT)
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument(
"--preset",
required=True,
help="MSO_SHAPE member name, e.g. RECTANGLE",
)
parser.add_argument(
"--out",
required=True,
help="Output fixture path (absolute or repo-relative)",
)
args = parser.parse_args()
out_path = Path(args.out)
if not out_path.is_absolute():
out_path = _REPO_ROOT / out_path
_write(args.preset, out_path)
print(out_path)
return 0
if __name__ == "__main__":
raise SystemExit(main())
{
"$schema": "../manifest.schema.json",
"id": "pptx/shape-preset-geometry",
"kind": "parameterised",
"title": "Shape preset geometry",
"format": "pptx",
"category": "shapes",
"summary": "Every python-pptx MSO_SHAPE preset round-trips to the ECMA-376 <a:prstGeom/@prst> token recorded on the enum member's xml_value. This manifest is a parameterised family: one manifest file expands into one case per MSO_SHAPE member (~180 cases), each backed by a distinct fixture pptx/shape-preset-geometry--<id>.pptx generated from the same gen_shape_preset_geometry.py script parameterised by --preset MSO_SHAPE_NAME.",
"spec": {
"source": "ecma-376-5-part-1",
"clause": "20.1.9.18",
"element": "a:prstGeom",
"rnc_reference": "spec/ecma-376-5/part-1/rnc/DrawingML.rnc",
"xsd_reference": "spec/ecma-376-5/part-1/xsd/dml-shape.xsd",
"notes": "DrawingML <a:prstGeom prst=\"...\"/> selects one of the ~180 preset auto-shape geometries enumerated in the ST_ShapeType simple type. python-pptx exposes these via pptx.enum.shapes.MSO_SHAPE, where each enum member's xml_value attribute holds the prst token emitted into the XML. This family asserts the identity: for every MSO_SHAPE member, shapes.add_shape(member, ...) emits <a:prstGeom prst=\"member.xml_value\"/>."
},
"fixtures": {
"machine": "pptx/shape-preset-geometry"
},
"generator": {
"python": "scripts/gen_shape_preset_geometry.py",
"arg_template": "--preset {preset.mso} --out fixtures/pptx/shape-preset-geometry--{preset.id}.pptx"
},
"parameters": {
"preset": [
{
"id": "action-button-back-or-previous",
"mso": "ACTION_BUTTON_BACK_OR_PREVIOUS",
"prst": "actionButtonBackPrevious"
},
{
"id": "action-button-beginning",
"mso": "ACTION_BUTTON_BEGINNING",
"prst": "actionButtonBeginning"
},
{
"id": "action-button-custom",
"mso": "ACTION_BUTTON_CUSTOM",
"prst": "actionButtonBlank"
},
{
"id": "action-button-document",
"mso": "ACTION_BUTTON_DOCUMENT",
"prst": "actionButtonDocument"
},
{
"id": "action-button-end",
"mso": "ACTION_BUTTON_END",
"prst": "actionButtonEnd"
},
{
"id": "action-button-forward-or-next",
"mso": "ACTION_BUTTON_FORWARD_OR_NEXT",
"prst": "actionButtonForwardNext"
},
{
"id": "action-button-help",
"mso": "ACTION_BUTTON_HELP",
"prst": "actionButtonHelp"
},
{
"id": "action-button-home",
"mso": "ACTION_BUTTON_HOME",
"prst": "actionButtonHome"
},
{
"id": "action-button-information",
"mso": "ACTION_BUTTON_INFORMATION",
"prst": "actionButtonInformation"
},
{
"id": "action-button-movie",
"mso": "ACTION_BUTTON_MOVIE",
"prst": "actionButtonMovie"
},
{
"id": "action-button-return",
"mso": "ACTION_BUTTON_RETURN",
"prst": "actionButtonReturn"
},
{
"id": "action-button-sound",
"mso": "ACTION_BUTTON_SOUND",
"prst": "actionButtonSound"
},
{
"id": "arc",
"mso": "ARC",
"prst": "arc"
},
{
"id": "balloon",
"mso": "BALLOON",
"prst": "wedgeRoundRectCallout"
},
{
"id": "bent-arrow",
"mso": "BENT_ARROW",
"prst": "bentArrow"
},
{
"id": "bent-up-arrow",
"mso": "BENT_UP_ARROW",
"prst": "bentUpArrow"
},
{
"id": "bevel",
"mso": "BEVEL",
"prst": "bevel"
},
{
"id": "block-arc",
"mso": "BLOCK_ARC",
"prst": "blockArc"
},
{
"id": "can",
"mso": "CAN",
"prst": "can"
},
{
"id": "chart-plus",
"mso": "CHART_PLUS",
"prst": "chartPlus"
},
{
"id": "chart-star",
"mso": "CHART_STAR",
"prst": "chartStar"
},
{
"id": "chart-x",
"mso": "CHART_X",
"prst": "chartX"
},
{
"id": "chevron",
"mso": "CHEVRON",
"prst": "chevron"
},
{
"id": "chord",
"mso": "CHORD",
"prst": "chord"
},
{
"id": "circular-arrow",
"mso": "CIRCULAR_ARROW",
"prst": "circularArrow"
},
{
"id": "cloud",
"mso": "CLOUD",
"prst": "cloud"
},
{
"id": "cloud-callout",
"mso": "CLOUD_CALLOUT",
"prst": "cloudCallout"
},
{
"id": "corner",
"mso": "CORNER",
"prst": "corner"
},
{
"id": "corner-tabs",
"mso": "CORNER_TABS",
"prst": "cornerTabs"
},
{
"id": "cross",
"mso": "CROSS",
"prst": "plus"
},
{
"id": "cube",
"mso": "CUBE",
"prst": "cube"
},
{
"id": "curved-down-arrow",
"mso": "CURVED_DOWN_ARROW",
"prst": "curvedDownArrow"
},
{
"id": "curved-down-ribbon",
"mso": "CURVED_DOWN_RIBBON",
"prst": "ellipseRibbon"
},
{
"id": "curved-left-arrow",
"mso": "CURVED_LEFT_ARROW",
"prst": "curvedLeftArrow"
},
{
"id": "curved-right-arrow",
"mso": "CURVED_RIGHT_ARROW",
"prst": "curvedRightArrow"
},
{
"id": "curved-up-arrow",
"mso": "CURVED_UP_ARROW",
"prst": "curvedUpArrow"
},
{
"id": "curved-up-ribbon",
"mso": "CURVED_UP_RIBBON",
"prst": "ellipseRibbon2"
},
{
"id": "decagon",
"mso": "DECAGON",
"prst": "decagon"
},
{
"id": "diagonal-stripe",
"mso": "DIAGONAL_STRIPE",
"prst": "diagStripe"
},
{
"id": "diamond",
"mso": "DIAMOND",
"prst": "diamond"
},
{
"id": "dodecagon",
"mso": "DODECAGON",
"prst": "dodecagon"
},
{
"id": "donut",
"mso": "DONUT",
"prst": "donut"
},
{
"id": "double-brace",
"mso": "DOUBLE_BRACE",
"prst": "bracePair"
},
{
"id": "double-bracket",
"mso": "DOUBLE_BRACKET",
"prst": "bracketPair"
},
{
"id": "double-wave",
"mso": "DOUBLE_WAVE",
"prst": "doubleWave"
},
{
"id": "down-arrow",
"mso": "DOWN_ARROW",
"prst": "downArrow"
},
{
"id": "down-arrow-callout",
"mso": "DOWN_ARROW_CALLOUT",
"prst": "downArrowCallout"
},
{
"id": "down-ribbon",
"mso": "DOWN_RIBBON",
"prst": "ribbon"
},
{
"id": "explosion1",
"mso": "EXPLOSION1",
"prst": "irregularSeal1"
},
{
"id": "explosion2",
"mso": "EXPLOSION2",
"prst": "irregularSeal2"
},
{
"id": "flowchart-alternate-process",
"mso": "FLOWCHART_ALTERNATE_PROCESS",
"prst": "flowChartAlternateProcess"
},
{
"id": "flowchart-card",
"mso": "FLOWCHART_CARD",
"prst": "flowChartPunchedCard"
},
{
"id": "flowchart-collate",
"mso": "FLOWCHART_COLLATE",
"prst": "flowChartCollate"
},
{
"id": "flowchart-connector",
"mso": "FLOWCHART_CONNECTOR",
"prst": "flowChartConnector"
},
{
"id": "flowchart-data",
"mso": "FLOWCHART_DATA",
"prst": "flowChartInputOutput"
},
{
"id": "flowchart-decision",
"mso": "FLOWCHART_DECISION",
"prst": "flowChartDecision"
},
{
"id": "flowchart-delay",
"mso": "FLOWCHART_DELAY",
"prst": "flowChartDelay"
},
{
"id": "flowchart-direct-access-storage",
"mso": "FLOWCHART_DIRECT_ACCESS_STORAGE",
"prst": "flowChartMagneticDrum"
},
{
"id": "flowchart-display",
"mso": "FLOWCHART_DISPLAY",
"prst": "flowChartDisplay"
},
{
"id": "flowchart-document",
"mso": "FLOWCHART_DOCUMENT",
"prst": "flowChartDocument"
},
{
"id": "flowchart-extract",
"mso": "FLOWCHART_EXTRACT",
"prst": "flowChartExtract"
},
{
"id": "flowchart-internal-storage",
"mso": "FLOWCHART_INTERNAL_STORAGE",
"prst": "flowChartInternalStorage"
},
{
"id": "flowchart-magnetic-disk",
"mso": "FLOWCHART_MAGNETIC_DISK",
"prst": "flowChartMagneticDisk"
},
{
"id": "flowchart-manual-input",
"mso": "FLOWCHART_MANUAL_INPUT",
"prst": "flowChartManualInput"
},
{
"id": "flowchart-manual-operation",
"mso": "FLOWCHART_MANUAL_OPERATION",
"prst": "flowChartManualOperation"
},
{
"id": "flowchart-merge",
"mso": "FLOWCHART_MERGE",
"prst": "flowChartMerge"
},
{
"id": "flowchart-multidocument",
"mso": "FLOWCHART_MULTIDOCUMENT",
"prst": "flowChartMultidocument"
},
{
"id": "flowchart-offline-storage",
"mso": "FLOWCHART_OFFLINE_STORAGE",
"prst": "flowChartOfflineStorage"
},
{
"id": "flowchart-offpage-connector",
"mso": "FLOWCHART_OFFPAGE_CONNECTOR",
"prst": "flowChartOffpageConnector"
},
{
"id": "flowchart-or",
"mso": "FLOWCHART_OR",
"prst": "flowChartOr"
},
{
"id": "flowchart-predefined-process",
"mso": "FLOWCHART_PREDEFINED_PROCESS",
"prst": "flowChartPredefinedProcess"
},
{
"id": "flowchart-preparation",
"mso": "FLOWCHART_PREPARATION",
"prst": "flowChartPreparation"
},
{
"id": "flowchart-process",
"mso": "FLOWCHART_PROCESS",
"prst": "flowChartProcess"
},
{
"id": "flowchart-punched-tape",
"mso": "FLOWCHART_PUNCHED_TAPE",
"prst": "flowChartPunchedTape"
},
{
"id": "flowchart-sequential-access-storage",
"mso": "FLOWCHART_SEQUENTIAL_ACCESS_STORAGE",
"prst": "flowChartMagneticTape"
},
{
"id": "flowchart-sort",
"mso": "FLOWCHART_SORT",
"prst": "flowChartSort"
},
{
"id": "flowchart-stored-data",
"mso": "FLOWCHART_STORED_DATA",
"prst": "flowChartOnlineStorage"
},
{
"id": "flowchart-summing-junction",
"mso": "FLOWCHART_SUMMING_JUNCTION",
"prst": "flowChartSummingJunction"
},
{
"id": "flowchart-terminator",
"mso": "FLOWCHART_TERMINATOR",
"prst": "flowChartTerminator"
},
{
"id": "folded-corner",
"mso": "FOLDED_CORNER",
"prst": "foldedCorner"
},
{
"id": "frame",
"mso": "FRAME",
"prst": "frame"
},
{
"id": "funnel",
"mso": "FUNNEL",
"prst": "funnel"
},
{
"id": "gear-6",
"mso": "GEAR_6",
"prst": "gear6"
},
{
"id": "gear-9",
"mso": "GEAR_9",
"prst": "gear9"
},
{
"id": "half-frame",
"mso": "HALF_FRAME",
"prst": "halfFrame"
},
{
"id": "heart",
"mso": "HEART",
"prst": "heart"
},
{
"id": "heptagon",
"mso": "HEPTAGON",
"prst": "heptagon"
},
{
"id": "hexagon",
"mso": "HEXAGON",
"prst": "hexagon"
},
{
"id": "horizontal-scroll",
"mso": "HORIZONTAL_SCROLL",
"prst": "horizontalScroll"
},
{
"id": "isosceles-triangle",
"mso": "ISOSCELES_TRIANGLE",
"prst": "triangle"
},
{
"id": "left-arrow",
"mso": "LEFT_ARROW",
"prst": "leftArrow"
},
{
"id": "left-arrow-callout",
"mso": "LEFT_ARROW_CALLOUT",
"prst": "leftArrowCallout"
},
{
"id": "left-brace",
"mso": "LEFT_BRACE",
"prst": "leftBrace"
},
{
"id": "left-bracket",
"mso": "LEFT_BRACKET",
"prst": "leftBracket"
},
{
"id": "left-circular-arrow",
"mso": "LEFT_CIRCULAR_ARROW",
"prst": "leftCircularArrow"
},
{
"id": "left-right-arrow",
"mso": "LEFT_RIGHT_ARROW",
"prst": "leftRightArrow"
},
{
"id": "left-right-arrow-callout",
"mso": "LEFT_RIGHT_ARROW_CALLOUT",
"prst": "leftRightArrowCallout"
},
{
"id": "left-right-circular-arrow",
"mso": "LEFT_RIGHT_CIRCULAR_ARROW",
"prst": "leftRightCircularArrow"
},
{
"id": "left-right-ribbon",
"mso": "LEFT_RIGHT_RIBBON",
"prst": "leftRightRibbon"
},
{
"id": "left-right-up-arrow",
"mso": "LEFT_RIGHT_UP_ARROW",
"prst": "leftRightUpArrow"
},
{
"id": "left-up-arrow",
"mso": "LEFT_UP_ARROW",
"prst": "leftUpArrow"
},
{
"id": "lightning-bolt",
"mso": "LIGHTNING_BOLT",
"prst": "lightningBolt"
},
{
"id": "line-callout-1",
"mso": "LINE_CALLOUT_1",
"prst": "borderCallout1"
},
{
"id": "line-callout-1-accent-bar",
"mso": "LINE_CALLOUT_1_ACCENT_BAR",
"prst": "accentCallout1"
},
{
"id": "line-callout-1-border-and-accent-bar",
"mso": "LINE_CALLOUT_1_BORDER_AND_ACCENT_BAR",
"prst": "accentBorderCallout1"
},
{
"id": "line-callout-1-no-border",
"mso": "LINE_CALLOUT_1_NO_BORDER",
"prst": "callout1"
},
{
"id": "line-callout-2",
"mso": "LINE_CALLOUT_2",
"prst": "borderCallout2"
},
{
"id": "line-callout-2-accent-bar",
"mso": "LINE_CALLOUT_2_ACCENT_BAR",
"prst": "accentCallout2"
},
{
"id": "line-callout-2-border-and-accent-bar",
"mso": "LINE_CALLOUT_2_BORDER_AND_ACCENT_BAR",
"prst": "accentBorderCallout2"
},
{
"id": "line-callout-2-no-border",
"mso": "LINE_CALLOUT_2_NO_BORDER",
"prst": "callout2"
},
{
"id": "line-callout-3",
"mso": "LINE_CALLOUT_3",
"prst": "borderCallout3"
},
{
"id": "line-callout-3-accent-bar",
"mso": "LINE_CALLOUT_3_ACCENT_BAR",
"prst": "accentCallout3"
},
{
"id": "line-callout-3-border-and-accent-bar",
"mso": "LINE_CALLOUT_3_BORDER_AND_ACCENT_BAR",
"prst": "accentBorderCallout3"
},
{
"id": "line-callout-3-no-border",
"mso": "LINE_CALLOUT_3_NO_BORDER",
"prst": "callout3"
},
{
"id": "line-callout-4",
"mso": "LINE_CALLOUT_4",
"prst": "borderCallout3"
},
{
"id": "line-callout-4-accent-bar",
"mso": "LINE_CALLOUT_4_ACCENT_BAR",
"prst": "accentCallout3"
},
{
"id": "line-callout-4-border-and-accent-bar",
"mso": "LINE_CALLOUT_4_BORDER_AND_ACCENT_BAR",
"prst": "accentBorderCallout3"
},
{
"id": "line-callout-4-no-border",
"mso": "LINE_CALLOUT_4_NO_BORDER",
"prst": "callout3"
},
{
"id": "line-inverse",
"mso": "LINE_INVERSE",
"prst": "lineInv"
},
{
"id": "math-divide",
"mso": "MATH_DIVIDE",
"prst": "mathDivide"
},
{
"id": "math-equal",
"mso": "MATH_EQUAL",
"prst": "mathEqual"
},
{
"id": "math-minus",
"mso": "MATH_MINUS",
"prst": "mathMinus"
},
{
"id": "math-multiply",
"mso": "MATH_MULTIPLY",
"prst": "mathMultiply"
},
{
"id": "math-not-equal",
"mso": "MATH_NOT_EQUAL",
"prst": "mathNotEqual"
},
{
"id": "math-plus",
"mso": "MATH_PLUS",
"prst": "mathPlus"
},
{
"id": "moon",
"mso": "MOON",
"prst": "moon"
},
{
"id": "non-isosceles-trapezoid",
"mso": "NON_ISOSCELES_TRAPEZOID",
"prst": "nonIsoscelesTrapezoid"
},
{
"id": "notched-right-arrow",
"mso": "NOTCHED_RIGHT_ARROW",
"prst": "notchedRightArrow"
},
{
"id": "no-symbol",
"mso": "NO_SYMBOL",
"prst": "noSmoking"
},
{
"id": "octagon",
"mso": "OCTAGON",
"prst": "octagon"
},
{
"id": "oval",
"mso": "OVAL",
"prst": "ellipse"
},
{
"id": "oval-callout",
"mso": "OVAL_CALLOUT",
"prst": "wedgeEllipseCallout"
},
{
"id": "parallelogram",
"mso": "PARALLELOGRAM",
"prst": "parallelogram"
},
{
"id": "pentagon",
"mso": "PENTAGON",
"prst": "homePlate"
},
{
"id": "pie",
"mso": "PIE",
"prst": "pie"
},
{
"id": "pie-wedge",
"mso": "PIE_WEDGE",
"prst": "pieWedge"
},
{
"id": "plaque",
"mso": "PLAQUE",
"prst": "plaque"
},
{
"id": "plaque-tabs",
"mso": "PLAQUE_TABS",
"prst": "plaqueTabs"
},
{
"id": "quad-arrow",
"mso": "QUAD_ARROW",
"prst": "quadArrow"
},
{
"id": "quad-arrow-callout",
"mso": "QUAD_ARROW_CALLOUT",
"prst": "quadArrowCallout"
},
{
"id": "rectangle",
"mso": "RECTANGLE",
"prst": "rect"
},
{
"id": "rectangular-callout",
"mso": "RECTANGULAR_CALLOUT",
"prst": "wedgeRectCallout"
},
{
"id": "regular-pentagon",
"mso": "REGULAR_PENTAGON",
"prst": "pentagon"
},
{
"id": "right-arrow",
"mso": "RIGHT_ARROW",
"prst": "rightArrow"
},
{
"id": "right-arrow-callout",
"mso": "RIGHT_ARROW_CALLOUT",
"prst": "rightArrowCallout"
},
{
"id": "right-brace",
"mso": "RIGHT_BRACE",
"prst": "rightBrace"
},
{
"id": "right-bracket",
"mso": "RIGHT_BRACKET",
"prst": "rightBracket"
},
{
"id": "right-triangle",
"mso": "RIGHT_TRIANGLE",
"prst": "rtTriangle"
},
{
"id": "rounded-rectangle",
"mso": "ROUNDED_RECTANGLE",
"prst": "roundRect"
},
{
"id": "rounded-rectangular-callout",
"mso": "ROUNDED_RECTANGULAR_CALLOUT",
"prst": "wedgeRoundRectCallout"
},
{
"id": "round-1-rectangle",
"mso": "ROUND_1_RECTANGLE",
"prst": "round1Rect"
},
{
"id": "round-2-diag-rectangle",
"mso": "ROUND_2_DIAG_RECTANGLE",
"prst": "round2DiagRect"
},
{
"id": "round-2-same-rectangle",
"mso": "ROUND_2_SAME_RECTANGLE",
"prst": "round2SameRect"
},
{
"id": "smiley-face",
"mso": "SMILEY_FACE",
"prst": "smileyFace"
},
{
"id": "snip-1-rectangle",
"mso": "SNIP_1_RECTANGLE",
"prst": "snip1Rect"
},
{
"id": "snip-2-diag-rectangle",
"mso": "SNIP_2_DIAG_RECTANGLE",
"prst": "snip2DiagRect"
},
{
"id": "snip-2-same-rectangle",
"mso": "SNIP_2_SAME_RECTANGLE",
"prst": "snip2SameRect"
},
{
"id": "snip-round-rectangle",
"mso": "SNIP_ROUND_RECTANGLE",
"prst": "snipRoundRect"
},
{
"id": "square-tabs",
"mso": "SQUARE_TABS",
"prst": "squareTabs"
},
{
"id": "star-10-point",
"mso": "STAR_10_POINT",
"prst": "star10"
},
{
"id": "star-12-point",
"mso": "STAR_12_POINT",
"prst": "star12"
},
{
"id": "star-16-point",
"mso": "STAR_16_POINT",
"prst": "star16"
},
{
"id": "star-24-point",
"mso": "STAR_24_POINT",
"prst": "star24"
},
{
"id": "star-32-point",
"mso": "STAR_32_POINT",
"prst": "star32"
},
{
"id": "star-4-point",
"mso": "STAR_4_POINT",
"prst": "star4"
},
{
"id": "star-5-point",
"mso": "STAR_5_POINT",
"prst": "star5"
},
{
"id": "star-6-point",
"mso": "STAR_6_POINT",
"prst": "star6"
},
{
"id": "star-7-point",
"mso": "STAR_7_POINT",
"prst": "star7"
},
{
"id": "star-8-point",
"mso": "STAR_8_POINT",
"prst": "star8"
},
{
"id": "striped-right-arrow",
"mso": "STRIPED_RIGHT_ARROW",
"prst": "stripedRightArrow"
},
{
"id": "sun",
"mso": "SUN",
"prst": "sun"
},
{
"id": "swoosh-arrow",
"mso": "SWOOSH_ARROW",
"prst": "swooshArrow"
},
{
"id": "tear",
"mso": "TEAR",
"prst": "teardrop"
},
{
"id": "trapezoid",
"mso": "TRAPEZOID",
"prst": "trapezoid"
},
{
"id": "up-arrow",
"mso": "UP_ARROW",
"prst": "upArrow"
},
{
"id": "up-arrow-callout",
"mso": "UP_ARROW_CALLOUT",
"prst": "upArrowCallout"
},
{
"id": "up-down-arrow",
"mso": "UP_DOWN_ARROW",
"prst": "upDownArrow"
},
{
"id": "up-down-arrow-callout",
"mso": "UP_DOWN_ARROW_CALLOUT",
"prst": "upDownArrowCallout"
},
{
"id": "up-ribbon",
"mso": "UP_RIBBON",
"prst": "ribbon2"
},
{
"id": "u-turn-arrow",
"mso": "U_TURN_ARROW",
"prst": "uturnArrow"
},
{
"id": "vertical-scroll",
"mso": "VERTICAL_SCROLL",
"prst": "verticalScroll"
},
{
"id": "wave",
"mso": "WAVE",
"prst": "wave"
}
]
},
"assertions_template": [
{
"id": "prst-is-{preset.id}",
"part": "ppt/slides/slide1.xml",
"namespaces": {
"p": "http://schemas.openxmlformats.org/presentationml/2006/main",
"a": "http://schemas.openxmlformats.org/drawingml/2006/main"
},
"xpath": "//a:prstGeom/@prst",
"must": "equal",
"value": "{preset.prst}",
"description": "The slide's auto-shape must declare <a:prstGeom prst=\"{preset.prst}\"/>, matching MSO_SHAPE.{preset.mso}.xml_value."
}
],
"render_assertions_template": [
{
"id": "shape-preset-{preset.id}-dom-present",
"kind": "css_selector",
"selector": "[data-shape-preset='{preset.prst}'], .pptx-shape, [data-kind='sp'], section[data-slide] *, section.slide *",
"must": "exist",
"description": "A DOM node annotated as a shape (via data-shape-preset='{preset.prst}', .pptx-shape, or generic data-kind='sp') must exist. pptxjs renderer support for preset geometries is weak; this assertion records whatever the renderer exposes and falls back to any descendant under a slide section."
}
]
}