123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547 |
- module("core.utils");
- test('cssRule', function () {
- var utils = te.obj[0];
- utils.cssRule('test1', '.test{width:300px;}');
- var style = utils.cssRule('test1');
- ok(/^\.test/.test(style));
- utils.cssRule('test1', '');
- style = utils.cssRule('test1');
- ok(!style);
- var div = te.dom[2];
- div.innerHTML = '<span class="test">sdfsdf</span>';
- utils.cssRule('style_test', '.test{display:block}');
- utils.cssRule('style_test', '.test{font-size:48px}');
- var block = UE.dom.domUtils.getComputedStyle(div.firstChild, 'display');
- equals(block, 'inline');
- //删除样式
- utils.cssRule('style_test', '');
- equals(UE.dom.domUtils.getComputedStyle(div.firstChild, 'font-size'), '16px');
- });
- test("makeInstance", function () {
- var utils = te.obj[0];
- var obj = {
- s: 1,
- str: "makeInstance"
- }, str = "makeInstance";
- var ins = utils.makeInstance(obj);
- var ins1 = utils.makeInstance(str);
- equals(ins.s, 1, "ins.s");
- equals(ins.str, "makeInstance", "ins.str");
- same(ins1, {}, "null");
- same(utils.makeInstance(null), {}, "null");
- });
- test("isArray--普通对象", function () {
- var utils = te.obj[0];
- var arr = [ '1', '2' ], ob = {}, str = "array", fun = function () {
- };
- var div = te.dom[0];
- ok(utils.isArray(arr), 'arr is a array');
- ok(!utils.isArray(ob), 'ob is not a array');
- ok(!utils.isArray(str), 'str is not a array');
- ok(!utils.isArray(fun), 'fun is not a array');
- ok(!utils.isArray(null), 'null is not a array');
- ok(!utils.isArray(div), 'dom element is not a array');
- });
- test("isArray--类数组对象", function () {
- var utils = te.obj[0];
- var arrayLike = {
- 0: '0',
- 1: '1',
- 2: '2',
- length: 3
- };
- var div = te.dom[0];
- div.innerHTML = '<span><label></label></span>xxxxx<p></p>';
- ok(!utils.isArray(arrayLike), '类数组对象不是数组');
- ok(!utils.isArray(div.childNodes), 'nodeList 不是数组');
- });
- test("inherits", function () {
- var utils = te.obj[0];
- var superClass = function () {
- };
- var subClass = function () {
- };
- expect(4);
- var index = 0;
- superClass.prototype.name = "superClass";
- superClass.prototype.methodSuper = function () {
- ok(true, "method in superClass is called");
- };
- superClass.prototype.method = function () {
- ok(false, "I am in superClass");
- };
- subClass.prototype.name = "subClass";
- subClass.prototype.methodSub = function () {
- ok(true, "method in subClass is called");
- };
- subClass.prototype.method = function () {
- ok(true, "I am in subClass");
- };
- utils.inherits(subClass, superClass);
- var sub = new subClass();
- /*子类自己的名字,父类的被覆盖*/
- equal(sub.name, "subClass", "the name of subClass");
- /*从父类中继承的方法*/
- sub.methodSuper();
- /*子类自己的方法*/
- sub.methodSub();
- /*覆盖父类中的method方法*/
- sub.method();
- });
- test("bind", function () {
- var utils = te.obj[0];
- var first_object = { num: 4 };
- var second_object = { num: 2 };
- function multiply(mult) {
- return this.num * mult;
- }
- var first_multiply = utils.bind(multiply, first_object);
- equal(first_multiply(5), 20, "first_object"); // returns 4 * 5
- var second_multiply = utils.bind(multiply, second_object);
- equal(second_multiply(5), 10, "second_object");
- });
- test('defer--一个defer', function () {
- var utils = te.obj[0];
- var delay = 100;
- expect(1);
- stop();
- /*defer返回一个闭包,算defer不准,chrome下会 相差300多ms,没办法判断延时是否准确*/
- var stime = +new Date();
- utils.defer(function () {
- ok(1, '检查回调函数是否触发');
- start();
- }, delay)();
- });
- test('defer--多个defer', function () {
- var utils = te.obj[0];
- var delay = 40;
- stop();
- expect(2);
- utils.defer(function () {
- ok(true, '第一个触发');
- }, delay)();
- utils.defer(function () {
- ok(true, '第二个触发');
- start();
- }, delay)();
- });
- /*若互斥,则前一个注册的setTimeout事件被删除*/
- test('defer--考虑互斥', function () {
- var utils = te.obj[0];
- var delay = 20;
- stop();
- expect(1);
- /*exclusion=true*/
- var defer = utils.defer(function () {
- ok(1, '检查回调函数是否在规定的时间内触发');
- }, delay, true);
- defer();
- //第一个defer会被删掉
- defer();
- setTimeout(function () {
- start();
- }, 100);
- });
- test("extend--true", function () {
- var utils = te.obj[0];
- var obj1 = {a: 3, b: "str", fun: function () {
- ok(true, "fun");
- }, n: null};
- var obj2 = {a: 2, c: 1};
- utils.extend(obj2, obj1, true);
- equal(obj2.a, 2, "obj2 a");
- equal(obj2.b, "str", "obj2 str");
- equal(obj2.c, 1, "obj2 c");
- obj2.fun();
- equal(obj2.n, null, "obj2 n null");
- });
- test("extend--false", function () {
- var utils = te.obj[0];
- var obj1 = {a: 3, b: "str", fun: function () {
- ok(true, "fun");
- }, n: null};
- var obj2 = {a: 2, c: 1};
- utils.extend(obj2, obj1, false);
- equal(obj2.a, 3, "obj2 a");
- equal(obj2.b, "str", "obj2 str");
- equal(obj2.c, 1, "obj2 c");
- obj2.fun();
- equal(obj2.n, null, "obj2 n null");
- });
- test('indexOf', function () {
- var utils = te.obj[0];
- var s = [ 1, 2, 3, 4, 5 ];
- equals(utils.indexOf(s, 3), 2);
- equals(utils.indexOf(s, 6), -1);
- equals(utils.indexOf(s, 5), 4);
- equals(utils.indexOf(s, 3, 3), -1);
- equals(utils.indexOf(s, 3, 3), -1);
- });
- test('removeItem&&itemexist', function () {
- var utils = te.obj[0];
- var s = [ 1, 2, 3, 4, 5 , 4, 3];
- equal(s[5], 4, "before remove 4");
- utils.removeItem(s, 4);
- equal(s.length, 5, "4 be removed");
- equal(s[4], 3, "4 be removed");
- });
- test('removeItem&&itemnotexist', function () {
- var utils = te.obj[0];
- var s = [ 1, 2, 3, 4, 5 , 4];
- utils.removeItem(s, 6);
- equal(s.length, 6, "itemnotexist");
- });
- test("trim", function () {
- var utils = te.obj[0];
- var s = ' sss ';
- equals(utils.trim(s), 'sss', "两端有空格");
- s = " xxx ";
- equal(utils.trim(s), ' xxx', "包含 ");// 不能被捕获
- s = "string";
- equal(utils.trim(s), "string", '没有 和空格');
- });
- test('listToMap', function () {
- var utils = te.obj[0];
- var s = "listToMap";
- var re = utils.listToMap(s);
- equal(re.listToMap, 1, "listToMap");
- });
- test('list,To,Map', function () {
- var utils = te.obj[0];
- var s = "list,To,Map";
- var re = utils.listToMap(s);
- equal(re.list, 1, "list");
- equal(re.To, 1, "list");
- equal(re.Map, 1, "Map");
- });
- test('listToMap ""', function () {
- var utils = te.obj[0];
- var s = "";
- var re = utils.listToMap(s);
- equal(re.toString(), {}, "{}");
- });
- test('listToMap null', function () {
- var utils = te.obj[0];
- var s = null;
- var re = utils.listToMap(s);
- equal(re.toString(), {}, "{}");
- });
- test('listToMap numstring', function () {
- var utils = te.obj[0];
- var s = "123333";
- var re = utils.listToMap(s);
- equal(re[123333], 1, "num");
- });
- test('unhtml 字符转义', function () {
- var utils = te.obj[0];
- var str = '<p>"as&cd"</p>';
- var str_html = utils.unhtml(str);
- equal(str_html, '<p>"as&cd"</p>', '转义字符成功');
- str = 'border:<script>alert("")</script>"'
- equal(utils.unhtml(str), 'border:<script>alert("")</script>"', '转义字符成功');
- str = "'";
- equal(utils.unhtml('比如小这个汉字的unicode编码'), '比如小这个汉字的unicode编码');
- equal(utils.unhtml('比如&#<23567;这个汉字的unicode编码<>'), '比如&#<23567;这个汉字的unicode编码<>')
- });
- test('html 反转义', function () {
- var utils = te.obj[0];
- var str_html = '<p>"as&cd"</p>';
- var str = utils.html(str_html);
- equal(str, '<p>"as&cd"</p>', '反转义成功');
- });
- test('unhtml null ""', function () {
- var utils = te.obj[0];
- var s = null;
- equal(utils.unhtml(s), "", "unhtml null");
- s = '';
- equal(utils.unhtml(s), "", "unhtml null");
- });
- test('cssStyleToDomStyle', function () {
- var utils = te.obj[0];
- equal(utils.cssStyleToDomStyle("cssFloat").toLowerCase(), "cssfloat", "cssFloat");
- if (ua.browser.ie && ua.browser.ie < 9) {
- equal(utils.cssStyleToDomStyle("float").toLowerCase(), "stylefloat", "float");
- } else {
- equal(utils.cssStyleToDomStyle("float").toLowerCase(), "cssfloat", "float");
- }
- equal(utils.cssStyleToDomStyle("styleFloat").toLowerCase(), "stylefloat", "styleFloat");
- });
- //zhuwenxuan add
- test("isEmptyObject", function () {
- var utils = te.obj[0];
- var obj = {
- n: 1
- };
- equal(false, utils.isEmptyObject(obj));
- equal(true, utils.isEmptyObject([]));
- equal(true, utils.isEmptyObject(""));
- });
- //dong
- test("fixColor", function () {
- var utils = te.obj[0];
- equal('#953734', utils.fixColor("color", 'rgb(149, 55, 52)'), 'fixColor');
- });
- test("sort", function () {
- var utils = te.obj[0];
- same(["a", "df", "sdf", "asdf"], utils.sort(['a', 'asdf', 'df', 'sdf'], function (a, b) {
- if (a.length > b.length)
- return 1;
- else return 0;
- }), 'sort');
- });
- test("domReady", function () {
- var utils = te.obj[0];
- expect(1);
- utils.domReady(function () {
- ok(1, 'domReady')
- });
- });
- test('4个padding属性', function () {
- // var css = 'padding-bottom:0px; margin:0px 0px 20px; padding-left:0px; padding-right:4px; padding-top:0px';
- /*上下相同,左右相同*/
- var css = 'padding-bottom:3px;padding-left:2px;padding-right:2px;padding-top:3px';
- var result = UE.utils.optCss(css);
- equal(result, 'padding:3px 2px;', '上下相同,左右相同');
- /*上下不同,左右相同*/
- css = 'padding-bottom:2px;padding-left:2px;padding-right:2px;padding-top:3px';
- result = UE.utils.optCss(css);
- equal(result, 'padding:3px 2px 2px;', '上下不同,左右相同');
- /*只有2个属性*/
- css = 'padding-bottom:2px;padding-left:2px;';
- result = UE.utils.optCss(css);
- equal(result, 'padding-bottom:2px;padding-left:2px;', '2个属性就不合');
- });
- test('4个margin属性', function () {
- /*上下相同,左右相同*/
- var css = 'margin-bottom:3px;margin-left:2px;margin-right:2px;margin-top:3px';
- var result = UE.utils.optCss(css);
- equal(result, 'margin:3px 2px;', '上下相同,左右相同');
- css = 'margin-bottom:2px;margin-left:2px;margin-right:2px;margin-top:2px';
- result = UE.utils.optCss(css);
- equal(result, 'margin:2px;', '全相同');
- /*上下不同,左右相同*/
- css = 'margin-bottom:2px;margin-left:2px;margin-right:2px;margin-top:3px';
- result = UE.utils.optCss(css);
- equal(result, 'margin:3px 2px 2px;', '上下不同,左右相同');
- /*只有1个属性*/
- css = 'margin-top:2px;';
- result = UE.utils.optCss(css);
- equal(result, 'margin-top:2px;', '1个属性就不合');
- });
- test('合并;的问题', function () {
- equal(UE.utils.optCss('font-size:12px;";<dssdfs>;;'), 'font-size:12px;";<dssdfs>;', '');
- });
- //test( '合并border相关属性', function () {
- //// var css = 'border-width:thin medium;' + //只有border-width
- //// 'border-top-color:red;border-bottom-color:red;border-left-color:red;' + //3个分属性相同,不应当合
- //// 'border-right-style:hidden;border-bottom-style:hidden;border-left-style:hidden;border-top-style:hidden'; //4个分属性相同,应当合
- //// var result = UE.utils.optCss( css );
- //// equal( result, 'border-width:thin medium;border-top-color:red;border-bottom-color:red;border-left-color:red;border-style:hidden' );
- //// /*border属性, border不能分别定义4个边框的宽度,颜色和样式,
- //// 只能统一定义,不可以对四个边设置不同的值,和margin与padding是不同的(后两者可以分别定义四个边的值).*/
- //// css = 'border-top:2px hidden red;border-right:2px hidden red';
- //// result = UE.utils.optCss(css );
- //// equal(result,css,'border2个属性不合');
- //// /*4个属性都相同,合*/
- //// css = 'border-top:2px hidden red;border-right:2px hidden red;border-left:2px hidden red;border-bottom:2px hidden red';
- //// result = UE.utils.optCss(css );
- //// equal(result,'border:2px hidden red;','4个属性都相同,合');
- //// /*4个属性不同,不合*/
- //// css = 'border-top:2px hidden red;border-right:3px hidden red;border-left:2px hidden red;border-bottom:2px hidden red';
- //// result = UE.utils.optCss(css );
- //// equal(result,'border:2px hidden red;','4个属性不同,不合');
- // var css = 'border-image:initial;'
- //} ) ;
- //
- test('margin,border,padding属性混杂', function () {
- var css = 'margin-bottom:3px;margin-left:2px;margin-right:2px;margin-top:3px;padding:4px;border-image:initial;border-top-color:red;';
- var result = UE.utils.optCss(css);
- equal(result, 'padding:4px;border-top-color:red;margin:3px 2px;', 'margin,border,padding属性混同');
- });
- test('each 遍历方法', function () {
- var div = te.dom[0];
- div.innerHTML = '<span></span><span></span><span id="a"></span><span></span>';
- UE.utils.each(div.getElementsByTagName('span'), function (node, i) {
- equal(node.tagName, 'SPAN', '遍历nodelist');
- });
- var count = 0;
- UE.utils.each(div.getElementsByTagName('span'), function (node, i) {
- count++;
- if (node.id == 'a')
- return false
- });
- equal(count, 3);
- UE.utils.each(['a', 'b'], function (v, i) {
- equal(v, ['a', 'b'][i], '遍历数组');
- });
- UE.utils.each({a: 1, b: 2}, function (v, k) {
- equal(v, {a: 1, b: 2}[k], '遍历对象');
- });
- });
- test('clone 转换', function () {
- var obj = {a: 1};
- var obj1 = UE.utils.clone({a: 1});
- obj.a = 2;
- equal(obj1.a, 1);
- obj = {
- a: {
- b: 1
- },
- c: [1, 2]
- }
- obj1 = UE.utils.clone(obj);
- obj.a.b = 2;
- equal(obj1.a.b, 1);
- obj.c[1] = 3;
- equal(obj1.c[1], 2);
- });
- test('transUnitToPx 转换', function () {
- equal(UE.utils.transUnitToPx('20pt'), '27px');
- equal(UE.utils.transUnitToPx('0pt'), '0');
- });
- test('RegExp', function () {
- var reg = new RegExp(".*");
- equal(ok(utils.isRegExp(reg), 'reg is a RegExp'));
- });
- test('isDate', function () {
- var date = new Date();
- equal(ok(utils.isDate(date), 'date is a Date'));
- });
- test('isCrossDomainUrl', function () {
- var l = location;
- ok(!utils.isCrossDomainUrl(location.href), 'location.href 不跨域');
- if (l.port == '') {
- ok(!utils.isCrossDomainUrl(l.protocol + '//' + l.hostname + ':80/ueditor/'), '本地没端口,80端口不跨域');
- }
- if (l.port == '80') {
- ok(!utils.isCrossDomainUrl(l.protocol + '//' + l.hostname + '/ueditor/'), '本地没80端口,无端口不跨域');
- }
- if (l.protocol == 'http:') {
- ok(utils.isCrossDomainUrl('https://' + l.host + '/ueditor/'), '本地http协议,https协议跨域');
- } else {
- ok(utils.isCrossDomainUrl('http://' + l.host + '/ueditor/'), '本地不是http协议,http协议跨域');
- }
- ok(utils.isCrossDomainUrl(l.protocol + '//www.baidu.com' + ':' + l.port), '域名不一致跨域');
- });
- test('formatUrl', function () {
- var url1 = 'http://localhost/a.html?&key1=value1&&key2=value2&&&&&&&&&key3=value3&#hash';
- var url2 = 'http://localhost/a.html?&key1=value1&&key2=value2&&&&&&&&&key3=value3&';
- equal(utils.formatUrl(url1), 'http://localhost/a.html?key1=value1&key2=value2&key3=value3#hash', '格式化url');
- equal(utils.formatUrl(url2), 'http://localhost/a.html?key1=value1&key2=value2&key3=value3', '格式化url');
- });
- test('str2json', function () {
- same(utils.str2json('{"a":11,"b":"22","c":"cc","d":[1,"2","a",{"a":"aa"}],"e":{"k1":1,"k2":"2","k3":"a","k4":{"a":"aa"}}}'),
- {"a": 11, "b": "22", "c": "cc", "d": [1, "2", "a", {"a": "aa"}], "e": {"k1": 1, "k2": "2", "k3": "a", "k4": {"a": "aa"}}},
- '字符串转json对象');
- });
- test('json2str', function () {
- equal(utils.json2str({"a": 11, "b": "22", "c": "cc", "d": [1, "2", "a", {"a": "aa"}], "e": {"k1": 1, "k2": "2", "k3": "a", "k4": {"a": "aa"}}}),
- '{"a":11,"b":"22","c":"cc","d":[1,"2","a",{"a":"aa"}],"e":{"k1":1,"k2":"2","k3":"a","k4":{"a":"aa"}}}',
- 'json对象转字符串');
- });
- test('json2str 不使用原生方法', function () {
- stop();
- var j = window.JSON;
- var flag = 0;
- ua.readFile("../../../_test/coverage/core/utils.js", function (s) {
- if(s===null)flag = 1;
- window.JSON = null;
- eval(s);
- equal(utils.json2str({"a": 11, "b": "22", "c": "cc", "d": [1, "2", "a", {"a": "aa"}], "e": {"k1": 1, "k2": "2", "k3": "a", "k4": {"a": "aa"}}}),
- '{"a":11,"b":"22","c":"cc","d":[1,"2","a",{"a":"aa"}],"e":{"k1":1,"k2":"2","k3":"a","k4":{"a":"aa"}}}',
- 'json对象转字符串');
- window.JSON = j;
- });
- if(flag){
- ua.readFile("../../../_src/core/utils.js", function (s) {
- window.JSON = null;
- eval(s);
- equal(utils.json2str({"a": 11, "b": "22", "c": "cc", "d": [1, "2", "a", {"a": "aa"}], "e": {"k1": 1, "k2": "2", "k3": "a", "k4": {"a": "aa"}}}),
- '{"a":11,"b":"22","c":"cc","d":[1,"2","a",{"a":"aa"}],"e":{"k1":1,"k2":"2","k3":"a","k4":{"a":"aa"}}}',
- 'json对象转字符串');
- window.JSON = j;
- });
- }
- setTimeout(function(){start();},50);
- });
- test('clearEmptyAttrs', function () {
- var utils = te.obj[0];
- var ob = utils.clearEmptyAttrs({a: 1, b: ''});
- ok(!ob.hasOwnProperty('b'), 'clearEmptyAttrs');
- });
- test('serializeParam', function () {
- equal(utils.serializeParam({
- key1: 'value1',
- key2: 'value2',
- key3: 33,
- key4: '44',
- key5: true,
- key6: null,
- key7: undefined,
- key8: [11, 22, '33', 'aa', true, null]
- }),
- 'key1=value1&' +
- 'key2=value2&' +
- 'key3=33&' +
- 'key4=44&' +
- 'key5=true&' +
- 'key7=undefined&' +
- 'key8[]=11&' +
- 'key8[]=22&' +
- 'key8[]=33&' +
- 'key8[]=aa&' +
- 'key8[]=true&' +
- 'key8[]=null',
- '序列化obj对象为GET请求字符串');
- });
|