ObjFW  Check-in [245f519a50]

Overview
Comment:Add support for file:// to OFURL.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 245f519a50cfe4368a785e44a0e7a5f559175a268c83a1e934b1a16b0e85bf47
User & Date: js on 2011-02-17 17:23:44
Other Links: manifest | tags
Context
2011-02-17
18:29
Add -[stringWithContentsOfURL:encoding:]. check-in: d932adccc3 user: js tags: trunk
17:23
Add support for file:// to OFURL. check-in: 245f519a50 user: js tags: trunk
17:12
Add more -W flags. check-in: 797e00a919 user: js tags: trunk
Changes

Modified src/OFURL.m from [2d664c10f0] to [ef4737e3c3].

104
105
106
107
108
109
110




111

112
113
114
115
116
117
118
104
105
106
107
108
109
110
111
112
113
114

115
116
117
118
119
120
121
122







+
+
+
+
-
+







		if ((str_c2 = strdup([str cString])) == NULL)
			@throw [OFOutOfMemoryException
			     newWithClass: isa
			    requestedSize: [str cStringLength]];

		str_c = str_c2;

		if (!strncmp(str_c, "file://", 7)) {
			scheme = @"file";
			path = [[OFString alloc] initWithCString: str_c + 7];
			return self;
		if (!strncmp(str_c, "http://", 7)) {
		} else if (!strncmp(str_c, "http://", 7)) {
			scheme = @"http";
			str_c += 7;
		} else if (!strncmp(str_c, "https://", 8)) {
			scheme = @"https";
			str_c += 8;
		} else
			@throw [OFInvalidFormatException newWithClass: isa];
479
480
481
482
483
484
485





486
487
488
489
490
491
492
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501







+
+
+
+
+







}

- (OFString*)description
{
	OFMutableString *desc = [OFMutableString stringWithFormat: @"%@://",
								   scheme];
	BOOL needPort = YES;

	if ([scheme isEqual: @"file"]) {
		[desc appendString: path];
		return desc;
	}

	if (user != nil && password != nil)
		[desc appendFormat: @"%@:%@@", user, password];
	else if (user != nil)
		[desc appendFormat: @"%@@", user];

	[desc appendString: host];

Modified tests/OFURLTests.m from [7e19b927ee] to [8cc6f93e13].

31
32
33
34
35
36
37
38


39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56


57
58
59
60
61






62
63
64
65
66







67
68
69
70
71
72
73
31
32
33
34
35
36
37

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

57
58
59




60
61
62
63
64
65
66




67
68
69
70
71
72
73
74
75
76
77
78
79
80







-
+
+

















-
+
+

-
-
-
-
+
+
+
+
+
+

-
-
-
-
+
+
+
+
+
+
+







{
	OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init];
	OFURL *u1, *u2, *u3, *u4;

	TEST(@"+[URLWithString:]",
	    R(u1 = [OFURL URLWithString: url_str]) &&
	    R(u2 = [OFURL URLWithString: @"http://foo:80"]) &&
	    R(u3 = [OFURL URLWithString: @"http://bar/"]))
	    R(u3 = [OFURL URLWithString: @"http://bar/"]) &&
	    R(u4 = [OFURL URLWithString: @"file:///etc/passwd"]))

	TEST(@"+[URLWithString:relativeToURL:]",
	    [[[OFURL URLWithString: @"/foo"
		     relativeToURL: u1] description] isEqual:
	    @"http://u:p@h:1234/foo"] &&
	    [[[OFURL URLWithString: @"foo/bar?q"
		     relativeToURL: [OFURL URLWithString: @"http://h/qux/quux"]]
	    description] isEqual: @"http://h/qux/foo/bar?q"] &&
	    [[[OFURL URLWithString: @"foo/bar"
		     relativeToURL: [OFURL URLWithString: @"http://h/qux/?x"]]
	    description] isEqual: @"http://h/qux/foo/bar"] &&
	    [[[OFURL URLWithString: @"http://foo/?q"
		     relativeToURL: u1] description] isEqual: @"http://foo/?q"])

	TEST(@"-[description]",
	    [[u1 description] isEqual: url_str] &&
	    [[u2 description] isEqual: @"http://foo"] &&
	    [[u3 description] isEqual: @"http://bar/"])
	    [[u3 description] isEqual: @"http://bar/"] &&
	    [[u4 description] isEqual: @"file:///etc/passwd"])

	TEST(@"-[scheme]", [[u1 scheme] isEqual: @"http"])
	TEST(@"-[user]", [[u1 user] isEqual: @"u"])
	TEST(@"-[password]", [[u1 password] isEqual: @"p"])
	TEST(@"-[host]", [[u1 host] isEqual: @"h"])
	TEST(@"-[scheme]",
	    [[u1 scheme] isEqual: @"http"] && [[u4 scheme] isEqual: @"file"])
	TEST(@"-[user]", [[u1 user] isEqual: @"u"] && [u4 user] == nil)
	TEST(@"-[password]",
	    [[u1 password] isEqual: @"p"] && [u4 password] == nil)
	TEST(@"-[host]", [[u1 host] isEqual: @"h"] && [u4 port] == 0)
	TEST(@"-[port]", [u1 port] == 1234)
	TEST(@"-[path]", [[u1 path] isEqual: @"f"])
	TEST(@"-[parameters]", [[u1 parameters] isEqual: @"p"])
	TEST(@"-[query]", [[u1 query] isEqual: @"q"])
	TEST(@"-[fragment]", [[u1 fragment] isEqual: @"f"])
	TEST(@"-[path]",
	    [[u1 path] isEqual: @"f"] && [[u4 path] isEqual: @"/etc/passwd"])
	TEST(@"-[parameters]",
	    [[u1 parameters] isEqual: @"p"] && [u4 parameters] == nil)
	TEST(@"-[query]", [[u1 query] isEqual: @"q"] && [u4 query] == nil)
	TEST(@"-[fragment]",
	    [[u1 fragment] isEqual: @"f"] && [u4 fragment] == nil)

	TEST(@"-[copy]", R(u4 = [[u1 copy] autorelease]))

	TEST(@"-[isEqual:]", [u1 isEqual: u4] && ![u2 isEqual: u3])
	TEST(@"-[hash:]", [u1 hash] == [u4 hash] && [u2 hash] != [u3 hash])

	EXPECT_EXCEPTION(@"Detection of invalid format",