mirror of
https://github.com/cocos/cocos-engine.git
synced 2026-09-06 15:48:37 +08:00
* unit test for ts * Fix ts-jest warnings * Remove puppeteer for now * fix physics define and jest config for windows * Replace Node ref with INode ref * Fix ci issue * Fix * tweak * tweak * Fix vscode launcher * now physics framework export all physics component (#28) * tweaks
549 lines
18 KiB
JavaScript
549 lines
18 KiB
JavaScript
/*global test, deepEqual, largeModule, strictEqual */
|
|
|
|
largeModule('HtmlTextParser');
|
|
|
|
var parser = new cc._Test.HtmlTextParser();
|
|
|
|
test('Basic Test', function() {
|
|
|
|
var testStr1 = "hello world";
|
|
deepEqual(parser.parse(testStr1),
|
|
[{text: "hello world"}],
|
|
'No Html string should be equal to original.');
|
|
|
|
var testInvalidStr2 = "<x hello world";
|
|
deepEqual(parser.parse(testInvalidStr2),
|
|
[{text: "x hello world"}],
|
|
'Invalid tag begin.');
|
|
|
|
var testInvalidStr1 = "<x>hello world</x>";
|
|
deepEqual(parser.parse(testInvalidStr1),
|
|
[{text: "hello world", style: {}}],
|
|
'Invalid tags');
|
|
|
|
|
|
var testInvalidStr3 = "</b>hello world";
|
|
deepEqual(parser.parse(testInvalidStr3),
|
|
[{text: "hello world"}],
|
|
"invalid tags end.");
|
|
|
|
var testInvalidStr4 = "</>hello world";
|
|
deepEqual(parser.parse(testInvalidStr4),
|
|
[{text: "hello world"}],
|
|
"Empty tags are emitted.");
|
|
|
|
var testInvalidStr5 = "<b>hello world";
|
|
deepEqual(parser.parse(testInvalidStr5),
|
|
[{text: "hello world"}],
|
|
"Empty tags are emitted.");
|
|
});
|
|
|
|
|
|
|
|
|
|
test('Color test', function(){
|
|
var colorTestStr1 = "<color=#0xffff00>hello world</color>";
|
|
deepEqual(parser.parse(colorTestStr1),
|
|
[{text: "hello world", style: {color: "#0xffff00"}}],
|
|
"Happy path.");
|
|
|
|
var colorTestStr2 = "<color=#0xffff33>hello world</xxx>";
|
|
deepEqual(parser.parse(colorTestStr2),
|
|
[{text: "hello world", style: {color: "#0xffff33"}}],
|
|
"Happy path two.");
|
|
|
|
var colorTestStr3 = "<color#0xffff33>hello world</xxx>";
|
|
deepEqual(parser.parse(colorTestStr3),
|
|
[{text: "hello world", style: {}}],
|
|
"Missing the = sign.");
|
|
|
|
var colorTestStr4 = "<color=>hello world</xxx>";
|
|
deepEqual(parser.parse(colorTestStr4),
|
|
[{text: "hello world", style: {}}],
|
|
"missing the color value.");
|
|
|
|
var colorTestStr5 = "<c=#0xff4400>hello world</xxx>";
|
|
deepEqual(parser.parse(colorTestStr5),
|
|
[{text: "hello world", style: {}}],
|
|
"tag name is invalid");
|
|
|
|
var colorTestStr6 = "<color = #0xff4400>hello world";
|
|
deepEqual(parser.parse(colorTestStr6),
|
|
[{text: "hello world"}],
|
|
"The close tag is missing.");
|
|
|
|
|
|
});
|
|
|
|
test('Size test', function() {
|
|
var sizeTestStr1 = "<size = 20>hello world</size>";
|
|
deepEqual(parser.parse(sizeTestStr1),
|
|
[{text: "hello world", style: {size: 20}}],
|
|
"Happy path 1.");
|
|
|
|
var sizeTestStr2 = "<size = 20>hello world</xx>";
|
|
deepEqual(parser.parse(sizeTestStr2),
|
|
[{text: "hello world", style: {size: 20}}],
|
|
"Happy path 2.");
|
|
|
|
var sizeTestStr3 = "<size20>hello world</xxx>";
|
|
deepEqual(parser.parse(sizeTestStr3),
|
|
[{text: "hello world", style: {}}],
|
|
"Missing the = sign.");
|
|
|
|
var sizeTestStr4 = "<size=>hello world</xxx>";
|
|
deepEqual(parser.parse(sizeTestStr4),
|
|
[{text: "hello world", style: {}}],
|
|
"missing the color value.");
|
|
|
|
var sizeTestStr5 = "<s=20>hello world</xxx>";
|
|
deepEqual(parser.parse(sizeTestStr5),
|
|
[{text: "hello world", style: {}}],
|
|
"tag name is invalid");
|
|
|
|
var sizeTestStr6 = "<size=20>hello world";
|
|
deepEqual(parser.parse(sizeTestStr6),
|
|
[{text: "hello world"}],
|
|
"The close tag is missing.");
|
|
|
|
|
|
});
|
|
|
|
test('Event test', function() {
|
|
var eventTestString = "<on click=' event1' hoverin='event2 ' hoverout = 'event3'>hello world</on>";
|
|
|
|
deepEqual(parser.parse(eventTestString),
|
|
[{text: "hello world", style: {
|
|
event: {
|
|
click : "event1"
|
|
}}}], "Happy path 1");
|
|
|
|
var eventTestStringFail1 = "<on click=' event1' hoverin'event2 ' hoverout=event3>hello world</on>";
|
|
|
|
deepEqual(parser.parse(eventTestStringFail1),
|
|
[{text: "hello world", style: {
|
|
event: {
|
|
click : "event1",
|
|
}}}], "Fail path 1");
|
|
|
|
var eventTestStringFail2 = "<size=20 click=' event1' hoverin=event2 hoverout:event3>hello world</on>";
|
|
|
|
deepEqual(parser.parse(eventTestStringFail2),
|
|
[{text: "hello world", style: {
|
|
size: 20,
|
|
event: {
|
|
click : "event1",
|
|
}}}], "Fail path 2");
|
|
|
|
var eventTestStringFail3 = "<size=20 click=event1 hoverin='event2' hoverout:event3>hello world</on>";
|
|
|
|
deepEqual(parser.parse(eventTestStringFail3),
|
|
[{text: "hello world", style: {
|
|
size: 20,
|
|
event: {
|
|
}}}], "Fail path 3");
|
|
|
|
|
|
var eventTestString2 = "<color=#0xff0000 click=\"event1\">Super weapon</color>";
|
|
|
|
deepEqual(parser.parse(eventTestString2),
|
|
[{text: "Super weapon", style: {
|
|
color: "#0xff0000",
|
|
event: {
|
|
click : "event1",
|
|
}
|
|
}}], "Color with event");
|
|
|
|
var eventTestString3 = "<size=20 click='event1' hoverin='event2'>hello world</>";
|
|
deepEqual(parser.parse(eventTestString3),
|
|
[{text: "hello world",
|
|
style: {
|
|
size: 20,
|
|
event: {
|
|
click : "event1",
|
|
}
|
|
}}], "Size with event");
|
|
|
|
var eventTestString4 = "<sie=20 click='event1' hoverin='event2'>hello world</>";
|
|
deepEqual(parser.parse(eventTestString4),
|
|
[{text: "hello world",
|
|
style: {}
|
|
}], "Failed path: Size with event");
|
|
|
|
var invalidEventTestString4 = "<size=20 click='event1\">hello world</>";
|
|
deepEqual(parser.parse(invalidEventTestString4),
|
|
[{text: "hello world",
|
|
style: {size: 20,
|
|
event: {}}
|
|
}], "Failed path: event name quote not match.");
|
|
|
|
var invalidEventTestString5 = "<size=20 click=\"event1'>hello world</>";
|
|
deepEqual(parser.parse(invalidEventTestString5),
|
|
[{text: "hello world",
|
|
style: {size: 20,
|
|
event: {}}
|
|
}], "Failed path: event name quote not match.");
|
|
|
|
|
|
});
|
|
|
|
test('Test special symbol escape', function() {
|
|
var testLessThan = "<size=20>hello<world</size>";
|
|
|
|
deepEqual(parser.parse(testLessThan),
|
|
[ {text: "hello<world",
|
|
style: {
|
|
size: 20
|
|
}
|
|
}],
|
|
"The < symbol should be correctly escaped.");
|
|
|
|
var testGreatThan = "<on click='event1'> hello>world</on>";
|
|
deepEqual(parser.parse(testGreatThan),
|
|
[{text: " hello>world",
|
|
style: {
|
|
event: {
|
|
click: 'event1'
|
|
}
|
|
}}],
|
|
"The > symbol should be correctly escaped.");
|
|
|
|
var testAmp = "<color=#0xff00>hello&world</>";
|
|
deepEqual(parser.parse(testAmp),
|
|
[{text: "hello&world",
|
|
style: {
|
|
color: "#0xff00"
|
|
}}],
|
|
"The amp symbol should be correctly escaped.");
|
|
|
|
var testQuot = "<on>hello"world</on>";
|
|
deepEqual(parser.parse(testQuot),
|
|
[{text: "hello\"world",
|
|
style: {}}],
|
|
"The quot symbol should be correctly escaped.");
|
|
|
|
var testApos = "<color=#0xffee>Hi, <size=20>hello'world</s></c>";
|
|
deepEqual(parser.parse(testApos),
|
|
[{text: "Hi, ",
|
|
style: {
|
|
color: "#0xffee"
|
|
}},
|
|
{text: "hello'world",
|
|
style: {
|
|
color: "#0xffee",
|
|
size: 20
|
|
}}],
|
|
"The apos symbol should be correctly escaped.");
|
|
});
|
|
|
|
|
|
test('Integrate test', function() {
|
|
var eventTestString = "hello <b>world</b>, <color=#0xff0000> Ni hao </color>";
|
|
|
|
deepEqual(parser.parse(eventTestString),
|
|
[{text: "hello "}, {text: "world", style: {bold: true}},
|
|
{text: ", "},
|
|
{text: " Ni hao ", style : {color: "#0xff0000"}}], "Happy path 1");
|
|
|
|
var moreComplexString = "<size=20>大小<size=10>不一</size></size>,<color=#0xffeeaa>颜色</c><color=#0xffaaee>不同</c><on click='event1'>可点击</on>";
|
|
deepEqual(parser.parse(moreComplexString),
|
|
[{text: "大小", style: {size: 20}}, {text: "不一", style: {size: 10}}, {text:","},
|
|
{text: "颜色", style: {color: "#0xffeeaa"}}, {text: "不同", style: {color: "#0xffaaee"}},
|
|
{text: "可点击", style: {event: {click: 'event1'}}}], "more complex test");
|
|
|
|
|
|
});
|
|
|
|
test('bold/italic/underline test', function () {
|
|
var stringWithBold = "<b></i><b>hello \n world</b>";
|
|
|
|
deepEqual(parser.parse(stringWithBold),
|
|
[{text: "hello \n world", style: {bold: true}}], "bold test");
|
|
|
|
var stringWithItalic = "<i>hello world</i>";
|
|
|
|
deepEqual(parser.parse(stringWithItalic),
|
|
[{text: "hello world", style: {italic: true}}], "italic test");
|
|
|
|
var stringWithUnderline = "<u>hello world</u>";
|
|
|
|
deepEqual(parser.parse(stringWithUnderline),
|
|
[{text: "hello world", style: {underline: true}}], "underline test");
|
|
});
|
|
|
|
test('test br tag', function () {
|
|
var newlineTest = "<br/>";
|
|
|
|
deepEqual(parser.parse(newlineTest),
|
|
[{text: "", style: {newline: true}},], "newline element test");
|
|
|
|
var newlineTest2 = "hello <b>a< br /></b> world";
|
|
|
|
deepEqual(parser.parse(newlineTest2),
|
|
[{text: "hello "},
|
|
{text: "a", style: {bold: true}},
|
|
{text: "", style: {newline: true}},
|
|
{text: " world"}
|
|
], "newline element test");
|
|
|
|
var newlineTest3 = "< br />";
|
|
|
|
deepEqual(parser.parse(newlineTest3),
|
|
[{text: "", style: {newline: true}},], "newline element test");
|
|
|
|
var newlineTest4 = "<br></br>";
|
|
|
|
deepEqual(parser.parse(newlineTest4),
|
|
[], "newline element test");
|
|
|
|
var newlineTest5 = "hello <b>a<br></></b> world";
|
|
|
|
deepEqual(parser.parse(newlineTest5),
|
|
[{text: "hello "},
|
|
{text: "a", style: {bold: true}},
|
|
{text: " world"}
|
|
], "newline element test");
|
|
|
|
var newlineTest6 = "hello <b>a<br /><br/ ></b> world";
|
|
|
|
deepEqual(parser.parse(newlineTest6),
|
|
[{text: "hello "},
|
|
{text: "a", style: {bold: true}},
|
|
{text: "", style: {newline: true}},
|
|
{text: "", style: {newline: true}},
|
|
{text: " world"}
|
|
], "newline element test");
|
|
|
|
var newlineTest7 = "hello <b>a</b><br /><br/ >world";
|
|
|
|
deepEqual(parser.parse(newlineTest7),
|
|
[{text: "hello "},
|
|
{text: "a", style: {bold: true}},
|
|
{text: "", style: {newline: true}},
|
|
{text: "", style: {newline: true}},
|
|
{text: "world"}
|
|
], "newline element test");
|
|
});
|
|
|
|
test('test image tag', function () {
|
|
var imageTest1 = "<img src='weapon' />";
|
|
|
|
deepEqual(parser.parse(imageTest1),
|
|
[
|
|
{text: "",
|
|
style: {isImage: true, src: "weapon"}}
|
|
], "image element test 1");
|
|
|
|
var imageTest2 = '<img src = "weapon"/>';
|
|
|
|
deepEqual(parser.parse(imageTest2),
|
|
[
|
|
{text: "", style: {isImage: true, src: "weapon"}}
|
|
], "image element test 2");
|
|
|
|
var imageTest3 = "hello, <b>world<img src='nihao' /></>";
|
|
|
|
deepEqual(parser.parse(imageTest3),
|
|
[
|
|
{text: "hello, "},
|
|
{text: "world", style : {bold: true}},
|
|
{text: "", style: {isImage: true, src: "nihao"}}
|
|
], "image element test");
|
|
|
|
var imageTest4 = "hello, <b>world<img src=nihao / ></>";
|
|
deepEqual(parser.parse(imageTest4),
|
|
[
|
|
{text: "hello, "},
|
|
{text: "world", style : {bold: true}},
|
|
], "image element test");
|
|
|
|
var imageTest5 = "hello, <b>world<on click='handler'><img src=nihao / ></on></b>";
|
|
deepEqual(parser.parse(imageTest5),
|
|
[
|
|
{text: "hello, "},
|
|
{text: "world", style : {bold: true}},
|
|
], "image element event test");
|
|
|
|
var imageTest6 = "hello, <b>world<img src='head' click='handler' /></b>";
|
|
deepEqual(parser.parse(imageTest6),
|
|
[
|
|
{text: "hello, "},
|
|
{text: "world", style : {bold: true}},
|
|
{text: "", style: {isImage: true, src: "head",
|
|
event: {click: "handler"}}}
|
|
], "image element event test");
|
|
|
|
|
|
var invalidImageTest1 = "<img src='hello'></img>";
|
|
deepEqual(parser.parse(invalidImageTest1),
|
|
[], "image element invalid test");
|
|
|
|
var invalidImageTest2 = "<img src='world'>";
|
|
deepEqual(parser.parse(invalidImageTest2),
|
|
[], "image element invalid test");
|
|
|
|
var invalidImageTest3 = "<image src='world' />";
|
|
deepEqual(parser.parse(invalidImageTest3),
|
|
[], "image element invalid test");
|
|
|
|
|
|
var nestedImageTest4 = "<b><u><img src='world' click='handler' /></b></u>";
|
|
deepEqual(parser.parse(nestedImageTest4),
|
|
[{text: "", style: {isImage: true, src: 'world',
|
|
event: {click: 'handler'}}}], "image element invalid test");
|
|
});
|
|
|
|
test('test outline tag', function () {
|
|
var outlineTest1 = "<outline color = #0f00ff width=2 >hello</outline>";
|
|
|
|
deepEqual(parser.parse(outlineTest1),
|
|
[
|
|
{text: "hello",
|
|
style: { outline: {
|
|
color: "#0f00ff",
|
|
width: 2
|
|
}}}
|
|
], "outline element test 1");
|
|
|
|
var outlineTest2 = '<outline color= #0f00ff>hello</outline>';
|
|
|
|
deepEqual(parser.parse(outlineTest2),
|
|
[
|
|
{text: "hello", style: {
|
|
outline: {
|
|
color: "#0f00ff",
|
|
width: 1
|
|
}
|
|
}}
|
|
], "outline element test 2");
|
|
|
|
var outlineTest3 = '<outline width = 4>hello</outline>';
|
|
|
|
deepEqual(parser.parse(outlineTest3),
|
|
[
|
|
{text: "hello", style: {
|
|
outline: {
|
|
color: "#ffffff",
|
|
width: 4
|
|
}
|
|
}}
|
|
], "outline element test 3");
|
|
|
|
var outlineTest4 = '<outline >hello</outline>';
|
|
|
|
deepEqual(parser.parse(outlineTest4),
|
|
[
|
|
{text: "hello", style: {
|
|
outline: {
|
|
color: "#ffffff",
|
|
width: 1
|
|
}
|
|
}}
|
|
], "outline element test 4");
|
|
|
|
var outlineTest5 = "<outline click= 'clickme' width =2 color=#0f00ff>hello</outline>";
|
|
|
|
deepEqual(parser.parse(outlineTest5),
|
|
[
|
|
{text: "hello",
|
|
style: {
|
|
outline: {
|
|
color: "#0f00ff",
|
|
width: 2
|
|
},
|
|
event: {
|
|
click: "clickme"
|
|
}
|
|
}}
|
|
], "outline element test 5");
|
|
|
|
var outlineTest6 = "<outline width =2 color=#0f00ff click='clickme'>hello</outline>";
|
|
|
|
deepEqual(parser.parse(outlineTest6),
|
|
[
|
|
{text: "hello",
|
|
style: {
|
|
outline: {
|
|
color: "#0f00ff",
|
|
width: 2
|
|
},
|
|
event: {
|
|
click: "clickme"
|
|
}
|
|
}}
|
|
], "outline element test 6");
|
|
|
|
var outlineTest7 = "<outline width =2 color=#0f00ff><on click='clickme'>hello</on></outline>";
|
|
|
|
deepEqual(parser.parse(outlineTest7),
|
|
[
|
|
{text: "hello",
|
|
style: {
|
|
outline: {
|
|
color: "#0f00ff",
|
|
width: 2
|
|
},
|
|
event: {
|
|
click: "clickme"
|
|
}
|
|
}}
|
|
], "outline element test 7");
|
|
|
|
var outlineTest8 = "<b><outline width =2 color=#0f00ff><on click='clickme'><u>hello</u></on></outline></b>";
|
|
|
|
deepEqual(parser.parse(outlineTest8),
|
|
[
|
|
{text: "hello",
|
|
style: {
|
|
bold: true,
|
|
underline: true,
|
|
outline: {
|
|
color: "#0f00ff",
|
|
width: 2
|
|
},
|
|
event: {
|
|
click: "clickme"
|
|
}
|
|
}}
|
|
], "outline element test 8");
|
|
|
|
var invalidOutlineTest1 = "<outline width=2 color #0f00ff click='clickme'>hello</outline>";
|
|
|
|
deepEqual(parser.parse(invalidOutlineTest1),
|
|
[
|
|
{text: "hello",
|
|
style: {
|
|
outline: {
|
|
color: "#ffffff",
|
|
width: 2
|
|
},
|
|
event: {
|
|
click: "clickme"
|
|
}
|
|
}}
|
|
], "invalid outline element test 1");
|
|
|
|
var invalidOutlineTest2 = "<outline width 2 color #0f00ff click 'clickme'>hello</outline>";
|
|
|
|
deepEqual(parser.parse(invalidOutlineTest2),
|
|
[
|
|
{text: "hello",
|
|
style: {
|
|
outline: {
|
|
color: "#ffffff",
|
|
width: 1
|
|
}
|
|
}}
|
|
], "invalid outline element test 2");
|
|
|
|
var invalidOutlineTest3 = "<outilne width 2 color #0f00ff click 'clickme'>hello</outline>";
|
|
|
|
deepEqual(parser.parse(invalidOutlineTest3),
|
|
[
|
|
{text: "hello",
|
|
style: {}}
|
|
], "invalid outline element test 3");
|
|
|
|
|
|
});
|