diff options
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.py | 122 |
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) |