Repository navigation
Expand file tree
/
Copy pathtest.html
More file actions
215 lines (176 loc) · 17.6 KB
/
Copy pathtest.html
File metadata and controls
215 lines (176 loc) · 17.6 KB
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PF tests</title>
</head>
<body>
<div id="result"></div>
<div id="data"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="video_embed.js"></script>
<script src="newthread_forum_list.js"></script>
<script src="../pf_search_link.user.js"></script>
<script src="search_link.js"></script>
<script src="../pf_code_highlighter.user.js"></script>
<script src="highlight/code_highlighter.js"></script>
<script>
(function() {
function assert(expected, actual, msg) {
if (expected !== actual) {
throw new Error(msg ? msg : 'Assertion failed: ' + actual + ' !== ' + expected)
}
}
function assertObjEqual(expected, actual, msg) {
assert(JSON.stringify(expected), JSON.stringify(actual), msg);
}
function testYoutubeParsing() {
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://www.youtube.com/watch?v=GJIQs-wT8QC').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://www.youtube.com/watch?v=GJIQs-wT8QC&s=89#123').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('http://www.youtube.com/watch?v=GJIQs-wT8QC').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://youtube.com/watch?v=GJIQs-wT8QC').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://youtube.com/watch/GJIQs-wT8QC?s=89#123').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://youtube.com/v/GJIQs-wT8QC').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://youtube.com/embed/GJIQs-wT8QC').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://youtu.be/GJIQs-wT8QC').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('http://youtu.be/GJIQs-wT8QC?s=89#123').id);
assert('GJIQs-wT8QC', videoembed.parseYoutube('https://youtu.be/GJIQs-wT8QC/888').id);
assert(62, videoembed.parseYoutube('https://www.youtube.com/watch?v=GJIQs-wT8QC&t=1m2s').params.start);
assert(3738, videoembed.parseYoutube('https://youtu.be/GJIQs-wT8QC?t=1h2m18s').params.start);
assert(498, videoembed.parseYoutube('https://youtu.be/GJIQs-wT8QC?t=8m18s').params.start);
assert(8, videoembed.parseYoutube('https://youtu.be/GJIQs-wT8QC?t=8s').params.start);
assert(125, videoembed.parseYoutube('https://youtu.be/GJIQs-wT8QC?t=125').params.start);
assert(false, videoembed.parseYoutube('https://www.ya.ru/watch?v=GJIQs-wT8QC'));
assert(false, videoembed.parseYoutube('https://www.youtube.com/channel/UCM0eZccvLPlFDcxBVhTQ'));
assert(false, videoembed.parseYoutube('https://www.youtube.com/'));
assert(false, videoembed.parseYoutube('qwe'));
assert(false, videoembed.parseYoutube(''));
}
function testCoubParsing() {
assert('2xo63', videoembed.parseCoubId('http://coub.com/view/2xo63'));
assert('2xo63', videoembed.parseCoubId('https://coub.com/view/2xo63'));
assert('2xo63', videoembed.parseCoubId('http://coub.com/embed/2xo63'));
assert('2xo63', videoembed.parseCoubId('http://coub.com/view/2xo63?s=86#123'));
assert('2xo63.gifv', videoembed.parseCoubId('http://coub.com/view/2xo63.gifv'));
assert(false, videoembed.parseCoubId('http://ya.ru/view/2xo63'));
assert(false, videoembed.parseCoubId('http://coub.com/'));
assert(false, videoembed.parseCoubId('http://coub.com/123/456'));
assert(false, videoembed.parseCoubId('qwe'));
assert(false, videoembed.parseCoubId(''));
}
function testUrlQueryParsing() {
var query = newthreadForumList.parseUrlQuery('?do=newthread&f=31');
assert('newthread', query['do']);
assert('31', query['f']);
assert(undefined, query['unknown']);
}
function testForumsParsing() {
var html = '<fieldset class="fieldset" style="margin:0px"> <div style="padding:3px"> <div> <select style="width:100%"x size="13" multiple="multiple"> <option value="0" >Искать во всех открытых разделах</option> <option value="subscribed">Искать в разделах, на которые вы подписаны</option> <option value="45" class="fjdpth0" > cccc в программировании</option>x<option value="7" class="fjdpth1" selected="selected"> Паскаль</option> </select> </div> <div><label for="cb_childforums"><input type="checkbox" name="childforums" value="1" id="cb_childforums" checked="checked" />Включая подразделы</label></div> </div> </fieldset><fieldset class="fieldset" style="margin:0px"> <legend>Поиск по разделам</legend> <div style="padding:3px"> <div> <select style="width:100%" name="forumchoice[]" size="13" multiple="multiple"> <option value="0" >Искать во всех открытых разделах</option> <option value="subscribed">Искать в разделах, на которые вы подписаны</option> <option value="45" class="fjdpth0" > Новички в программировании</option><option value="31" class="fjdpth1" selected="selected"> Помощь студентам</option><option value="7" class="fjdpth1" selected="selected"> Паскаль</option><option value="99" class="fjdpth1" selected="selected"> Исходники на любых языках программирования</option><option value="1" class="fjdpth0" selected="selected"> Delphi программирование</option><option value="2" class="fjdpth1" selected="selected"> Общие вопросы Delphi</option><option value="47" class="fjdpth1" selected="selected"> Мультимедиа в Delphi</option><option value="39" class="fjdpth1" selected="selected"> Компоненты Delphi</option><option value="3" class="fjdpth1" > Работа с сетью в Delphi</option><option value="5" class="fjdpth1" > БД в Delphi</option><option value="67" class="fjdpth1" > Lazarus, Free Pascal, CodeTyphon</option><option value="8" class="fjdpth0" > Низкоуровневое программирование</option><option value="4" class="fjdpth1" > Win Api</option><option value="9" class="fjdpth1" > Assembler</option><option value="13" class="fjdpth0" > C++ программирование</option><option value="14" class="fjdpth1" > Общие вопросы C/C++</option><option value="51" class="fjdpth1" > Visual C++</option><option value="52" class="fjdpth1" > C++ Builder</option><option value="40" class="fjdpth1" > Qt и кроссплатформенное программирование С/С++</option><option value="53" class="fjdpth1" > C/C++ Базы данных</option><option value="54" class="fjdpth1" > C/C++ Сетевое программирование</option><option value="10" class="fjdpth0" > Java программирование</option><option value="11" class="fjdpth1" > Общие вопросы по Java, Java SE</option><option value="49" class="fjdpth1" > Java Мобильная разработка (Android)</option><option value="105" class="fjdpth1" > Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC)</option><option value="106" class="fjdpth1" > Java Базы данных (JDBC, JPA, Hibernate)</option><option value="15" class="fjdpth0" > Web программирование</option><option value="16" class="fjdpth1" > HTML и CSS</option><option value="44" class="fjdpth1" > Язык SQL</option><option value="17" class="fjdpth1" > PHP и другие серверные скрипты</option><option value="112" class="fjdpth1" > Perl</option><option value="110" class="fjdpth1" > Python</option><option value="111" class="fjdpth1" > Ruby</option><option value="12" class="fjdpth1" > Javascript, Ajax и другие клиентские скрипты</option><option value="66" class="fjdpth1" > ActionScript, Flex, Flash</option><option value="48" class="fjdpth1" > WordPress и другие CMS</option><option value="80" class="fjdpth1" > SEO, Adwords, Direct, SMM, Youtube, marketing, branding</option><option value="55" class="fjdpth0" > Программирование для .NET</option><option value="59" class="fjdpth1" > C# (си шарп)</option><option value="41" class="fjdpth1" > Общие вопросы .NET</option><option value="56" class="fjdpth1" > ASP.NET</option><option value="58" class="fjdpth1" > WPF, UWP, WinRT, XAML</option><option value="104" class="fjdpth1" > Windows Forms</option><option value="60" class="fjdpth1" > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)</option><option value="18" class="fjdpth0" > Microsoft Office и VBA</option><option value="20" class="fjdpth1" > Microsoft Office Excel</option><option value="21" class="fjdpth1" > Microsoft Office Access</option><option value="19" class="fjdpth1" > Microsoft Office Word</option><option value="83" class="fjdpth0" > Операционные системы</option><option value="25" class="fjdpth1" > Софт</option><option value="34" class="fjdpth1" > Операционные системы общие вопросы</option><option value="61" class="fjdpth1" > Windows</option><option value="62" class="fjdpth1" > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)</option><option value="63" class="fjdpth1" > Мобильные ОС (Android, iOS, Windows Phone)</option><option value="84" class="fjdpth1" > Администрирование серверов, VPS, хостингов</option><option value="32" class="fjdpth0" > Технологии</option><option value="6" class="fjdpth1" > Безопасность, Шифрование</option><option value="33" class="fjdpth1" > Gamedev - cоздание и обсуждение игр</option><option value="50" class="fjdpth1" > Проектирование web интерфейсов, приложений, базы данных</option><option value="97" class="fjdpth1" > Графический Дизайн, Моделирование, изометрия, photoshop, 3d редакторы</option><option value="71" class="fjdpth1" > CAD проектирование для инженеров AutoCAD, ArchiCAD</option><option value="107" class="fjdpth1" > API подключение, XML, JSON</option><option value="69" class="fjdpth0" > Инженерный раздел</option><option value="46" class="fjdpth1" > Железо</option><option value="96" class="fjdpth1" > Радиоаппаратостроение, схемотехника, микроконтроллеры, робототехника, умный дом, 3D принтеры</option><option value="28" class="fjdpth0" > Работа для программиста</option><option value="30" class="fjdpth1" > Работа на постоянной основе</option><option value="29" class="fjdpth1" > Фриланс</option><option value="108" class="fjdpth1" > Ищу работу, резюме, портфолио, отзывы</option><option value="23" class="fjdpth0" > Клуб программистов</option><option value="37" class="fjdpth1" > О форуме и сайтах клуба</option><option value="24" class="fjdpth1" > Обсуждение статей</option><option value="26" class="fjdpth1" > Свободное общение</option> </select> </div> <div><label for="cb_childforums"><input type="checkbox" name="childforums" value="1" id="cb_childforums" checked="checked" />Включая подразделы</label></div> </div> </fieldset>';
var forums = newthreadForumList.parseForums(html);
console.log(forums);
assert(true, forums instanceof Array);
assert(13, forums.length);
assert('Новички в программировании', forums[0].name);
assert('Помощь студентам', forums[0].children[0].name);
assert(31, forums[0].children[0].id);
assertObjEqual({ name: 'Клуб программистов', children: [
{ name: 'О форуме и сайтах клуба', id: 37 }, { name: 'Обсуждение статей', id: 24 }, { name: 'Свободное общение', id: 26 } ] },
forums[12]);
}
function testWin1251UrlEncode(obj) {
assert('PHP%20xml', obj.win1251UrlEncode('PHP xml'));
assert('%CF%E0%F1%EA%E0%EB%FC%20%E4%E5%EB%FC%F4%E8', obj.win1251UrlEncode('Паскаль дельфи'));
assert('a%26%23382%3B%26%23269%3B%F4', obj.win1251UrlEncode('ažčф'));
}
function testSearchQueryFiltering(obj) {
var form1 = [
{ name: 'do', value: 'process' },
{ name: 'query', value: 'php' },
{ name: 's', value: '' },
{ name: 'securitytoken', value: '11111111' },
{ name: 'quicksearch', value: '1' },
{ name: 'childforums', value: '1' },
{ name: 'exactname', value: '1' },
{ name: 'showposts', value: '0' }
];
var form2 = [
{ name: 'do', value: 'process' },
{ name: 'query', value: 'php' },
{ name: 's', value: '' },
{ name: 'securitytoken', value: '11111111' },
{ name: 'childforums', value: '1' },
{ name: 'exactname', value: '1' },
{ name: 'showposts', value: '0' }
];
assertObjEqual([
{ name: 'query', value: 'php' },
{ name: 'showposts', value: '0' },
{ name: 'do', value: 'process' }
], obj.createQuery(form1));
assertObjEqual([
{ name: 'query', value: 'php' },
{ name: 'showposts', value: '0' }
], obj.createQuery(form1, true));
assertObjEqual([
{ name: 'query', value: 'php' },
{ name: 'childforums', value: '1' },
{ name: 'exactname', value: '1' },
{ name: 'showposts', value: '0' }
], obj.createQuery(form2, true));
}
function testSearchQuerySerialization(obj) {
var query = [
{ name: 'query', value: 'PHP xml файл' },
{ name: 'do', value: 'process' }
];
assert('query=PHP%20xml%20%F4%E0%E9%EB&do=process', obj.serializeQuery(query));
}
function testGetForumId(obj) {
var data = window.document.getElementById('data');
data.innerHTML = 'nothing';
assert(0, obj.getForumId());
data.innerHTML = `<table cellpadding="0" cellspacing="0" border="0">
<tbody><tr valign="bottom">
<td><a href="#" onclick="history.back(1); return false;"></a></td>
<td> </td>
<td width="100%"><span class="navbar"><a href="index.php" accesskey="1">Форум программистов</a></span>
<span class="navbar">> <a href="forumdisplay.php?f=18">Microsoft Office и VBA</a></span>
<span class="navbar">> <a href="forumdisplay.php?f=20">Microsoft Office Excel</a></span>
</td>
</tr>
</tbody></table>`;
assert(20, obj.getForumId());
}
function testgetForumLanguages(obj) {
assert(true, obj.getForumLanguages(20).includes('vbnet'));
assert(true, obj.getForumLanguages(20).includes('sql'));
assert(false, obj.getForumLanguages(20).includes('delphi'));
assertObjEqual(null, obj.getForumLanguages(0));
}
var result = window.document.getElementById('result');
try {
testYoutubeParsing();
testCoubParsing();
testUrlQueryParsing();
testForumsParsing();
testWin1251UrlEncode(searchlink);
testWin1251UrlEncode(searchlink_u);
testSearchQueryFiltering(searchlink);
testSearchQueryFiltering(searchlink_u);
testSearchQuerySerialization(searchlink);
testSearchQuerySerialization(searchlink_u);
testgetForumLanguages(codehighlighter_u);
testGetForumId(codehighlighter_u);
window.codeHighlighterInitialized = false;
codehighlighter.init();
testGetForumId(codehighlighter);
testgetForumLanguages(codehighlighter);
result.innerHTML = 'ok';
} catch (e) {
result.innerHTML = '<p style="color: red;">' + e.message + '</p><pre>' + e.stack + '</pre>';
throw e;
}
})();
</script>
</body>
</html>