summaryrefslogtreecommitdiff
path: root/codegen/vulkan/scripts/test_check_spec_links_api_specific.py
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/vulkan/scripts/test_check_spec_links_api_specific.py')
-rw-r--r--codegen/vulkan/scripts/test_check_spec_links_api_specific.py122
1 files changed, 122 insertions, 0 deletions
diff --git a/codegen/vulkan/scripts/test_check_spec_links_api_specific.py b/codegen/vulkan/scripts/test_check_spec_links_api_specific.py
new file mode 100644
index 00000000..76ce6a9e
--- /dev/null
+++ b/codegen/vulkan/scripts/test_check_spec_links_api_specific.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python3
+#
+# Copyright (c) 2018-2019 Collabora, Ltd.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+# Author(s): Ryan Pavlik <ryan.pavlik@collabora.com>
+#
+# Purpose: This file contains tests for check_spec_links.py
+# that depend on the API being used.
+
+import pytest
+
+from check_spec_links import MacroChecker, MessageId, makeMacroChecker
+from spec_tools.console_printer import ConsolePrinter
+from spec_tools.macro_checker_file import shouldEntityBeText
+from test_check_spec_links import (CheckerWrapper, allMessages,
+ loneMsgReplacement, message, msgReplacement)
+
+
+@pytest.fixture
+def ckr(capsys):
+ """Fixture - add an arg named ckr to your test function to automatically get one passed to you."""
+ return CheckerWrapper(capsys)
+
+
+def test_vulkan_refpage_mismatch(ckr):
+ """Vulkan-specific tests of the REFPAGE_MISMATCH message."""
+ ckr.enabled([MessageId.REFPAGE_MISMATCH])
+ # Should error: this is actually a mismatch in Vulkan
+ assert(ckr.check(
+ """[open,refpage='VkQueueFlags']
+ --
+ include::{generated}/api/enums/VkQueueFlagBits.txt[]""").numDiagnostics() == 1)
+ assert(ckr.check(
+ """[open,refpage='VkQueueFlags']
+ --
+ include::{generated}/validity/enums/VkQueueFlagBits.txt[]""").numDiagnostics() == 1)
+
+ # Should not error: this is just an alias
+ assert(ckr.check(
+ """[open,refpage='vkUpdateDescriptorSetWithTemplate']
+ --
+ include::{generated}/api/protos/vkUpdateDescriptorSetWithTemplateKHR.txt[]""").numDiagnostics() == 0)
+
+
+def test_vulkan_refpage_missing(ckr):
+ """Vulkan-specific tests of the REFPAGE_MISSING message."""
+ ckr.enabled([MessageId.REFPAGE_MISSING])
+
+ # Should error: flags are expected to have their own ref page.
+ assert(ckr.check(
+ "include::{generated}/api/flags/VkQueueFlags.txt[]").numDiagnostics() == 1)
+
+
+def test_vulkan_refpage_block(ckr):
+ """Vulkan-specific tests of the REFPAGE_BLOCK message."""
+ ckr.enabled([MessageId.REFPAGE_BLOCK])
+
+ # Should have no errors: Non-refpage usage of '--' is acceptable
+ assert(not ckr.check(
+ """--
+ bla
+ --""").messages)
+
+ # Should have 1 error:
+ # - line after tag isn't '--'
+ result = ckr.check(
+ """--
+ [open,]
+ bla
+ --""")
+ assert(result.numDiagnostics() == 1)
+ # Internally, it's as if the following were the spec source, after putting in the "fake" lines
+ # (each of the added lines comes from one message):
+ #
+ # --
+ # [open,]
+ # --
+ # bla
+ # --
+ assert("but did not find, a line containing only -- following a reference page tag" in message(result))
+
+
+def test_vulkan_legacy(ckr):
+ """Test the LEGACY message which is Vulkan-only."""
+ ckr.enabled([MessageId.LEGACY])
+ # Should complain about LEGACY
+ assert(ckr.check('sname:VkDeviceMemory').numDiagnostics() == 1)
+
+
+def test_vulkan_alias(ckr):
+ """Tests of the aliasing data structure, dependent on Vulkan-specific registry."""
+ entity_db = ckr.ckr.entity_db
+
+ assert(entity_db.areAliases(
+ 'VkCommandPoolTrimFlagsKHR', 'VkCommandPoolTrimFlags'))
+ # Try one reversed-order, though the assert in that method should fire if this is wrong.
+ assert(entity_db.areAliases(
+ 'VkCommandPoolTrimFlags', 'VkCommandPoolTrimFlagsKHR'))
+
+ assert(entity_db.areAliases(
+ 'VkDescriptorUpdateTemplateKHR', 'VkDescriptorUpdateTemplate'))
+ assert(entity_db.areAliases('VkDescriptorUpdateTemplateTypeKHR',
+ 'VkDescriptorUpdateTemplateType'))
+ assert(entity_db.areAliases('VkQueueFamilyProperties2KHR',
+ 'VkQueueFamilyProperties2'))
+ assert(entity_db.areAliases('VK_COLORSPACE_SRGB_NONLINEAR_KHR',
+ 'VK_COLOR_SPACE_SRGB_NONLINEAR_KHR'))
+ assert(entity_db.areAliases('vkEnumeratePhysicalDeviceGroupsKHR',
+ 'vkEnumeratePhysicalDeviceGroups'))
+ assert(entity_db.areAliases(
+ 'vkCmdDrawIndirectCountAMD', 'vkCmdDrawIndirectCountKHR'))
+ assert(entity_db.areAliases('VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT',
+ 'VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT'))
+
+ assert(entity_db.areAliases('VK_LUID_SIZE_KHR', 'VK_LUID_SIZE'))
+
+def test_vulkan_entity_detection(ckr):
+ ckr.enabled([MessageId.BAD_ENTITY])
+ # Should complain about BAD_ENTITY even though it's sname
+ assert(ckr.check('sname:VkInstanceCreateInfoBOGUS').numDiagnostics() == 1)