struffer
Version:
Struct + Buffer = Struffer
319 lines (284 loc) • 8.03 kB
text/typescript
import { Test, TestCase, TestFixture } from 'alsatian';
import { AdvancedStruffer } from '../src/index';
import {
FactoryTestsBase,
ObjectAPITestsBase,
MapAPITestsBase,
CommonAPITestCase,
BatchAPITestsBase,
MiscellaneousTestsBase,
} from './common';
('AdvancedStruffer factory tests')
export class FactoryTests extends FactoryTestsBase {
protected get factory() {
return AdvancedStruffer;
}
protected get defaultSize() {
return 2;
}
({
byteLength: 1,
bitLength: 3,
types: ['i2', 'i1be'],
})
({
byteLength: 3,
bitLength: 17,
types: ['u1', 'i3', 'u13'],
})
({
byteLength: 1,
bitLength: 8,
types: ['i5', 'unsigned int_2 BE', 'uint1'],
})
('Basic generation')
basicGeneration(opts: any) {
super.basicGeneration(opts);
}
('Foobar3000', undefined, ['byte', 'char', 'short', 'int', 'signed short int'])
('MisterTesty', 24, ['uint2be', 'u3', 'i_4be'])
('UnaCosa', 1, ['long int', 'long long uint', 'uint', 'i32', 'u12'])
('TypeTesting', undefined, ['signed long uint', 'short i', 'signed long u'])
('AdvancedStruffer instantiation')
instantiation(name: string, offset: number | null = null, types: string[]) {
super.instantiation(name, offset, types);
}
}
('AdvancedStruffer Object API tests')
export class ObjectAPITests extends ObjectAPITestsBase {
protected get factory() {
return AdvancedStruffer;
}
protected get defaultSize() {
return 2;
}
/*
* some data bytes are separated so we know what bits correspond to who.
* the third byte and part of the fourth byte belong to `uint13`.
* part of the fourth byte, the fifth byte, the sixth byte and part of the
* seventh byte belong to `int`
*/
// tslint:disable-next-line:max-line-length
([4, parseInt('110' + '111' + '11', 2), 102, parseInt('00011' + '111', 2), 255, 255, 252, 24], [
['u8', 4],
['i3', -2],
['uint_3be', 7],
['int_2 BE', -1],
['uint13', 3267],
['int', -125],
])
('Object API member retrieval')
retrieval(bufferData: number[], stuff: [string, number][]) {
super.retrieval(bufferData, stuff);
}
([
['u8', 4],
['i3', -2],
['uint_3be', 7],
['int_2 BE', -1],
['uint13', 3267],
['int', -125],
])
('Object API member assignment')
assignment(stuff: [string, number][]) {
super.assignment(stuff);
}
('Object API member presence')
presence(...names: string[]) {
super.presence(...names);
}
('Object API member "deletion"')
deletion(...names: string[]) {
super.deletion(...names);
}
('Object API member enumeration')
enumeration(...names: string[]) {
super.enumeration(...names);
}
('Object API member property description')
propertyDescription(...names: string[]) {
super.propertyDescription(...names);
}
}
('AdvancedStruffer Map API tests')
export class MapAPITests extends MapAPITestsBase {
protected get factory() {
return AdvancedStruffer;
}
protected get defaultSize() {
return 2;
}
/*
* some data bytes are separated so we know what bits correspond to who.
* the third byte and part of the fourth byte belong to `uint13`.
* part of the fourth byte, the fifth byte, the sixth byte and part of the
* seventh byte belong to `int`
*/
// tslint:disable-next-line:max-line-length
([4, parseInt('110' + '111' + '11', 2), 102, parseInt('00011' + '111', 2), 255, 255, 252, 24], [
['u8', 4],
['i3', -2],
['uint_3be', 7],
['int_2 BE', -1],
['uint13', 3267],
['int', -125],
])
('Map API member retrieval')
retrieval(bufferData: number[], stuff: [string, number][]) {
super.retrieval(bufferData, stuff);
}
([
['u8', 4],
['i3', -2],
['uint_3be', 7],
['int_2 BE', -1],
['uint13', 3267],
['int', -125],
])
('Map API member assignment')
assignment(stuff: [string, number][]) {
super.assignment(stuff);
}
('Map API member presence')
presence(...names: string[]) {
super.presence(...names);
}
('Map API member "deletion"')
deletion(...names: string[]) {
super.deletion(...names);
}
('Map API member enumeration')
enumeration(...names: string[]) {
super.enumeration(...names);
}
('Map API member clearance')
clearance(...names: string[]) {
super.clearance(...names);
}
(undefined, 'foobar', 'bar', 'foo', 'something', 'UTF-8-Up-Next...', '👍')
({ me: true }, 'foobar', 'bar', 'foo', 'something', 'UTF-8-Up-Next...', '👍')
('Map API member iteration')
iteration(thisArg: any = undefined, ...names: string[]) {
super.iteration(thisArg, ...names);
}
('Map API member value enumeration')
valueEnumeration(...names: string[]) {
super.valueEnumeration(...names);
}
('Map API member entry enumeration')
entryEnumeration(...names: string[]) {
super.entryEnumeration(...names);
}
('Map API member automatic iteration')
automaticIteration(...names: string[]) {
super.automaticIteration(...names);
}
}
('AdvancedStruffer Batch API tests')
export class BatchAPITests extends BatchAPITestsBase {
protected get factory() {
return AdvancedStruffer;
}
protected get defaultSize() {
return 2;
}
// tslint:disable-next-line:max-line-length
([4, parseInt('110' + '111' + '11', 2), 102, parseInt('00011' + '111', 2), 255, 255, 252, 24], [
['u8', 4],
['i3', -2],
['uint_3be', 7],
['int_2 BE', -1],
['uint13', 3267],
['int', -125],
])
('Batch API member retrieval')
retrieval(bufferData: number[], stuff: [string, number][]) {
super.retrieval(bufferData, stuff);
}
([
['u8', 4],
['i3', -2],
['uint_3be', 7],
['int_2 BE', -1],
['uint13', 3267],
['int', -125],
])
('Batch API member assignment')
assignment(stuff: [string, number][]) {
super.assignment(stuff);
}
('Batch API member presence')
presence(...names: string[]) {
super.presence(...names);
}
('Batch API member deletion')
deletion(...names: string[]) {
super.deletion(...names);
}
}
export class MiscellaneousTests extends MiscellaneousTestsBase {
protected get factory() {
return AdvancedStruffer;
}
protected get defaultSize() {
return 2;
}
('Member bit enumeration')
bitEnumeration(...names: string[]) {
super.bitEnumeration(...names);
}
('Member bit entry enumeration')
bitEntryEnumeration(...names: string[]) {
super.bitEntryEnumeration(...names);
}
('Member bit retrieval')
getBits() {
super.getBits();
}
('Member bit assignment')
setBits() {
super.setBits();
}
('FooStruff', [
['u23', 'foo', 352],
['i3', 'bar', -2],
['unsigned byte BE', 'something', 255],
])
('Accurate toString representation')
toString(name: string, members: [string, string, number][]) {
super.toString(name, members);
}
('FooStruff', [
['u23', 'foo', 352],
['i3', 'bar', -2],
['unsigned byte BE', 'something', 255],
])
('Accurate coercion')
coercion(name: string, members: [string, string, number][]) {
super.coercion(name, members);
}
('FooStruff', [
['u23', 'foo', 352],
['i3', 'bar', -2],
['unsigned byte BE', 'something', 255],
])
('Accurate util.inspect representation')
inspection(name: string, members: [string, string, number][]) {
super.inspection(name, members);
}
}