f4dd92b8c913a6f9b01bb42f00933ab508c1b380
[zxing.git] / core / test / src / com / google / zxing / client / result / ParsedReaderResultTestCase.java
1 /*
2  * Copyright 2007 ZXing authors
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.google.zxing.client.result;
18
19 import com.google.zxing.BarcodeFormat;
20 import com.google.zxing.Result;
21 import junit.framework.TestCase;
22
23 /**
24  * Tests {@link ParsedResult}.
25  *
26  * @author srowen@google.com (Sean Owen)
27  */
28 public final class ParsedReaderResultTestCase extends TestCase {
29
30   public void testTextType() {
31     doTestResult("foo", ParsedResultType.TEXT);
32     doTestResult("", ParsedResultType.TEXT);
33     doTestResult("This is a test", ParsedResultType.TEXT);
34   }
35
36   public void testBookmarkType() {
37     doTestResult("MEBKM:URL:google.com;;", ParsedResultType.URI);
38     doTestResult("MEBKM:URL:google.com;TITLE:Google;;", ParsedResultType.URI);
39     doTestResult("MEBKM:TITLE:Google;URL:google.com;;", ParsedResultType.URI);
40     doTestResult("MEBKM:URL:http://google.com;;", ParsedResultType.URI);
41     doTestResult("MEBKM:URL:HTTPS://google.com;;", ParsedResultType.URI);
42   }
43
44   public void testURLTOType() {
45     doTestResult("URLTO:foo:bar.com", ParsedResultType.URI);
46     doTestResult("URLTO::bar.com", ParsedResultType.URI);
47     doTestResult("URLTO::http://bar.com", ParsedResultType.URI);
48   }
49
50   public void testEmailType() {
51     doTestResult("MATMSG:TO:srowen@example.org;;", ParsedResultType.EMAIL_ADDRESS);
52     doTestResult("MATMSG:TO:srowen@example.org;SUB:Stuff;;", ParsedResultType.EMAIL_ADDRESS);
53     doTestResult("MATMSG:TO:srowen@example.org;SUB:Stuff;BODY:This is some text;;", ParsedResultType.EMAIL_ADDRESS);
54     doTestResult("MATMSG:SUB:Stuff;BODY:This is some text;TO:srowen@example.org;;", ParsedResultType.EMAIL_ADDRESS);
55     doTestResult("TO:srowen@example.org;SUB:Stuff;BODY:This is some text;;", ParsedResultType.TEXT);
56   }
57
58   public void testEmailAddressType() {
59     doTestResult("srowen@example.org", ParsedResultType.EMAIL_ADDRESS);
60     doTestResult("mailto:srowen@example.org", ParsedResultType.EMAIL_ADDRESS);
61     doTestResult("srowen@example", ParsedResultType.TEXT);
62     doTestResult("srowen", ParsedResultType.TEXT);
63     doTestResult("Let's meet @ 2", ParsedResultType.TEXT);
64   }
65
66   public void testAddressBookType() {
67     doTestResult("MECARD:N:Sean Owen;;", ParsedResultType.ADDRESSBOOK);
68     doTestResult("MECARD:TEL:+12125551212;N:Sean Owen;;", ParsedResultType.ADDRESSBOOK);
69     doTestResult("MECARD:TEL:+12125551212;N:Sean Owen;URL:google.com;;", ParsedResultType.ADDRESSBOOK);
70     doTestResult("TEL:+12125551212;N:Sean Owen;;", ParsedResultType.TEXT);
71   }
72
73   public void testAddressBookAUType() {
74     doTestResult("MEMORY:\r\n", ParsedResultType.ADDRESSBOOK);
75     doTestResult("MEMORY:foo\r\nNAME1:Sean\r\n", ParsedResultType.ADDRESSBOOK);
76     doTestResult("TEL1:+12125551212\r\nMEMORY:\r\n", ParsedResultType.ADDRESSBOOK);
77   }
78
79   public void testUPC() {
80     doTestResult("123456789012", ParsedResultType.PRODUCT, BarcodeFormat.UPC_A);
81     doTestResult("1234567890123", ParsedResultType.PRODUCT, BarcodeFormat.UPC_A);
82     doTestResult("12345678901", ParsedResultType.TEXT);
83   }
84
85   public void testEAN() {
86     doTestResult("00393157", ParsedResultType.PRODUCT, BarcodeFormat.EAN_8);
87     doTestResult("00393158", ParsedResultType.TEXT);
88     doTestResult("5051140178499", ParsedResultType.PRODUCT, BarcodeFormat.EAN_13);
89     doTestResult("5051140178490", ParsedResultType.TEXT);
90   }
91
92   public void testISBN() {
93     doTestResult("9784567890123", ParsedResultType.ISBN, BarcodeFormat.EAN_13);
94     doTestResult("9794567890123", ParsedResultType.ISBN, BarcodeFormat.EAN_13);
95     doTestResult("97845678901", ParsedResultType.TEXT);
96     doTestResult("97945678901", ParsedResultType.TEXT);
97   }
98
99   public void testURI() {
100     doTestResult("http://google.com", ParsedResultType.URI);
101     doTestResult("google.com", ParsedResultType.URI);
102     doTestResult("https://google.com", ParsedResultType.URI);
103     doTestResult("HTTP://google.com", ParsedResultType.URI);
104     doTestResult("http://google.com/foobar", ParsedResultType.URI);
105     doTestResult("https://google.com:443/foobar", ParsedResultType.URI);
106     doTestResult("google.com:443/foobar", ParsedResultType.URI);
107   }
108
109   public void testGeo() {
110     doTestResult("geo:1,2", ParsedResultType.GEO);
111     doTestResult("geo:1,2,3", ParsedResultType.GEO);
112     doTestResult("geo:100.33,-32.3344,3.35", ParsedResultType.GEO);
113     doTestResult("geography", ParsedResultType.TEXT);
114   }
115
116   public void testTel() {
117     doTestResult("tel:+15551212", ParsedResultType.TEL);
118     doTestResult("tel:212 555 1212", ParsedResultType.TEL);
119     doTestResult("tel:2125551212", ParsedResultType.TEL);
120     doTestResult("telephone", ParsedResultType.TEXT);
121   }
122
123   public void testVCard() {
124     doTestResult("BEGIN:VCARD\r\nEND:VCARD", ParsedResultType.ADDRESSBOOK);
125     doTestResult("BEGIN:VCARD\r\nN:Owen;Sean\r\nEND:VCARD", ParsedResultType.ADDRESSBOOK);
126     doTestResult("BEGIN:VCARD\r\nVERSION:2.1\r\nN:Owen;Sean\r\nEND:VCARD", ParsedResultType.ADDRESSBOOK);
127     doTestResult("BEGIN:VCARD\r\nADR;HOME:123 Main St\r\nVERSION:2.1\r\nN:Owen;Sean\r\n" +
128                  "END:VCARD", ParsedResultType.ADDRESSBOOK);    
129     doTestResult("BEGIN:VCARD", ParsedResultType.URI); // yeah we end up guessing "URI" here
130   }
131
132   public void testVEvent() {
133     // UTC times
134     doTestResult("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456Z\r\n" +
135                  "DTEND:20080505T234555Z\r\nEND:VEVENT\r\nEND:VCALENDAR", ParsedResultType.CALENDAR);
136     doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456Z\r\n" +
137                  "DTEND:20080505T234555Z\r\nEND:VEVENT", ParsedResultType.CALENDAR);
138     // Local times
139     doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456\r\n" +
140         "DTEND:20080505T234555\r\nEND:VEVENT", ParsedResultType.CALENDAR);
141     // Date only (all day event)
142     doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504\r\n" +
143         "DTEND:20080505\r\nEND:VEVENT", ParsedResultType.CALENDAR);
144     // Start time only
145     doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456Z\r\nEND:VEVENT",
146         ParsedResultType.CALENDAR);
147     doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504T123456\r\nEND:VEVENT",
148         ParsedResultType.CALENDAR);
149     doTestResult("BEGIN:VEVENT\r\nSUMMARY:foo\r\nDTSTART:20080504\r\nEND:VEVENT",
150         ParsedResultType.CALENDAR);
151     doTestResult("BEGIN:VEVENT\r\nDTEND:20080505T\r\nEND:VEVENT", ParsedResultType.TEXT);
152     // Make sure illegal entries without newlines don't crash
153     doTestResult("BEGIN:VEVENTSUMMARY:EventDTSTART:20081030T122030ZDTEND:20081030T132030ZEND:VEVENT",
154         ParsedResultType.URI);
155     doTestResult("BEGIN:VEVENT", ParsedResultType.URI); // See above note on why this is URI
156   }
157
158   public void testSMS() {
159     doTestResult("sms:+15551212", ParsedResultType.SMS);
160     doTestResult("SMSTO:+15551212", ParsedResultType.SMS);
161     doTestResult("smsto:+15551212", ParsedResultType.SMS);
162     doTestResult("sms:+15551212;via=999333", ParsedResultType.SMS);
163     doTestResult("sms:+15551212?subject=foo&body=bar", ParsedResultType.SMS);
164     doTestResult("sms:+15551212:subject", ParsedResultType.SMS);
165   }
166
167   public void testMMS() {
168     doTestResult("mms:+15551212", ParsedResultType.SMS);
169     doTestResult("MMSTO:+15551212", ParsedResultType.SMS);
170     doTestResult("mmsto:+15551212", ParsedResultType.SMS);
171     doTestResult("mms:+15551212;via=999333", ParsedResultType.SMS);
172     doTestResult("mms:+15551212?subject=foo&body=bar", ParsedResultType.SMS);
173     doTestResult("mms:+15551212:subject", ParsedResultType.SMS);
174   }
175
176   /*
177   public void testNDEFText() {
178     doTestResult(new byte[] {(byte)0xD1,(byte)0x01,(byte)0x05,(byte)0x54,
179                              (byte)0x02,(byte)0x65,(byte)0x6E,(byte)0x68,
180                              (byte)0x69},
181                  ParsedResultType.TEXT);
182   }
183
184   public void testNDEFURI() {
185     doTestResult(new byte[] {(byte)0xD1,(byte)0x01,(byte)0x08,(byte)0x55,
186                              (byte)0x01,(byte)0x6E,(byte)0x66,(byte)0x63,
187                              (byte)0x2E,(byte)0x63,(byte)0x6F,(byte)0x6D},
188                  ParsedResultType.URI);
189   }
190
191   public void testNDEFSmartPoster() {
192     doTestResult(new byte[] {(byte)0xD1,(byte)0x02,(byte)0x2F,(byte)0x53,
193                              (byte)0x70,(byte)0x91,(byte)0x01,(byte)0x0E,
194                              (byte)0x55,(byte)0x01,(byte)0x6E,(byte)0x66,
195                              (byte)0x63,(byte)0x2D,(byte)0x66,(byte)0x6F,
196                              (byte)0x72,(byte)0x75,(byte)0x6D,(byte)0x2E,
197                              (byte)0x6F,(byte)0x72,(byte)0x67,(byte)0x11,
198                              (byte)0x03,(byte)0x01,(byte)0x61,(byte)0x63,
199                              (byte)0x74,(byte)0x00,(byte)0x51,(byte)0x01,
200                              (byte)0x12,(byte)0x54,(byte)0x05,(byte)0x65,
201                              (byte)0x6E,(byte)0x2D,(byte)0x55,(byte)0x53,
202                              (byte)0x48,(byte)0x65,(byte)0x6C,(byte)0x6C,
203                              (byte)0x6F,(byte)0x2C,(byte)0x20,(byte)0x77,
204                              (byte)0x6F,(byte)0x72,(byte)0x6C,(byte)0x64},
205                  ParsedResultType.NDEF_SMART_POSTER);
206   }
207    */
208
209   private static void doTestResult(String text, ParsedResultType type) {
210     doTestResult(text, type, null);
211   }
212
213   private static void doTestResult(String text, ParsedResultType type, BarcodeFormat format) {
214     Result fakeResult = new Result(text, null, null, format);
215     ParsedResult result = ResultParser.parseResult(fakeResult);
216     assertNotNull(result);
217     assertEquals(type, result.getType());
218   }
219
220   /*
221   private static void doTestResult(byte[] rawBytes, ParsedResultType type) {
222     Result fakeResult = new Result(null, rawBytes, null, null);
223     ParsedResult result = ResultParser.parseResult(fakeResult);
224     assertNotNull(result);
225     assertEquals(type, result.getType());
226   }
227    */
228
229 }