2 * Copyright 2007 ZXing authors
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.google.zxing.client.result;
19 import com.google.zxing.BarcodeFormat;
20 import com.google.zxing.Result;
21 import junit.framework.TestCase;
24 * Tests {@link ParsedResult}.
26 * @author srowen@google.com (Sean Owen)
28 public final class ParsedReaderResultTestCase extends TestCase {
30 public void testTextType() {
31 doTestResult("foo", ParsedResultType.TEXT);
32 doTestResult("", ParsedResultType.TEXT);
33 doTestResult("This is a test", ParsedResultType.TEXT);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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
132 public void testVEvent() {
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);
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);
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
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);
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);
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,
181 ParsedResultType.TEXT);
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);
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);
209 private static void doTestResult(String text, ParsedResultType type) {
210 doTestResult(text, type, null);
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());
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());