Fehler behoben: Umlaute, Latin-1, Fehlermeldungen, atomares Schreiben
Spaltennamen mit Umlauten in Ausdrücken, Latin-1-Dateien als UTF-8, Fehler als eine Zeile (RDB_DEBUG=1 für Backtrace), Werte mit Tab oder Zeilenumbruch abgelehnt, Tabellen und Indexe über Temp-Datei und rename, update.rdb gibt den Satz bei Editorfehler zurück, sorttable -r stabil.
This commit is contained in:
@@ -876,3 +876,51 @@ class TaxTablesTest < RdbCase
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class RobustnessTest < RdbCase
|
||||
def test_umlauts_in_column_names
|
||||
write('uml', "Größe\tÜber\n-----\t----\n5\t7\n1\t2\n")
|
||||
assert_equal ['5', '7'], data(rdb('row', 'Über > 3', file: 'uml')).first
|
||||
assert_equal 1, data(rdb('row', 'Größe > 3', file: 'uml')).size
|
||||
end
|
||||
|
||||
def test_latin1_data_is_read_and_written_as_utf8
|
||||
File.binwrite(File.join(@dir, 'lat'), "Name\n----\n\xE4pfel\n")
|
||||
assert_equal "Äpfel".downcase, data(rdb('row', 'Name ~ /pfel/', file: 'lat')).first.first
|
||||
end
|
||||
|
||||
def test_errors_are_one_line_not_a_backtrace
|
||||
_o, e, st = run3('update.rdb', 'inventory', stdin: "/[\n")
|
||||
refute st.success?
|
||||
assert_match(/update\.rdb: .*char-class/, e)
|
||||
refute_match(/\.rb:\d+:in/, e)
|
||||
end
|
||||
|
||||
def test_enter_refuses_a_value_with_a_tab
|
||||
_o, e, st = run3('enter', '-1', 'inventory', stdin: "9\t9\n1\n2\n3\nthing\n")
|
||||
refute st.success?
|
||||
assert_match(/contains a tab/, e)
|
||||
end
|
||||
|
||||
def test_sorttable_reverse_keeps_ties_in_order
|
||||
out = rdb('sorttable', '-r', 'B', stdin: "A\tB\n-\t-\n1\tb\n2\ta\n3\tb\n4\ta\n")
|
||||
assert_equal %w[1 3 2 4], data(out).map(&:first)
|
||||
end
|
||||
|
||||
def test_update_keeps_the_record_when_the_editor_fails
|
||||
before = File.read(File.join(@dir, 'inventory'))
|
||||
_o, e, = run3('update.rdb', 'inventory', stdin: "1\ne\nq\n", env: { 'EDITOR' => 'false' })
|
||||
assert_match(/editor false failed/, e)
|
||||
assert_equal before, File.read(File.join(@dir, 'inventory'))
|
||||
end
|
||||
|
||||
def test_write_file_is_complete_and_keeps_the_mode
|
||||
path = File.join(@dir, 'wf')
|
||||
File.write(path, 'old')
|
||||
File.chmod(0o640, path)
|
||||
Rdb.write_file(path, 'new')
|
||||
assert_equal 'new', File.read(path)
|
||||
assert_equal 0o640, File.stat(path).mode & 0o777
|
||||
assert_empty Dir[File.join(@dir, 'wf.tmp*')]
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user