def test_read_errors(self): formatter = GNUPlotFormat() # non-comment line at the beginning location = self.locations[0] data = DataSet(location=location) os.makedirs(location, exist_ok=True) with open(location + '/x_set.dat', 'w') as f: f.write('1\t2\n' + file_1d()) with LogCapture() as logs: formatter.read(data) self.assertTrue('ValueError' in logs.value, logs.value) # same data array in 2 files location = self.locations[1] data = DataSet(location=location) os.makedirs(location, exist_ok=True) with open(location + '/x_set.dat', 'w') as f: f.write('\n'.join( ['# x_set\ty', '# "X"\t"Y"', '# 2', '1\t2', '3\t4'])) with open(location + '/q.dat', 'w') as f: f.write('\n'.join(['# q\ty', '# "Q"\t"Y"', '# 2', '1\t2', '3\t4'])) with LogCapture() as logs: formatter.read(data) self.assertTrue('ValueError' in logs.value, logs.value)
def test_multifile(self): formatter = GNUPlotFormat() location = self.locations[1] data = DataSetCombined(location) formatter.write(data, data.io, data.location) filex, filexy = files_combined() with open(location + '/x_set.dat') as f: self.assertEqual(f.read(), filex) with open(location + '/x_set_y_set.dat') as f: self.assertEqual(f.read(), filexy) data2 = DataSet(location=location) formatter.read(data2) for array_id in ('x_set', 'y1', 'y2', 'y_set', 'z1', 'z2'): self.checkArraysEqual(data2.arrays[array_id], data.arrays[array_id])
def test_full_write(self): formatter = GNUPlotFormat() location = self.locations[0] data = DataSet1D(name="test_full_write", location=location) formatter.write(data, data.io, data.location) with open(location + '/x_set.dat') as f: self.assertEqual(f.read(), file_1d()) # check that we can add comment lines randomly into the file # as long as it's after the first three lines, which are comments # with well-defined meaning, # and that we can un-quote the labels lines = file_1d().split('\n') lines[1] = lines[1].replace('"', '') lines[3:3] = ['# this data is awesome!'] lines[6:6] = ['# the next point is my favorite.'] with open(location + '/x_set.dat', 'w') as f: f.write('\n'.join(lines)) # normally this would be just done by data2 = load_data(location) # but we want to work directly with the Formatter interface here data2 = DataSet(location=location) formatter.read(data2) self.checkArraysEqual(data2.x_set, data.x_set) self.checkArraysEqual(data2.y, data.y) # data has been saved self.assertEqual(data.y.last_saved_index, 4) # data2 has been read back in, should show the same # last_saved_index self.assertEqual(data2.y.last_saved_index, 4) # while we're here, check some errors on bad reads # first: trying to read into a dataset that already has the # wrong size x = DataArray(name='x_set', label='X', preset_data=(1., 2.)) y = DataArray(name='y', label='Y', preset_data=(3., 4.), set_arrays=(x, )) data3 = new_data(arrays=(x, y), location=location + 'XX') # initially give it a different location so we can make it without # error, then change back to the location we want. data3.location = location with LogCapture() as logs: formatter.read(data3) self.assertTrue('ValueError' in logs.value, logs.value) # no problem reading again if only data has changed, it gets # overwritten with the disk copy data2.x_set[2] = 42 data2.y[2] = 99 formatter.read(data2) self.assertEqual(data2.x_set[2], 3) self.assertEqual(data2.y[2], 5)