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