• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

NaturalIntelligence / fast-xml-parser / 4156981534

pending completion
4156981534

push

github

amit kumar gupta
Update package detail

692 of 741 branches covered (93.39%)

3 of 3 new or added lines in 2 files covered. (100.0%)

2376 of 2418 relevant lines covered (98.26%)

196233.44 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.77
/src/xmlparser/DocTypeReader.js
1
//TODO: handle comments
2
function readDocType(xmlData, i){
3
    
4
    const entities = {};
10✔
5
    if( xmlData[i + 3] === 'O' &&
10!
6
         xmlData[i + 4] === 'C' &&
7
         xmlData[i + 5] === 'T' &&
8
         xmlData[i + 6] === 'Y' &&
9
         xmlData[i + 7] === 'P' &&
10
         xmlData[i + 8] === 'E')
11
    {    
12
        i = i+9;
10✔
13
        let angleBracketsCount = 1;
10✔
14
        let hasBody = false, entity = false, comment = false;
10✔
15
        let exp = "";
10✔
16
        for(;i<xmlData.length;i++){
10✔
17
            if (xmlData[i] === '<' && !comment) {
914✔
18
                if( hasBody && 
19✔
19
                     xmlData[i+1] === '!' &&
20
                     xmlData[i+2] === 'E' &&
21
                     xmlData[i+3] === 'N' &&
22
                     xmlData[i+4] === 'T' &&
23
                     xmlData[i+5] === 'I' &&
24
                     xmlData[i+6] === 'T' &&
25
                     xmlData[i+7] === 'Y'
26
                ){
27
                    i += 7;
9✔
28
                    entity = true;
9✔
29
                }else if( hasBody && 
10✔
30
                    xmlData[i+1] === '!' &&
31
                     xmlData[i+2] === 'E' &&
32
                     xmlData[i+3] === 'L' &&
33
                     xmlData[i+4] === 'E' &&
34
                     xmlData[i+5] === 'M' &&
35
                     xmlData[i+6] === 'E' &&
36
                     xmlData[i+7] === 'N' &&
37
                     xmlData[i+8] === 'T'
38
                ){
39
                    //Not supported
40
                    i += 8;
3✔
41
                }else if( hasBody && 
7✔
42
                    xmlData[i+1] === '!' &&
43
                    xmlData[i+2] === 'A' &&
44
                    xmlData[i+3] === 'T' &&
45
                    xmlData[i+4] === 'T' &&
46
                    xmlData[i+5] === 'L' &&
47
                    xmlData[i+6] === 'I' &&
48
                    xmlData[i+7] === 'S' &&
49
                    xmlData[i+8] === 'T'
50
                ){
51
                    //Not supported
52
                    i += 8;
1✔
53
                }else if( hasBody && 
6✔
54
                    xmlData[i+1] === '!' &&
55
                    xmlData[i+2] === 'N' &&
56
                    xmlData[i+3] === 'O' &&
57
                    xmlData[i+4] === 'T' &&
58
                    xmlData[i+5] === 'A' &&
59
                    xmlData[i+6] === 'T' &&
60
                    xmlData[i+7] === 'I' &&
61
                    xmlData[i+8] === 'O' &&
62
                    xmlData[i+9] === 'N'
63
                ){
64
                    //Not supported
65
                    i += 9;
1✔
66
                }else if( //comment
5!
67
                    xmlData[i+1] === '!' &&
15✔
68
                    xmlData[i+2] === '-' &&
69
                    xmlData[i+3] === '-'
70
                ){
71
                    comment = true;
5✔
72
                }else{
73
                    throw new Error("Invalid DOCTYPE");
×
74
                }
75
                angleBracketsCount++;
19✔
76
                exp = "";
19✔
77
            } else if (xmlData[i] === '>') {
895✔
78
                if(comment){
29✔
79
                    if( xmlData[i - 1] === "-" && xmlData[i - 2] === "-"){
6✔
80
                        comment = false;
5✔
81
                        angleBracketsCount--;
5✔
82
                    }
83
                }else{
84
                    if(entity) {
23✔
85
                        parseEntityExp(exp, entities);
9✔
86
                        entity = false;
9✔
87
                    }
88
                    angleBracketsCount--;
23✔
89
                }
90
                if (angleBracketsCount === 0) {
29✔
91
                  break;
9✔
92
                }
93
            }else if( xmlData[i] === '['){
866✔
94
                hasBody = true;
7✔
95
            }else{
96
                exp += xmlData[i];
859✔
97
            }
98
        }
99
        if(angleBracketsCount !== 0){
10✔
100
            throw new Error(`Unclosed DOCTYPE`);
1✔
101
        }
102
    }else{
103
        throw new Error(`Invalid Tag instead of DOCTYPE`);
×
104
    }
105
    return {entities, i};
9✔
106
}
107

108
const entityRegex = RegExp("^\\s([a-zA-z0-0]+)[ \t](['\"])([^&]+)\\2");
1✔
109
function parseEntityExp(exp, entities){
110
    const match = entityRegex.exec(exp);
9✔
111
    if(match){
9✔
112
        entities[ match[1] ] = {
8✔
113
            regx : RegExp( `&${match[1]};`,"g"),
114
            val: match[3]
115
        };
116
    }
117
}
118
module.exports = readDocType;
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc