aboutsummaryrefslogtreecommitdiff
path: root/src/gfxstream/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/gfxstream/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py')
-rw-r--r--src/gfxstream/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py384
1 files changed, 384 insertions, 0 deletions
diff --git a/src/gfxstream/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py b/src/gfxstream/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py
new file mode 100644
index 00000000000..739a32ee503
--- /dev/null
+++ b/src/gfxstream/codegen/vulkan/vulkan-docs-next/scripts/test_reflow.py
@@ -0,0 +1,384 @@
+#!/usr/bin/python3
+#
+# Copyright 2023 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s): Shahbaz Youssefi <syoussefi@google.com>
+#
+# Purpose: This file contains tests for reflow.py
+
+import pytest
+
+from collections import namedtuple
+import os
+
+from reflib import loadFile
+from reflow import reflowFile
+
+testsDir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'reflow-tests')
+resultsDir = os.path.join(testsDir, 'results')
+
+Variations = namedtuple('Variations', ['reflow', 'addVUID'])
+
+def makeTestId(variations):
+ separator = ''
+ testid = ''
+
+ if not variations.reflow:
+ testid += separator + 'noreflow'
+ separator = '-'
+
+ if not variations.addVUID:
+ testid += separator + 'novuid'
+ separator = '-'
+
+ if testid == '':
+ testid = 'default'
+
+ return testid
+
+class ReflowArgs:
+ def __init__(self, variations):
+ self.overwrite = False
+ self.nowrite = False
+ self.outDir = os.path.join(resultsDir, makeTestId(variations))
+ self.check = True
+ self.checkVUID = True
+ self.noflow = not variations.reflow
+ self.margin = 76
+ self.suffix = ''
+ self.nextvu = 10000 if variations.addVUID else None
+ self.maxvu = 99999
+ self.warnCount = 0
+ self.vuidDict = {}
+
+ self.variations = variations
+
+variations = [
+ Variations(False, False),
+ Variations(False, True),
+ Variations(True, False),
+ Variations(True, True),
+]
+
+@pytest.fixture(params=variations, ids=makeTestId)
+def args(request):
+ return ReflowArgs(request.param)
+
+def getPath(*names):
+ return os.path.join(testsDir, *names)
+
+def match_with_expected(resultFile, expectation):
+ result, result_newline = loadFile(resultFile)
+ expect, expect_newline = loadFile(expectation)
+
+ assert(result_newline == expect_newline)
+ assert(result == expect)
+
+def run_reflow_test(args, filetag):
+ testid = makeTestId(args.variations)
+
+ source = 'src-' + filetag + '.adoc'
+ expect = 'expect-' + filetag + '-' + testid + '.adoc'
+
+ filename = getPath(source)
+
+ reflowFile(filename, args)
+
+ match_with_expected(getPath(resultsDir, testid, source), getPath(expect))
+
+def match_warn_count(args, expected):
+ assert(args.warnCount == expected)
+
+def match_vuid_dict(args, expectedExisting, expectedNew):
+ expected = expectedExisting
+ if args.nextvu is not None:
+ expected = expected | expectedNew
+
+ assert(sorted(args.vuidDict.keys()) == sorted(expected.keys()))
+
+ for vuid, locations in args.vuidDict.items():
+ for location, expectedLocation in zip(locations, expected[vuid]):
+ filename, tagline = location
+ expectedFilename, expectedTag = expectedLocation
+
+ assert(expectedFilename in filename)
+ assert(expectedTag in tagline)
+
+def test_text(args):
+ """Basic test of text reflow."""
+ run_reflow_test(args, 'text')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {}, {})
+
+def test_table(args):
+ """Basic test that ensures tables are not reformatted."""
+ run_reflow_test(args, 'table')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {}, {})
+
+def test_vu(args):
+ """Basic test that VU reflows work."""
+ run_reflow_test(args, 'vu')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {'01993':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-image-01993]]']],
+ '00002':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-image-00002]]']],
+ '01545':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-image-01545]]']],
+ '00003':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-image-00003]]']],
+ '00004':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']],
+ '00005':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-00005]]']],
+ '01394':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-01394]]']],
+ '02498':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-aspectMask-02498]]']],
+ '01470':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-baseMipLevel-01470]]']],
+ '01692':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-pRanges-01692]]']],
+ '01472':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]']],
+ '01693':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-pRanges-01693]]']],
+ '00007':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-image-00007]]']],
+ '04961':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-pColor-04961]]']],
+ '01805':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-commandBuffer-01805]]']],
+ '01806':
+ [['scripts/reflow-tests/src-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-commandBuffer-01806]]']]},
+ {})
+
+# Commented out now that VU extractor supports this, but may
+# need to refactor through a conventions object enable if
+# OpenXR still needs this.
+# def test_ifdef_in_vu(args):
+# """Test that ifdef in VUs are warned against."""
+# run_reflow_test(args, 'ifdef-in-vu')
+# match_warn_count(args, 1)
+# match_vuid_dict(args, {'00003':
+# [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+# '[[VUID-vkCmdClearColorImage-image-00003]]']],
+# '00004':
+# [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+# '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']],
+# '00005':
+# [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+# '[[VUID-vkCmdClearColorImage-imageLayout-00005]]']],
+# '04961':
+# [['scripts/reflow-tests/src-ifdef-in-vu.adoc',
+# '[[VUID-vkCmdClearColorImage-pColor-04961]]']]},
+# {})
+
+def test_vuid_repeat(args):
+ """Test that same VUID in multiple VUs is detected."""
+ run_reflow_test(args, 'vuid-repeat')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {'02498':
+ [['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-aspectMask-02498]]'],
+ ['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-pRanges-02498]]'],
+ ['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-pRanges-02498]]'],
+ ['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-pColor-02498]]']],
+ '01470':
+ [['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-baseMipLevel-01470]]']],
+ '00007':
+ [['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-baseArrayLayer-00007]]'],
+ ['scripts/reflow-tests/src-vuid-repeat.adoc',
+ '[[VUID-vkCmdClearColorImage-image-00007]]']]},
+ {})
+
+def test_new_vuid(args):
+ """Test that VUID generation works."""
+ run_reflow_test(args, 'new-vuid')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {'01993':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-image-01993]]']],
+ '01545':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-image-01545]]']],
+ '00004':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']],
+ '00005':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-00005]]']],
+ '02498':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-aspectMask-02498]]']],
+ '01470':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-baseMipLevel-01470]]']],
+ '01472':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-baseArrayLayer-01472]]']],
+ '01693':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-pRanges-01693]]']],
+ '01805':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-commandBuffer-01805]]']],
+ '01806':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-commandBuffer-01806]]']]},
+ {'10000':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-image-10000]]']],
+ '10001':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-image-10001]]']],
+ '10002':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-10002]]']],
+ '10003':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-pRanges-10003]]']],
+ '10004':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-image-10004]]']],
+ '10005':
+ [['scripts/reflow-tests/src-new-vuid.adoc',
+ '[[VUID-vkCmdClearColorImage-pColor-10005]]']]})
+
+def test_new_vuid_attribute(args):
+ """Test that VUID generation works and prioritizes attributes for tags."""
+ run_reflow_test(args, 'new-vuid-attribute')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {}, {'10000':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10000]]']],
+ '10001':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imagesubresource}-10001]]']],
+ '10002':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10002]]']],
+ '10003':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10003]]']],
+ '10004':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10004]]']],
+ '10005':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10005]]']],
+ '10006':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10006]]']],
+ '10007':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10007]]']],
+ '10008':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10008]]']],
+ '10009':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10009]]']],
+ '10010':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10010]]']],
+ '10011':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imagesubresource}-10011]]']],
+ '10012':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10012]]']],
+ '10013':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10013]]']],
+ '10014':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10014]]']],
+ '10015':
+ [['scripts/reflow-tests/src-new-vuid-attribute.adoc',
+ '[[VUID-{refpage}-{imageparam}-10015]]']]})
+
+def test_common_validity(args):
+ """Test that VUID generation works for common validity files."""
+ run_reflow_test(args, 'common-validity')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {'00171':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-pRegions-00171]]']],
+ '00176':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-srcBuffer-00176]]']],
+ '00177':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-dstImage-00177]]']],
+ '00178':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-dstImage-00178]]']],
+ '00181':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-dstImageLayout-00181]]']]},
+ {'10000':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-pRegions-10000]]']],
+ '10001':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-srcBuffer-10001]]']],
+ '10002':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-dstImage-10002]]']],
+ '10003':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-dstImage-10003]]']],
+ '10004':
+ [['scripts/reflow-tests/src-common-validity.adoc',
+ '[[VUID-{refpage}-dstImageLayout-10004]]']]})
+
+def test_nested_lists_in_vu(args):
+ """Test that nested lists in VU work correctly."""
+ run_reflow_test(args, 'nested-lists-in-vu')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {'07284':
+ [['scripts/reflow-tests/src-nested-lists-in-vu.adoc',
+ '[[VUID-{refpage}-multisampledRenderToSingleSampled-07284]]']],
+ '08971':
+ [['scripts/reflow-tests/src-nested-lists-in-vu.adoc',
+ '[[VUID-{refpage}-None-08971]]']]},
+ {'10000':
+ [['scripts/reflow-tests/src-nested-lists-in-vu.adoc',
+ '[[VUID-{refpage}-None-10000]]']]})
+
+
+def test_math_block_in_vu(args):
+ """Test that nested lists in VU work correctly."""
+ run_reflow_test(args, 'math-block-in-vu')
+ match_warn_count(args, 0)
+ match_vuid_dict(args, {'00004':
+ [['scripts/reflow-tests/src-math-block-in-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-imageLayout-00004]]']]},
+ {'10000':
+ [['scripts/reflow-tests/src-math-block-in-vu.adoc',
+ '[[VUID-vkCmdClearColorImage-image-10000]]']]})