cesium/Specs/ShaderBuilderTester.js

239 lines
5.9 KiB
JavaScript

function ShaderBuilderTester() {}
function expectHasLine(linesArray, line) {
expect(linesArray.indexOf(line)).not.toBe(-1);
}
// In practice, most of the dynamically generated GLSL code is generated
// in an arbitrary order, so check only that they have the same set of lines.
function expectEqualUnordered(array1, array2) {
// slice in case other tests do expect lines in a particular order.
expect(array1.slice().sort()).toEqual(array2.slice().sort());
}
ShaderBuilderTester.expectHasAttributes = function (
shaderBuilder,
positionAttributeLine,
expectedAttributeLines,
) {
expect(shaderBuilder._positionAttributeLine).toEqual(positionAttributeLine);
expectEqualUnordered(shaderBuilder._attributeLines, expectedAttributeLines);
};
ShaderBuilderTester.expectHasVertexDefines = function (
shaderBuilder,
expectedDefines,
) {
expectEqualUnordered(
shaderBuilder._vertexShaderParts.defineLines,
expectedDefines,
);
};
ShaderBuilderTester.expectHasFragmentDefines = function (
shaderBuilder,
expectedDefines,
) {
expectEqualUnordered(
shaderBuilder._fragmentShaderParts.defineLines,
expectedDefines,
);
};
ShaderBuilderTester.expectHasVertexUniforms = function (
shaderBuilder,
expectedUniforms,
) {
expectEqualUnordered(
shaderBuilder._vertexShaderParts.uniformLines,
expectedUniforms,
);
};
ShaderBuilderTester.expectHasFragmentUniforms = function (
shaderBuilder,
expectedUniforms,
) {
expectEqualUnordered(
shaderBuilder._fragmentShaderParts.uniformLines,
expectedUniforms,
);
};
ShaderBuilderTester.expectHasVaryings = function (
shaderBuilder,
expectedVaryings,
) {
expect(shaderBuilder._vertexShaderParts.varyingLines).toEqual(
jasmine.arrayWithExactContents(
expectedVaryings.map((varying) => jasmine.stringContaining(varying)),
),
);
expect(shaderBuilder._fragmentShaderParts.varyingLines).toEqual(
jasmine.arrayWithExactContents(
expectedVaryings.map((varying) => jasmine.stringContaining(varying)),
),
);
};
ShaderBuilderTester.expectHasVertexStructIds = function (
shaderBuilder,
expectedStructIds,
) {
expect(shaderBuilder._vertexShaderParts.structIds).toEqual(expectedStructIds);
};
ShaderBuilderTester.expectHasVertexStruct = function (
shaderBuilder,
structId,
structName,
expectedFields,
) {
expectHasLine(shaderBuilder._vertexShaderParts.structIds, structId);
const struct = shaderBuilder._structs[structId];
expect(struct.name).toEqual(structName);
expectEqualUnordered(struct.fields, expectedFields);
};
ShaderBuilderTester.expectHasFragmentStructIds = function (
shaderBuilder,
expectedStructIds,
) {
expect(shaderBuilder._fragmentShaderParts.structIds).toEqual(
expectedStructIds,
);
};
ShaderBuilderTester.expectHasFragmentStruct = function (
shaderBuilder,
structId,
structName,
expectedFields,
) {
expectHasLine(shaderBuilder._fragmentShaderParts.structIds, structId);
const struct = shaderBuilder._structs[structId];
expect(struct.name).toEqual(structName);
expectEqualUnordered(struct.fields, expectedFields);
};
ShaderBuilderTester.expectHasVertexFunctionIds = function (
shaderBuilder,
expectedFunctionIds,
) {
expect(shaderBuilder._vertexShaderParts.functionIds).toEqual(
expectedFunctionIds,
);
};
ShaderBuilderTester.expectHasVertexFunction = function (
shaderBuilder,
functionId,
signature,
bodyLines,
) {
expectHasLine(shaderBuilder._vertexShaderParts.functionIds, functionId);
const func = shaderBuilder._functions[functionId];
expect(func.signature).toEqual(signature);
expect(func.body).toEqual(bodyLines);
};
ShaderBuilderTester.expectHasVertexFunctionUnordered = function (
shaderBuilder,
functionId,
signature,
bodyLines,
) {
expectHasLine(shaderBuilder._vertexShaderParts.functionIds, functionId);
const func = shaderBuilder._functions[functionId];
expect(func.signature).toEqual(signature);
expectEqualUnordered(func.body, bodyLines);
};
ShaderBuilderTester.expectHasFragmentFunctionIds = function (
shaderBuilder,
expectedFunctionIds,
) {
expect(shaderBuilder._fragmentShaderParts.functionIds).toEqual(
expectedFunctionIds,
);
};
ShaderBuilderTester.expectHasFragmentFunction = function (
shaderBuilder,
functionId,
signature,
bodyLines,
) {
expectHasLine(shaderBuilder._fragmentShaderParts.functionIds, functionId);
const func = shaderBuilder._functions[functionId];
expect(func.signature).toEqual(signature);
expect(func.body).toEqual(bodyLines);
};
ShaderBuilderTester.expectHasFragmentFunctionUnordered = function (
shaderBuilder,
functionId,
signature,
bodyLines,
) {
expectHasLine(shaderBuilder._fragmentShaderParts.functionIds, functionId);
const func = shaderBuilder._functions[functionId];
expect(func.signature).toEqual(signature);
expectEqualUnordered(func.body, bodyLines);
};
ShaderBuilderTester.expectVertexLinesContains = function (
shaderBuilder,
expectedString,
) {
let hasLine = false;
const lines = shaderBuilder._vertexShaderParts.shaderLines;
const length = lines.length;
for (let i = 0; i < length; i++) {
const line = lines[i];
if (line.indexOf(expectedString) > -1) {
hasLine = true;
break;
}
}
expect(hasLine).toBe(true);
};
ShaderBuilderTester.expectVertexLinesEqual = function (
shaderBuilder,
expectedVertexLines,
) {
expect(shaderBuilder._vertexShaderParts.shaderLines).toEqual(
expectedVertexLines,
);
};
ShaderBuilderTester.expectFragmentLinesContains = function (
shaderBuilder,
expectedString,
) {
const lines = shaderBuilder._fragmentShaderParts.shaderLines;
for (let i = 0; i < lines; i++) {
const line = lines[i];
expect(line.indexOf(expectedString)).toBeGreaterThan(-1);
}
};
ShaderBuilderTester.expectFragmentLinesEqual = function (
shaderBuilder,
expectedFragmentLines,
) {
expect(shaderBuilder._fragmentShaderParts.shaderLines).toEqual(
expectedFragmentLines,
);
};
export default ShaderBuilderTester;