fix xml tokenizer tests
This commit is contained in:
parent
1209377c8f
commit
98f3cf04df
2 changed files with 296 additions and 84 deletions
|
|
@ -45,46 +45,146 @@ define(function(require, exports, module) {
|
|||
var HtmlMode = require("./html").Mode;
|
||||
var assert = require("../test/assertions");
|
||||
|
||||
var testData = {
|
||||
"test: tokenize embedded script" : [{
|
||||
text: "<script a='a'>var</script>'123'",
|
||||
state: ["start", "start"],
|
||||
tokens: [{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
}, {
|
||||
type: "meta.tag.tag-name.script",
|
||||
value: "script"
|
||||
}, {
|
||||
type: "text",
|
||||
value: " "
|
||||
}, {
|
||||
type: "entity.other.attribute-name",
|
||||
value: "a"
|
||||
}, {
|
||||
type: "keyword.operator",
|
||||
value: "="
|
||||
}, {
|
||||
type: "string",
|
||||
value: "'a'"
|
||||
}, {
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
}, {
|
||||
type: "storage.type",
|
||||
value: "var"
|
||||
}, {
|
||||
type: "meta.tag",
|
||||
value: "</"
|
||||
}, {
|
||||
type: "meta.tag.tag-name.script",
|
||||
value: "script"
|
||||
}, {
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
}, {
|
||||
type: "text",
|
||||
value: "'123'"
|
||||
}]
|
||||
}],
|
||||
|
||||
"test: tokenize multiline attribute value with double quotes": [{
|
||||
text: "<a href=\"abc",
|
||||
state: [ "start", "tag_qqstring"],
|
||||
tokens: [{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
}, {
|
||||
type: "meta.tag.tag-name.anchor",
|
||||
value: "a"
|
||||
}, {
|
||||
type: "text",
|
||||
value: " "
|
||||
}, {
|
||||
type: "entity.other.attribute-name",
|
||||
value: "href"
|
||||
}, {
|
||||
type: "keyword.operator",
|
||||
value: "="
|
||||
}, {
|
||||
type: "string",
|
||||
value: "\"abc"
|
||||
}
|
||||
]
|
||||
}, {
|
||||
text: "def\">",
|
||||
state: [ "tag_qqstring", "start" ],
|
||||
tokens: [ {
|
||||
type: "string",
|
||||
value: "def\""
|
||||
}, {
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
}
|
||||
]
|
||||
}],
|
||||
|
||||
"test: tokenize multiline attribute value with single quotes": [{
|
||||
text: "<a href='abc",
|
||||
state: ["start", "tag_qstring"],
|
||||
tokens: [{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
}, {
|
||||
type: "meta.tag.tag-name.anchor",
|
||||
value: "a"
|
||||
}, {
|
||||
type: "text",
|
||||
value: " "
|
||||
}, {
|
||||
type: "entity.other.attribute-name",
|
||||
value: "href"
|
||||
}, {
|
||||
type: "keyword.operator",
|
||||
value: "="
|
||||
}, {
|
||||
type: "string",
|
||||
value: "'abc"
|
||||
}
|
||||
]
|
||||
}, {
|
||||
text: "def\"'>",
|
||||
state: [ "tag_qstring", "start" ],
|
||||
tokens: [ {
|
||||
type: "string",
|
||||
value: "def\"'"
|
||||
}, {
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
}
|
||||
]
|
||||
}]
|
||||
};
|
||||
|
||||
function generateTest(exampleData) {
|
||||
return function testTokenizer() {
|
||||
for (var i = 0; i < exampleData.length; i++) {
|
||||
var s = exampleData[i];
|
||||
var lineTokens = tokenizer.getLineTokens(s.text, s.state[0]);
|
||||
|
||||
assert.equal(
|
||||
JSON.stringify(lineTokens, null, 4),
|
||||
JSON.stringify({tokens:s.tokens, state: s.state[1]}, null, 4)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var tokenizer;
|
||||
module.exports = {
|
||||
setUp : function() {
|
||||
this.tokenizer = new HtmlMode().getTokenizer();
|
||||
},
|
||||
|
||||
"test: tokenize embedded script" : function() {
|
||||
var line = "<script a='a'>var</script>'123'";
|
||||
var tokens = this.tokenizer.getLineTokens(line, "start").tokens;
|
||||
|
||||
assert.equal(12, tokens.length);
|
||||
assert.equal("meta.tag", tokens[0].type);
|
||||
assert.equal("meta.tag.script", tokens[1].type);
|
||||
assert.equal("text", tokens[2].type);
|
||||
assert.equal("entity.other.attribute-name", tokens[3].type);
|
||||
assert.equal("keyword.operator", tokens[4].type);
|
||||
assert.equal("string", tokens[5].type);
|
||||
assert.equal("meta.tag", tokens[6].type);
|
||||
assert.equal("storage.type", tokens[7].type);
|
||||
assert.equal("meta.tag", tokens[8].type);
|
||||
assert.equal("meta.tag.script", tokens[9].type);
|
||||
assert.equal("meta.tag", tokens[10].type);
|
||||
assert.equal("text", tokens[11].type);
|
||||
},
|
||||
|
||||
"test: tokenize multiline attribute value with double quotes": function() {
|
||||
var line1 = this.tokenizer.getLineTokens('<a href="abc', "start");
|
||||
var t1 = line1.tokens;
|
||||
var t2 = this.tokenizer.getLineTokens('def">', line1.state).tokens;
|
||||
assert.equal(t1[t1.length-1].type, "string");
|
||||
assert.equal(t2[0].type, "string");
|
||||
},
|
||||
|
||||
"test: tokenize multiline attribute value with single quotes": function() {
|
||||
var line1 = this.tokenizer.getLineTokens("<a href='abc", "start");
|
||||
var t1 = line1.tokens;
|
||||
var t2 = this.tokenizer.getLineTokens('def\'>', line1.state).tokens;
|
||||
assert.equal(t1[t1.length-1].type, "string");
|
||||
assert.equal(t2[0].type, "string");
|
||||
tokenizer = new HtmlMode().getTokenizer();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
for (var i in testData) {
|
||||
module.exports[i] = generateTest(testData[i])
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -45,57 +45,169 @@ define(function(require, exports, module) {
|
|||
var XmlMode = require("./xml").Mode;
|
||||
var assert = require("../test/assertions");
|
||||
|
||||
module.exports = {
|
||||
|
||||
name: "XML Tokenizer",
|
||||
|
||||
setUp : function() {
|
||||
this.tokenizer = new XmlMode().getTokenizer();
|
||||
},
|
||||
var testData = {
|
||||
"test: tokenize1" : [{
|
||||
text: "<Juhu>//Juhu Kinners</Kinners>",
|
||||
state: ["start", "start"],
|
||||
tokens: [
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
},
|
||||
{
|
||||
type: "meta.tag.tag-name",
|
||||
value: "Juhu"
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
},
|
||||
{
|
||||
type: "text",
|
||||
value: "//Juhu Kinners"
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: "</"
|
||||
},
|
||||
{
|
||||
type: "meta.tag.tag-name",
|
||||
value: "Kinners"
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
}
|
||||
]
|
||||
}],
|
||||
|
||||
"test: tokenize1" : function() {
|
||||
var line = "<Juhu>//Juhu Kinners</Kinners>";
|
||||
var tokens = this.tokenizer.getLineTokens(line, "start").tokens;
|
||||
"test: two tags in the same lines should be in separate tokens": [{
|
||||
text: "<Juhu><Kinners>",
|
||||
state: [ "start", "start"],
|
||||
tokens: [
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
},
|
||||
{
|
||||
type: "meta.tag.tag-name",
|
||||
value: "Juhu"
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
},
|
||||
{
|
||||
type: "meta.tag.tag-name",
|
||||
value: "Kinners"
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: ">"
|
||||
}
|
||||
]
|
||||
}],
|
||||
|
||||
assert.equal(3, tokens.length);
|
||||
assert.equal("meta.tag", tokens[0].type);
|
||||
assert.equal("text", tokens[1].type);
|
||||
assert.equal("meta.tag", tokens[2].type);
|
||||
},
|
||||
|
||||
"test: two tags in the same lines should be in separate tokens" : function() {
|
||||
var line = "<Juhu><Kinners>";
|
||||
var tokens = this.tokenizer.getLineTokens(line, "start").tokens;
|
||||
|
||||
assert.equal(2, tokens.length);
|
||||
assert.equal("meta.tag", tokens[0].type);
|
||||
assert.equal("meta.tag", tokens[1].type);
|
||||
|
||||
assert.equal("<Juhu>", tokens[0].value);
|
||||
assert.equal("<Kinners>", tokens[1].value);
|
||||
},
|
||||
|
||||
"test: multiline attributes": function() {
|
||||
var multiLine = ['<copy set="{', '}" undo="{', '}"/>'];
|
||||
|
||||
var state = "start";
|
||||
var multiLineTokens = multiLine.map(function(line) {
|
||||
var tokens = this.tokenizer.getLineTokens(line, state);
|
||||
state = tokens.state;
|
||||
return tokens.tokens;
|
||||
}, this);
|
||||
|
||||
assert.equal(multiLineTokens[0].length, 5);
|
||||
assert.equal(multiLineTokens[1].length, 5);
|
||||
assert.equal(multiLineTokens[2].length, 2);
|
||||
|
||||
assert.equal(multiLineTokens[0][4].type, "string");
|
||||
assert.equal(multiLineTokens[1][0].type, "string");
|
||||
assert.equal(multiLineTokens[1][4].type, "string");
|
||||
assert.equal(multiLineTokens[2][0].type, "string");
|
||||
}
|
||||
"test: multiline attributes": [{
|
||||
text: "<copy set=\"{",
|
||||
state: ["start", "tag_qqstring"],
|
||||
tokens: [
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: "<"
|
||||
},
|
||||
{
|
||||
type: "meta.tag.tag-name",
|
||||
value: "copy"
|
||||
},
|
||||
{
|
||||
type: "text",
|
||||
value: " "
|
||||
},
|
||||
{
|
||||
type: "entity.other.attribute-name",
|
||||
value: "set"
|
||||
},
|
||||
{
|
||||
type: "keyword.operator",
|
||||
value: "="
|
||||
},
|
||||
{
|
||||
type: "string",
|
||||
value: "\"{"
|
||||
}
|
||||
]
|
||||
}, {
|
||||
text: "}\" undo=\"{",
|
||||
state: [ "tag_qqstring", "tag_qqstring"],
|
||||
tokens: [
|
||||
{
|
||||
type: "string",
|
||||
value: "}\""
|
||||
},
|
||||
{
|
||||
type: "text",
|
||||
value: " "
|
||||
},
|
||||
{
|
||||
type: "entity.other.attribute-name",
|
||||
value: "undo"
|
||||
},
|
||||
{
|
||||
type: "keyword.operator",
|
||||
value: "="
|
||||
},
|
||||
{
|
||||
type: "string",
|
||||
value: "\"{"
|
||||
}
|
||||
]
|
||||
}, {
|
||||
text: "}\"/>",
|
||||
state: ["tag_qqstring", "start"],
|
||||
tokens: [
|
||||
{
|
||||
type: "string",
|
||||
value: "}\""
|
||||
},
|
||||
{
|
||||
type: "meta.tag",
|
||||
value: "/>"
|
||||
}
|
||||
]
|
||||
}]
|
||||
};
|
||||
|
||||
function generateTest(exampleData) {
|
||||
return function testTokenizer() {
|
||||
for (var i = 0; i < exampleData.length; i++) {
|
||||
var s = exampleData[i];
|
||||
var lineTokens = tokenizer.getLineTokens(s.text, s.state[0]);
|
||||
|
||||
assert.equal(
|
||||
JSON.stringify(lineTokens, null, 4),
|
||||
JSON.stringify({tokens:s.tokens, state: s.state[1]}, null, 4)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var tokenizer;
|
||||
module.exports = {
|
||||
name: "XML Tokenizer",
|
||||
|
||||
setUp : function() {
|
||||
tokenizer = new XmlMode().getTokenizer();
|
||||
}
|
||||
}
|
||||
|
||||
for (var i in testData) {
|
||||
module.exports[i] = generateTest(testData[i])
|
||||
}
|
||||
});
|
||||
|
||||
if (typeof module !== "undefined" && module === require.main) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue