Skip to content

Commit

Permalink
Update ObjectLoader.unit.test.js
Browse files Browse the repository at this point in the history
add unit tests
  • Loading branch information
epreston committed Sep 5, 2023
1 parent 4c454e4 commit b13ebb6
Showing 1 changed file with 91 additions and 15 deletions.
106 changes: 91 additions & 15 deletions packages/loaders/tests/ObjectLoader.unit.test.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
import { beforeAll, beforeEach, describe, expect, it, test, vi } from 'vitest';
// @vitest-environment jsdom

import { describe, expect, it, test, vi } from 'vitest';
import { resolveAfter, flushPromises } from './test-helpers.js';

import { BoxGeometry } from '@renderlayer/geometries';
import { MeshBasicMaterial } from '@renderlayer/materials';
import { Mesh } from '@renderlayer/objects';

import { Loader } from '../src/Loader.js';
import { ObjectLoader } from '../src/ObjectLoader.js';

// will be intercepted by msw, not a real url
const MeshTestFile = 'http://renderlayer.org/test/json/Mesh.json';
const MissingTestFile = 'http://renderlayer.org/test/json/missing.json';

describe('Loaders', () => {
describe('ObjectLoader', () => {
test('constructor', () => {
Expand All @@ -15,29 +26,94 @@ describe('Loaders', () => {
expect(object).toBeInstanceOf(Loader);
});

test.todo('load', () => {
// implement
});
test('load', async () => {
const onLoad = vi.fn();
const onProgress = vi.fn(); // unused
const onError = vi.fn();

test.todo('loadAsync', () => {
// async loadAsync( url, onProgress )
// implement
const object = new ObjectLoader();

// --------------------
// good file
object.load(MeshTestFile, onLoad, onProgress, onError);

// allow time for fetch and async code to compete before asserts
// await resolveAfter(100);
await flushPromises();
expect(onLoad).toHaveBeenCalled();
expect(onError).not.toHaveBeenCalled();

vi.clearAllMocks();

// --------------------
// bad file
object.load(MissingTestFile, onLoad, onProgress, onError);

// allow time for fetch and async code to compete before asserts
// await resolveAfter(100);
await flushPromises();
expect(onLoad).not.toHaveBeenCalled();
expect(onError).toHaveBeenCalled();
expect('missing test file').toHaveBeenWarned();
});

test.todo('parse', () => {
// implement
test('loadAsync', async () => {
const onProgress = vi.fn(); // unused
const object = new ObjectLoader();

// --------------------
// good file
const loadedMesh = await object.loadAsync(MeshTestFile, onProgress);

expect(loadedMesh).toBeDefined();
expect(loadedMesh).toBeInstanceOf(Mesh);
expect(loadedMesh.geometry).toBeInstanceOf(BoxGeometry);
expect(loadedMesh.material).toBeInstanceOf(MeshBasicMaterial);

vi.clearAllMocks();

// --------------------
// bad file
const missingMesh = await object.loadAsync(MissingTestFile, onProgress).catch((err) => {
// it will error
});

expect(missingMesh).toBeUndefined();
expect('missing test file').toHaveBeenWarned();
});

test.todo('parseAsync', () => {
// async parseAsync( json )
// implement
test('parse', () => {
const geometry = new BoxGeometry(1, 1, 1);
const material = new MeshBasicMaterial();
const mesh = new Mesh(geometry, material);

const json = mesh.toJSON();
const loader = new ObjectLoader();

const onLoad = vi.fn();
const outputObject = loader.parse(json, onLoad);

expect(onLoad).toHaveBeenCalled();
expect(outputObject).toStrictEqual(mesh);
});

test.todo('parseShapes', () => {
// parseShapes( json )
// implement
test('parseAsync', async () => {
const geometry = new BoxGeometry(1, 1, 1);
const material = new MeshBasicMaterial();
const mesh = new Mesh(geometry, material);

const json = mesh.toJSON();
const loader = new ObjectLoader();
const outputObject = await loader.parseAsync(json);

expect(outputObject).toStrictEqual(mesh);
});

// test.todo('parseShapes', () => {
// // parseShapes( json )
// // implement
// });

test.todo('parseSkeletons', () => {
// parseSkeletons( json, object )
// implement
Expand Down

0 comments on commit b13ebb6

Please sign in to comment.