1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3 4import os, os.path 5import sys 6import vtk 7from vtk.util.misc import vtkGetDataRoot 8VTK_DATA_ROOT = vtkGetDataRoot() 9 10# List of types and corresponding file extensions. 11types = [[ 'ImageData', 'vti'], 12 ['RectilinearGrid', 'vtr'], 13 ['StructuredGrid', 'vts'], 14 ['PolyData', 'vtp'], 15 ['UnstructuredGrid', 'vtu']] 16 17# We intentionally cause vtkErrorMacro calls to be made below. Dump 18# errors to a file to prevent a window from coming up. 19fow = vtk.vtkFileOutputWindow() 20fow.SetFileName("TestEmptyXMLErrors.txt") 21fow.SetFlush(0) 22fow.SetInstance(fow) 23 24# Loguru will still send messages to stderr. Disable that. 25vtk.vtkLogger.SetStderrVerbosity(vtk.vtkLogger.VERBOSITY_OFF) 26 27# Prepare some test files. 28f = open('emptyFile.vtk', 'wt') 29f.close() 30f = open('junkFile.vtk', 'wt') 31f.write("v9np7598mapwcawoiur-,rjpmW9MJV28nun-q38ynq-9.8ugujqvt-8n3-nv8") 32f.close() 33 34# Test each writer/reader. 35for t in types: 36 type = t[0] 37 ext = t[1] 38 input = eval('vtk.vtk' + type + '()') 39 40 writer = eval('vtk.vtkXML' + type + 'Writer()') 41 writer.SetFileName('empty' + type + '.' + ext) 42 sys.stdout.write('Attempting ' + type + ' write with no input.\n') 43 writer.Write() 44 sys.stdout.write('Attempting ' + type + ' write with empty input.\n') 45 writer.SetInputData(input) 46 writer.Write() 47 48 reader = eval('vtk.vtkXML' + type + 'Reader()') 49 reader.SetFileName('empty' + type + '.' + ext) 50 sys.stdout.write('Attempting read from file with empty ' + type + '.\n') 51 reader.Update() 52 53 pwriter = eval('vtk.vtkXMLP' + type + 'Writer()') 54 pwriter.SetFileName('emptyP' + type + '.p' + ext) 55 sys.stdout.write('Attempting P' + type + ' write with no input.\n') 56 pwriter.Write() 57 sys.stdout.write('Attempting P' + type + ' write with empty input.\n') 58 pwriter.SetInputData(input) 59 pwriter.Write() 60 61 preader = eval('vtk.vtkXMLP' + type + 'Reader()') 62 preader.SetFileName('emptyP' + type + '.p' + ext) 63 sys.stdout.write('Attempting read from file with empty P' + type + '.\n') 64 preader.Update() 65 66 reader.SetFileName("emptyFile.vtk") 67 preader.SetFileName("emptyFile.vtk") 68 69 sys.stdout.write('Attempting read ' + type + ' from empty file.\n') 70 reader.Update() 71 sys.stdout.write('Attempting read P' + type + ' from empty file.\n') 72 preader.Update() 73 74 reader.SetFileName("junkFile.vtk") 75 preader.SetFileName("junkFile.vtk") 76 77 sys.stdout.write('Attempting read ' + type + ' from junk file.\n') 78 reader.Update() 79 sys.stdout.write('Attempting read P' + type + ' from junk file.\n') 80 preader.Update() 81 82 del input 83 del writer 84 del reader 85 del pwriter 86 del preader 87 88# Test the data set writers. 89for t in types: 90 type = t[0] 91 ext = t[1] 92 writer = vtk.vtkXMLDataSetWriter() 93 pwriter = vtk.vtkXMLPDataSetWriter() 94 input = eval('vtk.vtk' + type + '()') 95 96 writer.SetFileName('empty' + type + 'DataSet.' + ext) 97 sys.stdout.write('Attempting DataSet ' + type + ' write with no input.\n') 98 writer.Write() 99 sys.stdout.write('Attempting DataSet ' + type + ' write with empty input.\n') 100 writer.SetInputData(input) 101 writer.Write() 102 103 pwriter.SetFileName('emptyP' + type + 'DataSet.p' + ext) 104 sys.stdout.write('Attempting DataSet ' + type + ' write with no input.\n') 105 pwriter.SetNumberOfPieces(1) 106 pwriter.Write() 107 sys.stdout.write('Attempting DataSet ' + type + ' write with empty input.\n') 108 pwriter.SetInputData(input) 109 pwriter.Write() 110 111 del input 112 del pwriter 113 del writer 114 115# Done with the file output window. 116fow.SetInstance(None) 117del fow 118 119# Delete the test files. 120for t in types: 121 type = t[0] 122 ext = t[1] 123 124 os.remove('empty' + type + '.' + ext) 125 os.remove('empty' + type + 'DataSet.' + ext) 126 os.remove('emptyP' + type + '.p' + ext) 127 assert not os.path.exists('emptyP' + type + '_0.' + ext) 128 os.remove('emptyP' + type + 'DataSet.p' + ext) 129 assert not os.path.exists('emptyP' + type + 'DataSet_0.' + ext) 130 131os.remove('junkFile.vtk') 132os.remove('emptyFile.vtk') 133os.remove('TestEmptyXMLErrors.txt') 134