source: trunk/test/unit/dbnp/studycapturing/TemplateFieldTests.groovy @ 497

Last change on this file since 497 was 497, checked in by roberth, 10 years ago

Implemented RELTIME parsing and showing in the wizard.
Also made TEXT templatefields to show a textarea

  • Property svn:keywords set to Date Author Rev
File size: 5.1 KB
Line 
1package dbnp.studycapturing
2
3import grails.test.*
4
5class TemplateFieldTests extends GrailsUnitTestCase {
6    def testEvent;
7    protected void setUp() {
8        super.setUp()
9
10        // Create the template itself
11        def testTemplate = new Template(
12                name: 'Template for testing relative date fields',
13                entity: dbnp.studycapturing.Event,
14                fields: [
15                    new TemplateField(
16                        name: 'testStartDate',
17                        type: TemplateFieldType.DATE
18                    ),
19                    new TemplateField(
20                        name: 'testRelTime',
21                        type: TemplateFieldType.RELTIME
22                    )
23                ]
24            );
25
26        this.testEvent = new Event(
27                template: testTemplate,
28                startTime: 3600,
29                endTime: 7200
30        )
31    }
32
33    protected void tearDown() {
34        super.tearDown()
35    }
36
37    void testRelTimeFieldCreation() {
38        def RelTimeField = new TemplateField(
39                name: 'RelTime',
40                type: TemplateFieldType.RELTIME
41        );
42    }
43
44    void testRelTimeSetValue() {
45        // Check whether the field exists
46        assert this.testEvent.fieldExists( 'testRelTime' );
47
48        // See that it is not a domain field
49        assert !this.testEvent.isDomainField( 'testRelTime' );
50        println( this.testEvent.getStore( TemplateFieldType.RELTIME ) );
51       
52        this.testEvent.setFieldValue( 'testRelTime', 10 );
53        assert this.testEvent.getFieldValue( 'testRelTime' ) == 10;
54
55        this.testEvent.setFieldValue( 'testRelTime', 0 );
56        assert this.testEvent.getFieldValue( 'testRelTime' ) == 0;
57
58        this.testEvent.setFieldValue( 'testRelTime', -130 );
59        assert this.testEvent.getFieldValue( 'testRelTime' ) == -130;
60
61        // RelTime must be able to handle 100 years
62        long hundredYears = 100L * 365 * 24 * 3600;
63        this.testEvent.setFieldValue( 'testRelTime', hundredYears );
64        assert this.testEvent.getFieldValue( 'testRelTime' ) ==  hundredYears;
65    }
66
67    // Tests the parsing of a string for relative dates
68    // @see TemplateEntity.setFieldValue
69    //
70        // The relative date may be set as a string, using the following format
71        //
72        //    #w #d #h #m #s
73        //
74        // Where w = weeks, d = days, h = hours, m = minutes, s = seconds
75        //
76        // The spaces between the values are optional. Every timespan
77        // (w, d, h, m, s) must appear at most once. You can also omit
78        // timespans if needed or use a different order.
79        // Other characters are disregarded, allthough results may not
80        // always be as expected.
81        //
82        // If an incorrect format is used, which can't be parsed
83        // an IllegalFormatException is thrown.
84        //
85        // An empty span is treated as zero seconds.
86        //
87        // Examples:
88        // ---------
89        //    5d 3h 20m     // 5 days, 3 hours and 20 minutes
90        //    6h 2d         // 2 days, 6 hours
91        //    10m 200s      // 13 minutes, 20 seconds (200s == 3m + 20s)
92        //    5w4h15m       // 5 weeks, 4 hours, 15 minutes
93        //
94        //    16x14w10d     // Incorrect. 16x is disregarded, so the
95        //                  // result is 15 weeks, 3 days
96        //    13days        // Incorrect: days should be d, but this is
97        //                  // parsed as 13d, 0 seconds
98        //
99    void testRelTimeParser() {
100        def s = 1L;
101        def m = 60L * s;
102        def h = 60L * m;
103        def d = 24L * h;
104        def w = 7L * d;
105
106        this.testEvent.setFieldValue( 'testRelTime', '' );
107        assert this.testEvent.getFieldValue( 'testRelTime' ) == 0;
108
109        this.testEvent.setFieldValue( 'testRelTime', '   ' );
110        assert this.testEvent.getFieldValue( 'testRelTime' ) == 0;
111
112        this.testEvent.setFieldValue( 'testRelTime', '5d 3h 20m' );
113        assert this.testEvent.getFieldValue( 'testRelTime' ) == 5 * d + 3 * h + 20 * m;
114
115        this.testEvent.setFieldValue( 'testRelTime', '6h 2d' );
116        assert this.testEvent.getFieldValue( 'testRelTime' ) == 2 * d + 6 * h;
117
118        this.testEvent.setFieldValue( 'testRelTime', '10m 200s' );
119        assert this.testEvent.getFieldValue( 'testRelTime' ) == 10 * m  + 200 * s;
120
121        this.testEvent.setFieldValue( 'testRelTime', '5w4h15m' );
122        assert this.testEvent.getFieldValue( 'testRelTime' ) == 5 * w + 4 * h + 15 * m;
123
124        // Should parse correctly, allthough it is not completely correct
125        this.testEvent.setFieldValue( 'testRelTime', '16x14w10d' );
126        assert this.testEvent.getFieldValue( 'testRelTime' ) == 14 * w + 10 * d;
127
128        this.testEvent.setFieldValue( 'testRelTime', '13days' );
129        assert this.testEvent.getFieldValue( 'testRelTime' ) == 13 * d;
130
131        // Test whether an IllegalFormatException is thrown
132        try {
133            this.testEvent.setFieldValue( 'testRelTime', 'nonexistent relative date' );
134            fail();
135        } catch(IllegalArgumentException ex) {
136        } catch( Exception ex ) {
137            fail();
138        }
139
140    }
141}
Note: See TracBrowser for help on using the repository browser.