| /* |
| * Copyright 2012 ZXing authors |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #import "ZXURIParsedResultTestCase.h" |
| |
| @implementation ZXURIParsedResultTestCase |
| |
| - (void)testBookmarkDocomo { |
| [self doTestWithContents:@"MEBKM:URL:google.com;;" uri:@"http://google.com" title:nil]; |
| [self doTestWithContents:@"MEBKM:URL:http://google.com;;" uri:@"http://google.com" title:nil]; |
| [self doTestWithContents:@"MEBKM:URL:google.com;TITLE:Google;" uri:@"http://google.com" title:@"Google"]; |
| } |
| |
| - (void)testURI { |
| [self doTestWithContents:@"google.com" uri:@"http://google.com" title:nil]; |
| [self doTestWithContents:@"http://google.com" uri:@"http://google.com" title:nil]; |
| [self doTestWithContents:@"https://google.com" uri:@"https://google.com" title:nil]; |
| [self doTestWithContents:@"google.com:443" uri:@"http://google.com:443" title:nil]; |
| [self doTestWithContents:@"https://www.google.com/calendar/hosted/google.com/embed?mode=AGENDA&force_login=true&src=google.com_726f6f6d5f6265707075@resource.calendar.google.com" |
| uri:@"https://www.google.com/calendar/hosted/google.com/embed?mode=AGENDA&force_login=true&src=google.com_726f6f6d5f6265707075@resource.calendar.google.com" |
| title:nil]; |
| [self doTestWithContents:@"otpauth://remoteaccess?devaddr=00%a1b2%c3d4&devname=foo&key=bar" |
| uri:@"otpauth://remoteaccess?devaddr=00%a1b2%c3d4&devname=foo&key=bar" |
| title:nil]; |
| [self doTestWithContents:@"s3://amazon.com:8123" uri:@"s3://amazon.com:8123" title:nil]; |
| [self doTestWithContents:@"HTTP://R.BEETAGG.COM/?12345" uri:@"HTTP://R.BEETAGG.COM/?12345" title:nil]; |
| } |
| |
| - (void)testNotURI { |
| [self doTestNotUri:@"google.c"]; |
| [self doTestNotUri:@".com"]; |
| [self doTestNotUri:@":80/"]; |
| [self doTestNotUri:@"ABC,20.3,AB,AD"]; |
| [self doTestNotUri:@"http://google.com?q=foo bar"]; |
| } |
| |
| - (void)testURLTO { |
| [self doTestWithContents:@"urlto::bar.com" uri:@"http://bar.com" title:nil]; |
| [self doTestWithContents:@"urlto::http://bar.com" uri:@"http://bar.com" title:nil]; |
| [self doTestWithContents:@"urlto:foo:bar.com" uri:@"http://bar.com" title:@"foo"]; |
| } |
| |
| - (void)testGarbage { |
| [self doTestNotUri:@"Da65cV1g^>%^f0bAbPn1CJB6lV7ZY8hs0Sm:DXU0cd]GyEeWBz8]bUHLB"]; |
| [self doTestNotUri:[NSString stringWithFormat:@"DEA%C%CM%C%C\bå%C‡HO%CX$%C%C%Cwfc%C!þ“˜%C%C¾Z{ùÎÝڗZ§¨+y_zbñk%C¸%C†Ü%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C%C£.ux", |
| (unichar)0x0003, (unichar)0x0019, (unichar)0x0006, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0001, |
| (unichar)0x0000, (unichar)0x001F, (unichar)0x0007, (unichar)0x0013, (unichar)0x0013, (unichar)0x00117, (unichar)0x000E, |
| (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, |
| (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, |
| (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, |
| (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000, (unichar)0x0000]]; |
| } |
| |
| - (void)testIsPossiblyMalicious { |
| [self doTestIsPossiblyMalicious:@"http://google.com" expected:NO]; |
| [self doTestIsPossiblyMalicious:@"http://google.com@evil.com" expected:YES]; |
| [self doTestIsPossiblyMalicious:@"http://google.com:@evil.com" expected:YES]; |
| [self doTestIsPossiblyMalicious:@"google.com:@evil.com" expected:NO]; |
| [self doTestIsPossiblyMalicious:@"https://google.com:443" expected:NO]; |
| [self doTestIsPossiblyMalicious:@"https://google.com:443/" expected:NO]; |
| [self doTestIsPossiblyMalicious:@"https://evil@google.com:443" expected:YES]; |
| [self doTestIsPossiblyMalicious:@"http://google.com/foo@bar" expected:NO]; |
| [self doTestIsPossiblyMalicious:@"http://google.com/@@" expected:NO]; |
| } |
| |
| - (void)testExotic { |
| [self doTestWithContents:@"bitcoin:mySD89iqpmptrK3PhHFW9fa7BXiP7ANy3Y" |
| uri:@"bitcoin:mySD89iqpmptrK3PhHFW9fa7BXiP7ANy3Y" |
| title:nil]; |
| [self doTestWithContents:@"BTCTX:-TC4TO3$ZYZTC5NC83/SYOV+YGUGK:$BSF0P8/STNTKTKS.V84+JSA$LB+EHCG+8A725.2AZ-NAVX3VBV5K4MH7UL2.2M:" |
| "F*M9HSL*$2P7T*FX.ZT80GWDRV0QZBPQ+O37WDCNZBRM3EQ0S9SZP+3BPYZG02U/LA*89C2U.V1TS.CT1VF3DIN*HN3W-O-" |
| "0ZAKOAB32/.8:J501GJJTTWOA+5/6$MIYBERPZ41NJ6-WSG/*Z48ZH*LSAOEM*IXP81L:$F*W08Z60CR*C*P.JEEVI1F02J07L6+" |
| "W4L1G$/IC*$16GK6A+:I1-:LJ:Z-P3NW6Z6ADFB-F2AKE$2DWN23GYCYEWX9S8L+LF$VXEKH7/R48E32PU+A:9H:8O5" |
| uri:@"BTCTX:-TC4TO3$ZYZTC5NC83/SYOV+YGUGK:$BSF0P8/STNTKTKS.V84+JSA$LB+EHCG+8A725.2AZ-NAVX3VBV5K4MH7UL2.2M:" |
| "F*M9HSL*$2P7T*FX.ZT80GWDRV0QZBPQ+O37WDCNZBRM3EQ0S9SZP+3BPYZG02U/LA*89C2U.V1TS.CT1VF3DIN*HN3W-O-" |
| "0ZAKOAB32/.8:J501GJJTTWOA+5/6$MIYBERPZ41NJ6-WSG/*Z48ZH*LSAOEM*IXP81L:$F*W08Z60CR*C*P.JEEVI1F02J07L6+" |
| "W4L1G$/IC*$16GK6A+:I1-:LJ:Z-P3NW6Z6ADFB-F2AKE$2DWN23GYCYEWX9S8L+LF$VXEKH7/R48E32PU+A:9H:8O5" |
| title:nil]; |
| } |
| |
| - (void)doTestWithContents:(NSString *)contents uri:(NSString *)uri title:(NSString *)title { |
| ZXResult *fakeResult = [ZXResult resultWithText:contents rawBytes:NULL length:0 resultPoints:nil format:kBarcodeFormatQRCode]; |
| ZXParsedResult *result = [ZXResultParser parseResult:fakeResult]; |
| STAssertEquals(result.type, kParsedResultTypeURI, @"Types don't match"); |
| ZXURIParsedResult *uriResult = (ZXURIParsedResult *)result; |
| STAssertEqualObjects(uriResult.uri, uri, @"URIs don't match"); |
| STAssertEqualObjects(uriResult.title, title, @"Titles don't match"); |
| } |
| |
| - (void)doTestNotUri:(NSString *)text { |
| ZXResult *fakeResult = [ZXResult resultWithText:text rawBytes:NULL length:0 resultPoints:nil format:kBarcodeFormatQRCode]; |
| ZXParsedResult *result = [ZXResultParser parseResult:fakeResult]; |
| STAssertEquals(result.type, kParsedResultTypeText, @"Types don't match"); |
| STAssertEqualObjects(result.displayResult, text, @"Display result doesn't match"); |
| } |
| |
| - (void)doTestIsPossiblyMalicious:(NSString *)uri expected:(BOOL)expected { |
| ZXURIParsedResult *result = [ZXURIParsedResult uriParsedResultWithUri:uri title:nil]; |
| STAssertEquals([result possiblyMaliciousURI], expected, |
| expected ? @"Expected to be possibly malicious URI but wasn't" : @"Not expected to be possibly malicious URI but was"); |
| } |
| |
| @end |