#!/usr/bin/python3 # # Copyright (c) 2018-2019 Collabora, Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Author(s): Ryan Pavlik # # 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::../api/enums/VkQueueFlagBits.txt[]""").numDiagnostics() == 1) assert(ckr.check( """[open,refpage='VkQueueFlags'] -- include::../validity/enums/VkQueueFlagBits.txt[]""").numDiagnostics() == 1) # Should not error: this is just an alias assert(ckr.check( """[open,refpage='vkUpdateDescriptorSetWithTemplate'] -- include::../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::../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'))