1 import { ComputedLine, Line } from './Line';
2 import TaxReturn from './TaxReturn';
3 import Form, { isFormT } from './Form';
4 import { InconsistencyError, NotFoundError } from './Errors';
6 test('add and get line', () => {
7 const l = new ComputedLine<number>(() => 42);
9 class TestForm extends Form<TestForm['_lines']> {
10 readonly name = 'Test Form';
12 protected readonly _lines = { '1': l };
15 const f = new TestForm();
16 expect(f.getLine('1')).toBe(l);
19 test('get non-existent line', () => {
20 class TestForm extends Form<TestForm['_lines']> {
21 readonly name = 'Test';
22 protected readonly _lines = {};
25 const f = new TestForm();
26 const fAsAny: Form<any> = f;
27 expect(() => fAsAny.getLine('line')).toThrow(NotFoundError);
30 //expect(() => f.getLine('line')).toThrow(NotFoundError);
38 class TestForm extends Form<any, TestInput> {
39 readonly name = '1040';
41 protected readonly _lines = null;
44 const f = new TestForm({ filingStatus: 'S', money: 100.0 });
45 expect(f.getInput('filingStatus')).toBe('S');
48 test('get value', () => {
49 class TestForm extends Form<TestForm['_lines']> {
50 readonly name = 'Form';
52 protected readonly _lines = {
53 line: new ComputedLine<number>(() => 42),
57 const f = new TestForm();
58 const tr = new TaxReturn(2019);
59 expect(f.getValue(tr, 'line')).toBe(42);
62 //let s: string = f.getValue(tr, 'line');
64 const fAsAny: Form<any> = f;
65 expect(() => fAsAny.getValue(tr, 'other')).toThrow(NotFoundError);
67 //expect(() => f.getValue(tr, 'other')).toThrow(NotFoundError);
70 test('form types', () => {
71 class FormA extends Form<any> {
73 protected readonly _lines = {};
75 class FormB extends Form<any> {
77 protected readonly _lines = {};
80 expect(isFormT(new FormA(), FormA)).toBe(true);
81 expect(isFormT(new FormB(), FormA)).toBe(false);
82 expect(isFormT(new FormA(), FormB)).toBe(false);
83 expect(isFormT(new FormB(), FormB)).toBe(true);