test(io): add csv, format and table tests
This commit is contained in:
1 parent
55a8b173ae
commit
b7f56e623d
3 files changed
+183
No files matched your search
@@ -0,0 +1,60 @@
|
||||
import 'package:cellar/cellar.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
double numberOf(CellValue value) => (value as NumberValue).value;
|
||||
|
||||
void main() {
|
||||
group('csv parsing', () {
|
||||
test('parses quoted fields with embedded commas and quotes', () {
|
||||
final rows = parseCsv('a,"b,c","he said ""hi"""\n1,2,3');
|
||||
expect(rows, [
|
||||
['a', 'b,c', 'he said "hi"'],
|
||||
['1', '2', '3'],
|
||||
]);
|
||||
});
|
||||
|
||||
test('a trailing newline does not create an empty record', () {
|
||||
final rows = parseCsv('a,b\nc,d\n');
|
||||
expect(rows.length, 2);
|
||||
});
|
||||
});
|
||||
|
||||
group('csv import and compute', () {
|
||||
test('imports literals and formulas then computes', () {
|
||||
final sheet = Sheet();
|
||||
importCsv(sheet, 'Name,Qty,Price,Total\nApple,3,2,=B2*C2\nPear,4,5,=B3*C3\n,,,=SUM(D2:D3)');
|
||||
expect(numberOf(sheet.valueOf('D2')), 6);
|
||||
expect(numberOf(sheet.valueOf('D3')), 20);
|
||||
expect(numberOf(sheet.valueOf('D4')), 26);
|
||||
});
|
||||
});
|
||||
|
||||
group('csv round trip', () {
|
||||
test('formulas survive export and re-import with equal results', () {
|
||||
final original = Sheet();
|
||||
original.setValue('A1', '10');
|
||||
original.setValue('A2', '20');
|
||||
original.setValue('A3', '30');
|
||||
original.setValue('B1', '=SUM(A1:A3)');
|
||||
original.setValue('B2', '=AVERAGE(A1:A3)');
|
||||
original.setValue('B3', '=IF(B1>50, "high", "low")');
|
||||
|
||||
final formulaCsv = exportFormulas(original);
|
||||
final reloaded = Sheet();
|
||||
importCsv(reloaded, formulaCsv);
|
||||
|
||||
expect(exportFormulas(reloaded), formulaCsv);
|
||||
expect(numberOf(reloaded.valueOf('B1')), 60);
|
||||
expect(numberOf(reloaded.valueOf('B2')), 20);
|
||||
expect(reloaded.valueOf('B3'), const TextValue('high'));
|
||||
});
|
||||
|
||||
test('value export renders computed numbers', () {
|
||||
final sheet = Sheet();
|
||||
sheet.setValue('A1', '4');
|
||||
sheet.setValue('B1', '=A1*A1');
|
||||
final valueCsv = exportValues(sheet);
|
||||
expect(valueCsv, '4,16');
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in new issue
Block a user