Skip to content

Commit

Permalink
Add tests for async-syntax-highlighter
Browse files Browse the repository at this point in the history
  • Loading branch information
marcodejongh authored and conorhastings committed Oct 31, 2018
1 parent 102a169 commit 6495c0a
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 6 deletions.
89 changes: 89 additions & 0 deletions __tests__/async-syntax-highlighter.js
@@ -0,0 +1,89 @@
import React from 'react';
import renderer from 'react-test-renderer';
import AsyncSyntaxHighlighter from "../src/async-syntax-highlighter";

test('AsyncSyntaxHighlighter registerLanguage when registerLanguage is undefined', () => {
const SyntaxHighlighter = AsyncSyntaxHighlighter({});

SyntaxHighlighter.registerLanguage("test", {});
expect(SyntaxHighlighter.languages).toEqual([]);
});

test('AsyncSyntaxHighlighter registerLanguage when registerLanguage is defined but astGenerator isn\'t', () => {
const registerLanguage = jest.fn();
const SyntaxHighlighter = AsyncSyntaxHighlighter({ registerLanguage });

SyntaxHighlighter.registerLanguage("test", {});
expect(SyntaxHighlighter.languages).toEqual([ { name: "test", language: {} }]);
});

test('AsyncSyntaxHighlighter registerLanguage when registerLanguage & astGenerator is defined', () => {
const registerLanguage = jest.fn();

const SyntaxHighlighter = AsyncSyntaxHighlighter({ registerLanguage });
SyntaxHighlighter.astGenerator = { test: '123' };

SyntaxHighlighter.registerLanguage("test", {});
expect(SyntaxHighlighter.languages).not.toEqual([ { name: "test", language: {} }]);
expect(registerLanguage).toBeCalledWith(SyntaxHighlighter.astGenerator, "test", {})
});

test('AsyncSyntaxHighlighter isRegistered when registerLanguage is not defined', () => {
const SyntaxHighlighter = AsyncSyntaxHighlighter({ });

expect(SyntaxHighlighter.isRegistered("test")).toEqual(true);
});

test('AsyncSyntaxHighlighter isRegistered when astGenerator is not defined it checks the languages array', () => {
const registerLanguage = jest.fn();

const SyntaxHighlighter = AsyncSyntaxHighlighter({ registerLanguage });
SyntaxHighlighter.astGenerator = null;
SyntaxHighlighter.languages.push({ name: 'test' })
expect(SyntaxHighlighter.isRegistered('test')).toEqual(true);
});

test('AsyncSyntaxHighlighter isRegistered when astGenerator is defined it should call isLanguageRegistered', () => {
const registerLanguage = jest.fn();

const SyntaxHighlighter = AsyncSyntaxHighlighter({ registerLanguage });
SyntaxHighlighter.astGenerator = null;
SyntaxHighlighter.languages.push({ name: 'test' })
expect(SyntaxHighlighter.isRegistered('test')).toEqual(true);
});

test('AsyncSyntaxHighlighter loadAstGenerator should return the promise of the loader', () => {
const testValue = "test";
const loader = jest.fn().mockReturnValue({
then: jest.fn().mockReturnValue(testValue)
})


const SyntaxHighlighter = AsyncSyntaxHighlighter({ loader });
expect(SyntaxHighlighter.loadAstGenerator()).toEqual(testValue);
});

test('AsyncSyntaxHighlighter loadAstGenerator when astGenerator resolves', async () => {
const astGenerator = "test";
const loader = jest.fn().mockResolvedValue(astGenerator)


const SyntaxHighlighter = AsyncSyntaxHighlighter({ loader });
await SyntaxHighlighter.loadAstGenerator();
expect(SyntaxHighlighter.astGenerator).toEqual(astGenerator)
});

test('AsyncSyntaxHighlighter loadAstGenerator when astGenerator resolves and it has languages in the language array', async () => {
const astGenerator = "test";
const registerLanguage = jest.fn();
const loader = jest.fn().mockResolvedValue(astGenerator)


const SyntaxHighlighter = AsyncSyntaxHighlighter({ loader, registerLanguage });
const testLanguage = { name: "cpp", language: { } };

SyntaxHighlighter.languages.push(testLanguage);

await SyntaxHighlighter.loadAstGenerator();
expect(registerLanguage).toBeCalledWith(astGenerator, testLanguage.name, testLanguage.language)
});
5 changes: 1 addition & 4 deletions __tests__/prism-async-light.js
Expand Up @@ -3,8 +3,6 @@ import renderer from 'react-test-renderer';
import { PrismAsyncLight as SyntaxHighlighter } from "../src";
import prism from "../src/styles/prism/prism";



test('SyntaxHighlighter renders jsx highlighted text', () => {
const tree = renderer.create(
<SyntaxHighlighter language="jsx" style={prism}>
Expand Down Expand Up @@ -47,7 +45,6 @@ test('SyntaxHighlighter should just render text if syntax is not registered', ()
});

test('When the code split is loaded - SyntaxHighlighter renders jsx highlighted text', async () => {

await SyntaxHighlighter.preload();

const tree = renderer.create(
Expand Down Expand Up @@ -77,4 +74,4 @@ test('When the code split is loaded - SyntaxHighlighter renders jsx highlighted
).toJSON();

expect(tree).toMatchSnapshot();
});
});
3 changes: 1 addition & 2 deletions src/async-syntax-highlighter.js
Expand Up @@ -24,7 +24,7 @@ export default (options) => {

if (!ReactAsyncHighlighter.astGenerator) {
// Ast generator not available yet, but language will be registered once it is.
return ReactAsyncHighlighter.languages.includes(item => item.name === language);
return ReactAsyncHighlighter.languages.findIndex(item => item.name === language) > -1;
}

return isLanguageRegistered(ReactAsyncHighlighter.astGenerator, language);
Expand All @@ -44,7 +44,6 @@ export default (options) => {
});
}
};


static loadAstGenerator() {
ReactAsyncHighlighter.astGeneratorPromise = loader().then(astGenerator => {
Expand Down

0 comments on commit 6495c0a

Please sign in to comment.