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
130
131
132
133
134
135
136
137
138
139
|
"use strict";
const URL = "ftp://localhost/bug464884/";
const tests = [
// standard ls unix format
[
"-rw-rw-r-- 1 500 500 0 Jan 01 2000 file1\r\n" +
"-rw-rw-r-- 1 500 500 0 Jan 01 2000 file2\r\n",
"300: " +
URL +
"\n" +
"200: filename content-length last-modified file-type\n" +
'201: "file1" 0 Sat%2C%2001%20Jan%202000%2000%3A00%3A00%20GMT FILE \n' +
'201: "%20file2" 0 Sat%2C%2001%20Jan%202000%2000%3A00%3A00%20GMT FILE \n',
],
// old Hellsoft unix format
[
"-[RWCEMFA] supervisor 214059 Jan 01 2000 file1\r\n" +
"-[RWCEMFA] supervisor 214059 Jan 01 2000 file2\r\n",
"300: " +
URL +
"\n" +
"200: filename content-length last-modified file-type\n" +
'201: "file1" 214059 Sat%2C%2001%20Jan%202000%2000%3A00%3A00%20GMT FILE \n' +
'201: "file2" 214059 Sat%2C%2001%20Jan%202000%2000%3A00%3A00%20GMT FILE \n',
],
// new Hellsoft unix format
[
"- [RWCEAFMS] jrd 192 Jan 01 2000 file1\r\n" +
"- [RWCEAFMS] jrd 192 Jan 01 2000 file2\r\n",
"300: " +
URL +
"\n" +
"200: filename content-length last-modified file-type\n" +
'201: "file1" 192 Sat%2C%2001%20Jan%202000%2000%3A00%3A00%20GMT FILE \n' +
'201: "%20file2" 192 Sat%2C%2001%20Jan%202000%2000%3A00%3A00%20GMT FILE \n',
],
// DOS format with correct offsets
[
"01-01-00 01:00AM <DIR> dir1\r\n" +
"01-01-00 01:00AM <JUNCTION> junction1 -> foo1\r\n" +
"01-01-00 01:00AM 95077 file1\r\n" +
"01-01-00 01:00AM <DIR> dir2\r\n" +
"01-01-00 01:00AM <JUNCTION> junction2 -> foo2\r\n" +
"01-01-00 01:00AM 95077 file2\r\n",
"300: " +
URL +
"\n" +
"200: filename content-length last-modified file-type\n" +
'201: "dir1" 0 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT DIRECTORY \n' +
'201: "junction1" Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT SYMBOLIC-LINK \n' +
'201: "file1" 95077 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT FILE \n' +
'201: "%20dir2" 0 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT DIRECTORY \n' +
'201: "%20junction2" Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT SYMBOLIC-LINK \n' +
'201: "%20file2" 95077 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT FILE \n',
],
// DOS format with wrong offsets
[
"01-01-00 01:00AM <DIR> dir1\r\n" +
"01-01-00 01:00AM <DIR> dir2\r\n" +
"01-01-00 01:00AM <DIR> dir3\r\n" +
"01-01-00 01:00AM <JUNCTION> junction1 -> foo1\r\n" +
"01-01-00 01:00AM <JUNCTION> junction2 -> foo2\r\n" +
"01-01-00 01:00AM <JUNCTION> junction3 -> foo3\r\n" +
"01-01-00 01:00AM 95077 file1\r\n" +
"01-01-00 01:00AM 95077 file2\r\n",
"300: " +
URL +
"\n" +
"200: filename content-length last-modified file-type\n" +
'201: "dir1" 0 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT DIRECTORY \n' +
'201: "dir2" 0 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT DIRECTORY \n' +
'201: "dir3" 0 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT DIRECTORY \n' +
'201: "junction1" Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT SYMBOLIC-LINK \n' +
'201: "junction2" Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT SYMBOLIC-LINK \n' +
'201: "junction3" Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT SYMBOLIC-LINK \n' +
'201: "file1" 95077 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT FILE \n' +
'201: "file2" 95077 Sat%2C%2001%20Jan%202000%2001%3A00%3A00%20GMT FILE \n',
],
];
function checkData(request, data, ctx) {
Assert.equal(tests[0][1], data);
tests.shift();
executeSoon(next_test);
}
function storeData(status, entry) {
var scs = Cc["@mozilla.org/streamConverters;1"].getService(
Ci.nsIStreamConverterService
);
var converter = scs.asyncConvertData(
"text/ftp-dir",
"application/http-index-format",
new ChannelListener(checkData, null, CL_ALLOW_UNKNOWN_CL),
null
);
var stream = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(
Ci.nsIStringInputStream
);
stream.data = tests[0][0];
var url = NetUtil.newURI(URL);
var channel = {
URI: url,
contentLength: -1,
pending: true,
isPending() {
return this.pending;
},
QueryInterface: ChromeUtils.generateQI(["nsIChannel"]),
};
converter.onStartRequest(channel, null);
converter.onDataAvailable(channel, stream, 0, 0);
channel.pending = false;
converter.onStopRequest(channel, null, Cr.NS_OK);
}
function next_test() {
if (tests.length == 0) {
do_test_finished();
} else {
storeData();
}
}
function run_test() {
executeSoon(next_test);
do_test_pending();
}
|