| // 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'); |
| }); |
| }); |