aboutsummaryrefslogtreecommitdiff
path: root/chrome/content/unittest/testcases.js
blob: afefff7ce36ff93d49a03b5badc90dec1610e7dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//// $Id$
var nsIContentPolicy = Components.interfaces.nsIContentPolicy;

var tests = {
	"Wildcard matches" : {
		run : function(data,log) { 
			var pattern = data[0],
				url = data[1],
				expected = data[2];
			var parts = expected.split(',');
			var redirectUrl = '';
			if (!(parts.length == 1 && parts[0] == '')) {
				for (var i in parts) {
					redirectUrl += '$' + (parseFloat(i)+1) + ',';
				}
				redirectUrl = redirectUrl.substr(0, redirectUrl.length-1);
			}
			var redirect = new Redirect(null, pattern, redirectUrl, Redirect.WILDCARD);
			var result = redirect.getMatch(url);
			return { passed: result.isMatch && (result.redirectTo == expected), message : "Expected '" + expected + "', actual was '" + result.redirectTo + "'"};
		},
		
		describe : function(data) { return data[0] + ' == ' + data[1] + ', matches=' + data[2]; },
		tests : [
			['http://foo*', 'http://foobar.is', 'bar.is'],
			['http://foo*', 'http://foo', ''],
			['*://foo.is', 'http://foo.is', 'http'],
			['*http://foo.is', 'http://foo.is', ''],
			['http*foo*', 'http://foobar.is', '://,bar.is'],
			['http*foo*', 'http://foo', '://,'],
			['*://f*.is', 'http://foo.is', 'http,oo'],
			['*http://f*.is', 'http://foo.is', ',oo'],
			['*foo*', 'http://foo', 'http://,'],
			['*foo*', 'foobar.is', ',bar.is'],
			['*foo*', 'http://foobar.is', 'http://,bar.is'],
			['http://foo.is', 'http://foo.is', ''],
			['*', 'http://foo.is', 'http://foo.is'],
			['*://*oo*bar*', 'http://foo.is/bar/baz', 'http,f,.is/,/baz'],
			['*://**oo*bar*', 'http://foo.is/bar/baz', 'http,,f,.is/,/baz'],
		]
	},
	
	"Regex matches" : {
		run : function(data) { 
			var pattern = data[0],
				url = data[1],
				expected = data[2];
			var parts = expected.split(',');
			var redirectUrl = '';
			if (!(parts.length == 1 && parts[0] == '')) {
				for (var i in parts) {
					redirectUrl += '$' + (parseFloat(i)+1) + ',';
				}
				redirectUrl = redirectUrl.substr(0, redirectUrl.length-1);
			}
			var redirect = new Redirect(null, pattern, redirectUrl, Redirect.REGEX, null, null);
			var result = redirect.getMatch(url);
			return { passed: result.isMatch && result.redirectTo == expected, message : "Expected '" + expected + "', actual was '" + result.redirectTo + "'"};
		},
		
		describe : function(data) { return data[0] + ' == ' + data[1] + ', matches=' + data[2]; },
		tests : [
			['http://foo(.*)', 'http://foobar.is', 'bar.is'],
			['http://foo(.*)', 'http://foo', ''],
			['(.*)://foo.is', 'http://foo.is', 'http'],
			['(.*)http://foo\\.is', 'http://foo.is', ''],
			['http(.*)foo(.*)', 'http://foobar.is', '://,bar.is'],
			['http(.*)foo(.*)', 'http://foo', '://,'],
			['(.*)://f(.*)\\.is', 'http://foo.is', 'http,oo'],
			['(.*)http://f(.*)\\.is', 'http://foo.is', ',oo'],
			['(.*)foo(.*)', 'http://foo', 'http://,'],
			['(.*)foo(.*)', 'foobar.is', ',bar.is'],
			['(.*)foo(.*)', 'http://foobar.is', 'http://,bar.is'],
			['http://foo\.is', 'http://foo.is', ''],
			['(.*)', 'http://foo.is', 'http://foo.is'],
			['(.*)://(.*)oo(.*)bar(.*)', 'http://foo.is/bar/baz', 'http,f,.is/,/baz'],
			['(.*)://(.*?)(.*)oo(.*)bar(.*)', 'http://foo.is/bar/baz', 'http,,f,.is/,/baz'],
		]
	},
	
	"nsIContentPolicy implementation" : {
		run : function(data) {
			var runTest = function() {
				var args = {
					contentType : nsIContentPolicy.TYPE_DOCUMENT, 
					contentLocation : "http://foo.is", 
					requestOrigin : null, 
					aContext : { loadURI : function(){}}, 
					mimeTypeGuess : null, 
					extra : null
				};
				for (var key in data[1]) {
					args[key] = data[1][key];
				}
				
				var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);  
				args.contentLocation = ioService.newURI(args.contentLocation, null, null);
				var contentPolicy = redirector.QueryInterface(nsIContentPolicy);
				var result = contentPolicy.shouldLoad(args.contentType, args.contentLocation, args.requestOrigin, args.aContext, args.mimeTypeGuess, args.extra);
				return { passed: result == nsIContentPolicy.ACCEPT, message : "Expected nsIContentPolicy.ACCEPT, actual was " + result };
			}
			
			if (typeof data[2] == "function") {
				return data[2](runTest);
			} else {
				return runTest();
			}
		},
		
		describe : function(data) { return data[0]; },
		tests : [
			["Accepts if not TYPE_DOCUMENT", { contentType : nsIContentPolicy.TYPE_STYLESHEET}],
			["Accepts if not http or https", { contentLocation : "resource://foo/bar"}],
			["Accepts if no aContext", { aContext : null}],
			["Accepts if aContext has no loadURI function", { aContext : { foo : function(){}}}],
			["Accepts if Redirector is not enabled", {}, function(doFunc) {
				try {
					redirector.enabled = false;
					return doFunc();
					redirector.enabled = true;

				} catch(e) {
					redirector.enabled = true;
					throw e;	
				}
			}]
		]		
	}
};