blob: 35e575be3955631057d9b547bbc0ec7ae4671b60 [file] [edit]
// Copyright 2015 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview Jasmine test file for pdml_document.js.
*/
describe('PdmlDocument', function() {
it('should gracefully handle empty input', function() {
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.read()).toBe(false);
});
it('should extend from pcap.XmlDocument', function() {
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument instanceof pcap.PdmlDocument).toBe(true);
expect(pdmlDocument instanceof pcap.XmlDocument).toBe(true);
});
it('should return false for invalid XML', function() {
var xmlString = '>this<is><invalid><';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
expect(pdmlDocument.read(xml)).toBe(false);
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
});
it('should return false for missing packets', function() {
var xmlString = '<?xml version="1.0"?>';
xmlString += '<pdml>';
xmlString += '</pdml>';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
expect(pdmlDocument.read(xml)).toBe(false);
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
});
it('should return false for missing protos', function() {
var xmlString = '<?xml version="1.0"?>';
xmlString += '<pdml>';
xmlString += '<packet>';
xmlString += '</packet>';
xmlString += '</pdml>';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
expect(pdmlDocument.read(xml)).toBe(false);
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
});
it('should return false for missing fields', function() {
var xmlString = '<?xml version="1.0"?>';
xmlString += '<pdml>';
xmlString += '<packet>';
xmlString += '<proto name="geninfo" showname="General information">';
xmlString += '</proto>';
xmlString += '</packet>';
xmlString += '</pdml>';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
expect(pdmlDocument.read(xml)).toBe(false);
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(0);
});
it('should successfully read and return true for valid PDML', function() {
var xmlString = '<?xml version="1.0"?>';
xmlString += '<pdml>';
xmlString += '<packet>';
xmlString += '<proto name="a">';
xmlString += '<field name="a" show="b" showname="c"/>';
xmlString += '</proto>';
xmlString += '</packet>';
xmlString += '</pdml>';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.read(xml)).toBe(true);
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(1);
expect(pdmlDocument.packets_[0]).toBeDefined();
expect(pdmlDocument.packets_[0].protos_).toBeDefined();
expect(pdmlDocument.packets_[0].protos_.length).toBe(1);
expect(pdmlDocument.packets_[0].protos_[0].attributes_).toBeDefined();
expect(pdmlDocument.packets_[0].protos_[0].fields_).toBeDefined();
expect(pdmlDocument.packets_[0].protos_[0].attributes_['name']).toBe('a');
expect(pdmlDocument.packets_[0].protos_[0].fields_.length).toBe(1);
});
it('should sucessfully handle multiple protos', function() {
var xmlString = '<?xml version="1.0"?>';
xmlString += '<pdml>';
xmlString += '<packet>';
xmlString += '<proto name="a" showname="b">';
xmlString += '<field name="c" show="d" showname="e"/>';
xmlString += '</proto>';
xmlString += '<proto name="f" showname="g">';
xmlString += '<field name="h" showname="i" show="j"/>';
xmlString += '</proto>';
xmlString += '</packet>';
xmlString += '</pdml>';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.read(xml)).toBe(true);
expect(pdmlDocument.packets_).toBeDefined();
expect(pdmlDocument.packets_.length).toBe(1);
expect(pdmlDocument.packets_[0]).toBeDefined();
expect(pdmlDocument.packets_[0].protos_).toBeDefined();
expect(pdmlDocument.packets_[0].protos_.length).toBe(2);
});
it('should sucessfully handle nested fields', function() {
var xmlString = '<?xml version="1.0"?>';
xmlString += '<pdml>';
xmlString += '<packet>';
xmlString += '<proto name="a" showname="b">';
xmlString += '<field name="c" showname="d" show="e">';
xmlString += '<field name="f" showname="g" show="h"/>';
xmlString += '</field>';
xmlString += '</proto>';
xmlString += '</packet>';
xmlString += '</pdml>';
var parser = new DOMParser();
var xml = parser.parseFromString(xmlString, 'application/xml');
var pdmlDocument = new pcap.PdmlDocument();
expect(pdmlDocument.read(xml)).toBe(true);
expect(pdmlDocument.packets_.length).toBe(1);
expect(pdmlDocument.packets_.length).toBe(1);
expect(pdmlDocument.packets_[0]).toBeDefined();
expect(pdmlDocument.packets_[0].protos_).toBeDefined();
expect(pdmlDocument.packets_[0].protos_[0]).toBeDefined();
expect(pdmlDocument.packets_[0].protos_[0].fields_).toBeDefined();
expect(pdmlDocument.packets_[0].protos_[0].fields_.length).toBe(1);
expect(pdmlDocument.packets_[0].protos_[0].fields_[0]).toBeDefined();
var field = pdmlDocument.packets_[0].protos_[0].fields_[0];
expect(field.attributes_).toBeDefined();
expect(field.attributes_['name']).toBe('c');
expect(field.fields_).toBeDefined();
expect(field.fields_.length).toBe(1);
expect(field.fields_[0]).toBeDefined();
expect(field.fields_[0].attributes_['name']).toBe('f');
});
});