Skip to content

Commit

Permalink
Parsing strict again #188 isaacs/sax-js#206
Browse files Browse the repository at this point in the history
  • Loading branch information
oktaal committed Dec 7, 2018
1 parent edb7c55 commit e2950bb
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 18 deletions.
6 changes: 3 additions & 3 deletions web-ui/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion web-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"hammerjs": "^2.0.8",
"jquery": "^3.3.1",
"jquery-ui": "^1.12.1",
"lassy-xpath": "^0.3.8",
"lassy-xpath": "^0.3.9",
"lodash": "^4.17.10",
"ngx-clipboard": "^10.0.0",
"node-sass": "^4.9.2",
Expand Down
24 changes: 13 additions & 11 deletions web-ui/src/app/components/step/xpath-input/xpath-input.component.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';

import { Subject, Subscription } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';

import { StepComponent } from '../step.component';
import { MacroService, ValueEvent, ReconstructorService, ExtractinatorService, PathVariable } from 'lassy-xpath/ng';
Expand Down Expand Up @@ -36,16 +36,18 @@ export class XpathInputComponent extends StepComponent implements OnChanges {
super();

macroService.loadDefault();
this.subscriptions.push(this.valueSubject.pipe(debounceTime(500)).subscribe(value => {
let paths: PathVariable[] = null;
try {
paths = extractinatorService.extract(value);
this.treeXml = reconstructorService.construct(paths, value);
} catch (err) {
// probably some malformed input
console.error(err);
}
}));
this.subscriptions.push(this.valueSubject.pipe(
debounceTime(500),
distinctUntilChanged()).subscribe(value => {
let paths: PathVariable[] = null;
try {
paths = extractinatorService.extract(value);
this.treeXml = reconstructorService.construct(paths, value);
} catch (err) {
// probably some malformed input
console.error(err);
}
}));
}

valid = false;
Expand Down
62 changes: 62 additions & 0 deletions web-ui/src/app/services/xml-parse.service.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import { TestBed, inject, async } from '@angular/core/testing';

import { XmlParseService } from './xml-parse.service';

describe('XmlParseService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
XmlParseService
]
});
});

it('should be created', inject([XmlParseService], (service: XmlParseService) => {
expect(service).toBeTruthy();
}));

it('should parse metadata', async(inject([XmlParseService], async (service: XmlParseService) => {
const parsed = await service.parse(`<metadata>
<meta type="text" name="session" value="306_Busverhaalwithout"/>
<meta type="text" name="charencoding" value="UTF8"/>
<meta type="text" name="media" value="306_Busverhaal, video"/>
<meta type="text" name="transcriber" value="Margriet"/>
<meta type="text" name="speaker" value="CHI"/>
<meta type="text" name="origutt" value="en eind goed &amp;+alt al goed is hij nu gewoon een bus."/>
<meta type="text" name="language" value="nld"/>
<meta type="text" name="corpus" value="change_corpus_later"/>
<meta type="text" name="age" value="10;11."/>
<meta type="int" name="months" value="131"/>
<meta type="text" name="sex" value="male"/>
<meta type="text" name="group" value="Controle"/>
<meta type="text" name="role" value="Target_Child"/>
<meta type="int" name="uttid" value="19"/>
</metadata>`);
expect(parsed.metadata).toBeTruthy();
expect(parsed.metadata.meta).toBeTruthy();
expect(parsed.metadata.meta.length).toBe(14);
expect(parsed.metadata.meta[0].$.name).toBe('session');
expect(parsed.metadata.meta[4].$.value).toBe('CHI');
})));

it('should parse attribute nodes', async(inject([XmlParseService], async (service: XmlParseService) => {
const parsed = await service.parse(`<node cat="top"><node varName="$node" cat="">
<node varName="$node1" rel="su" pt="vnw">
</node>
<node varName="$node2" rel="hd" pt="ww">
</node>
<node varName="$node3" rel="predc" cat="np">
<node varName="$node4" rel="det" pt="lid">
</node>
<node varName="$node5" rel="hd" pt="n">
</node>
</node>
</node></node>`);
expect(parsed.node).toBeTruthy();
expect(parsed.node.node).toBeTruthy();
expect(parsed.node.node.length).toBe(1);
expect(parsed.node.node[0].$).toEqual({ varName: '$node', cat: '' });
expect(parsed.node.node[0].node.length).toBe(3);
expect(parsed.node.node[0].node[2].$).toEqual({ varName: '$node3', rel: 'predc', cat: 'np' });
})));
});
4 changes: 1 addition & 3 deletions web-ui/src/app/services/xml-parse.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@ import { Parser } from 'xml2js';

@Injectable()
export class XmlParseService {
private parser = new Parser({
strict: false
});
private parser = new Parser();

parse(xml: string): Promise<any> {
return new Promise<any>((resolve, reject) => {
Expand Down

0 comments on commit e2950bb

Please sign in to comment.