Skip to content
This repository has been archived by the owner on Feb 27, 2024. It is now read-only.

Commit

Permalink
Add test for DocProjectGenerator and refactor mocks
Browse files Browse the repository at this point in the history
  • Loading branch information
jhm-ciberman committed Mar 1, 2018
1 parent 3d35581 commit f086a91
Show file tree
Hide file tree
Showing 24 changed files with 241 additions and 182 deletions.
59 changes: 59 additions & 0 deletions inversify.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { Container, interfaces } from "inversify";
import { TYPES } from "./types";

import CliGenerateFacade from "./src/cli/CliGenerateFacade";
import ICliGenerateFacade from "./src/cli/interfaces/ICliGenerateFacade";

import ConfigManager from "./src/config/ConfigManager";
import IConfigManager from "./src/config/interfaces/IConfigManager";
import IOutputConfig from "./src/config/interfaces/IOutputConfig";
import IProjectConfig from "./src/config/interfaces/IProjectConfig";
import IScriptValidationRules from "./src/config/interfaces/IScriptValidationRules";
import OutputConfig from "./src/config/OutputConfig";
import ProjectConfig from "./src/config/ProjectConfig";
import ScriptValidationRules from "./src/config/ScriptValidationRules";

import DocProjectGenerator from "./src/generator/DocProjectGenerator";
import DocumentationExtractor from "./src/generator/DocumentationExtractor";
import IDocProjectGenerator from "./src/generator/interfaces/IDocProjectGenerator";
import IDocumentationExtractor from "./src/generator/interfaces/IDocumentationExtractor";

import IJSDocParser from "./src/parser/interfaces/IJSDocParser";
import JSDocParser from "./src/parser/JSDocParser";

import GMProject from "./src/gm_project/GMProject";
import IGMProject from "./src/gm_project/interfaces/IGMProject";
import IScriptValidator from "./src/validation/interfaces/IScriptValidator";
import IValidationRule from "./src/validation/interfaces/IValidationRule";
import ScriptValidator from "./src/validation/ScriptValidator";
import ValidableScript from "./src/validation/ValidableScript";
import ValidationRule from "./src/validation/ValidationRule";

/* tslint:disable:max-line-length */
const container = new Container();

// Validation
container.bind<interfaces.Newable<IValidationRule<ValidableScript>>>(TYPES.IValidationRule).toConstructor(ValidationRule);
container.bind<IScriptValidator>(TYPES.IScriptValidator).to(ScriptValidator);

// Generator
container.bind<IDocumentationExtractor>(TYPES.IDocumentationExtractor).to(DocumentationExtractor);

// Parser
container.bind<IJSDocParser>(TYPES.IJSDocParser).to(JSDocParser);
container.bind<IDocProjectGenerator>(TYPES.IDocProjectGenerator).to(DocProjectGenerator);

// Config
container.bind<IConfigManager>(TYPES.IConfigManager).to(ConfigManager);
container.bind<IOutputConfig>(TYPES.IOutputConfig).to(OutputConfig);
container.bind<IProjectConfig>(TYPES.IProjectConfig).to(ProjectConfig);
container.bind<interfaces.Newable<IProjectConfig>>(TYPES.NewableOfIProjectConfig).toConstructor(ProjectConfig);
container.bind<IScriptValidationRules>(TYPES.IScriptValidationRules).to(ScriptValidationRules);

// Cli
container.bind<ICliGenerateFacade>(TYPES.ICliGenerateFacade).to(CliGenerateFacade);

// GM Project
container.bind<IGMProject>(TYPES.IGMProject).to(GMProject);

export default container;
4 changes: 2 additions & 2 deletions src/cli/Cli.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import container from "../inversify.config";
import { TYPES } from "../types";
import container from "../../inversify.config";
import { TYPES } from "../../types";

import * as program from "commander";
import { inject } from "inversify";
Expand Down
6 changes: 3 additions & 3 deletions src/cli/CliGenerateFacade.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import open = require("open");
import * as path from "path";

import { inject, injectable, interfaces } from "inversify";
import IProjectConfig from "../config/interfaces/IProjectConfig";
import { TYPES } from "../types";
import container from "../../inversify.config";
import { TYPES } from "../../types";

import IConfigManager from "../config/interfaces/IConfigManager";
import IProjectConfig from "../config/interfaces/IProjectConfig";
import DocumentationGenerator from "../generator/DocumentationGenerator";
import ProjectLoader from "../gm_project/ProjectLoader";
import container from "../inversify.config";
import IReporter from "../reporter/interfaces/IReporter";
import ReporterManager from "../reporter/ReporterManager";
import ICliGenerateFacade from "./interfaces/ICliGenerateFacade.d";
Expand Down
2 changes: 1 addition & 1 deletion src/config/ConfigManager.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { inject, injectable, interfaces } from "inversify";
import { TYPES } from "../types";
import { TYPES } from "../../types";

import * as fse from "fs-extra";
import * as path from "path";
Expand Down
2 changes: 1 addition & 1 deletion src/config/ProjectConfig.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { inject, injectable } from "inversify";
import { TYPES } from "../types";
import { TYPES } from "../../types";

import IOutputConfig from "./interfaces/IOutputConfig";
import IProjectConfig from "./interfaces/IProjectConfig";
Expand Down
2 changes: 1 addition & 1 deletion src/docs_gm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
* This file is the entry point for the command line interface (CLI)
*/

import container from "../inversify.config";
import Cli from "./cli/Cli";
import container from "./inversify.config";

// CLI Composition root
const cli = container.get(Cli);
Expand Down
17 changes: 8 additions & 9 deletions src/generator/DocProjectGenerator.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
import { inject, injectable } from "inversify";
import { TYPES } from "../../types";

import * as fse from "fs-extra";
import * as path from "path";

import IGMProject from "../gm_project/interfaces/IGMProject";

import { inject } from "inversify";
import ProjectConfig from "../config/ProjectConfig";
import DocFolder from "../doc_models/DocFolder";
import { TYPES } from "../types";

import DocProject from "../doc_models/DocProject";
import DocResource from "../doc_models/DocResource";
import DocScript from "../doc_models/DocScript";
import GMScript from "../gm_project/GMScript";
import IGMFolder from "../gm_project/interfaces/IGMFolder";
import IGMProject from "../gm_project/interfaces/IGMProject";
import IGMResource from "../gm_project/interfaces/IGMResource";

import IDocProjectGenerator from "./interfaces/IDocProjectGenerator";
import IDocumentationExtractor from "./interfaces/IDocumentationExtractor";

/**
* This class generates a DocProject
*/
@injectable()
export default class DocProjectGenerator implements IDocProjectGenerator {

/**
Expand Down Expand Up @@ -117,9 +116,6 @@ export default class DocProjectGenerator implements IDocProjectGenerator {
* @param res The GMResource to load
*/
private async _loadResource(res: IGMResource): Promise<DocResource[]> {
if (!res.match(this._pattern)) {
return [];
}
if (this._isFolder(res)) {
return [await this._loadFolder(res)];
} else if (this._isScript(res)) {
Expand All @@ -134,6 +130,9 @@ export default class DocProjectGenerator implements IDocProjectGenerator {
* the documentation from it.
*/
private async _loadScript(gmScript: GMScript): Promise<DocScript[]> {
if (!gmScript.match(this._pattern)) {
return [];
}
const pathStr = path.resolve(this._gmProject.path, gmScript.filepath);
try {
const str = await fse.readFile(pathStr, "utf8");
Expand Down
2 changes: 1 addition & 1 deletion src/generator/DocumentationExtractor.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { inject, injectable } from "inversify";
import { TYPES } from "../types";
import { TYPES } from "../../types";

import IProjectConfig from "../config/interfaces/IProjectConfig";
import DocScript from "../doc_models/DocScript";
Expand Down
2 changes: 1 addition & 1 deletion src/generator/DocumentationGenerator.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { inject, interfaces } from "inversify";
import { TYPES } from "../types";
import { TYPES } from "../../types";

import * as path from "path";

Expand Down
3 changes: 2 additions & 1 deletion src/gm_project/GMScript.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import GMResource from "./GMResource";
import IGMScript from "./interfaces/IGMScript";

/**
* Represents a GameMaker Script
*/
export default abstract class GMScript extends GMResource {
export default abstract class GMScript extends GMResource implements IGMScript {

/**
* The file location of the GML file
Expand Down
7 changes: 7 additions & 0 deletions src/gm_project/interfaces/IGMScript.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import IGMResource from "./IGMResource";

export default interface IGMScript extends IGMResource {
readonly filepath: string;
subScripts(): IterableIterator<[string, string]>;
loadFromString(str: string): void;
}
54 changes: 0 additions & 54 deletions src/inversify.config.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/validation/ScriptValidator.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { inject, injectable, interfaces } from "inversify";
import { TYPES } from "../types";
import { TYPES } from "../../types";

import IScriptValidationRules from "../config/interfaces/IScriptValidationRules";
import IScriptValidator from "./interfaces/IScriptValidator";
Expand Down
13 changes: 13 additions & 0 deletions tests/__mock__/MockDocumentationExtractor.mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { injectable } from "inversify";
import DocScript from "../../src/doc_models/DocScript";
import IDocumentationExtractor from "../../src/generator/interfaces/IDocumentationExtractor";
import IGMScript from "../../src/gm_project/interfaces/IGMScript";

/* tslint:disable:completed-docs */

@injectable()
export default class MockDocumentationExtractor implements IDocumentationExtractor {
public extractDocScripts(_script: IGMScript): DocScript[] {
throw new Error("Method not implemented.");
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
import IGMFolder from "../../../src/gm_project/interfaces/IGMFolder";
import IGMResource from "../../../src/gm_project/interfaces/IGMResource";
import { injectable } from "inversify";
import IGMFolder from "../../src/gm_project/interfaces/IGMFolder";
import IGMResource from "../../src/gm_project/interfaces/IGMResource";

/* tslint:disable:completed-docs */

export default class GMFolderMock implements IGMFolder {
@injectable()
export default class MockGMFolder implements IGMFolder {

public fullpath: string;
public fullpath: string = "";
public name: string;
public parent: IGMFolder | null = null;
public mockChildren: IGMResource[];
constructor(name: string, mockChildren: IGMResource[]) {
this.name = name;
this.mockChildren = mockChildren;
for (const child of mockChildren) {
child.parent = this;
}
}
get children(): IterableIterator<IGMResource> {
return this.mockChildren[Symbol.iterator]();
Expand All @@ -23,6 +28,6 @@ export default class GMFolderMock implements IGMFolder {
throw new Error("Method not implemented.");
}
public match(_pattern: string): boolean {
return true;
throw new Error("Method not implemented.");
}
}
20 changes: 20 additions & 0 deletions tests/__mock__/MockGMProject.mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { injectable } from "inversify";
import IGMFolder from "../../src/gm_project/interfaces/IGMFolder";
import IGMProject from "../../src/gm_project/interfaces/IGMProject";
import GMFolderMock from "./MockGMFolder.mock";

/* tslint:disable:completed-docs */

@injectable()
export default class MockGMProject extends GMFolderMock implements IGMProject {
public parent: IGMFolder | null = null;
public path: string;
public mockChildren: IGMFolder[];
constructor(name: string, mockChildren: IGMFolder[], path: string) {
super(name, mockChildren);
this.path = path;
}
get children(): IterableIterator<IGMFolder> {
return this.mockChildren[Symbol.iterator]();
}
}
30 changes: 30 additions & 0 deletions tests/__mock__/MockGMScript.mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { injectable } from "inversify";
import IGMFolder from "../../src/gm_project/interfaces/IGMFolder";
import IGMScript from "../../src/gm_project/interfaces/IGMScript";

/* tslint:disable:completed-docs */

@injectable()
export default class MockGMScript implements IGMScript {
public fullpath: string;
public name: string;
public filepath: string;
public parent: IGMFolder | null = null;
public mockFullpath: string;

constructor(name: string, fullpath: string, filepath: string) {
this.name = name;
this.fullpath = fullpath;
this.filepath = filepath;
}
public * subScripts(): IterableIterator<[string, string]> {
throw new Error("Method not implemented.");
}
public loadFromString(_str: string): void {
throw new Error("Method not implemented.");
}
public match(_pattern: string): boolean {
throw new Error("Method not implemented.");
}

}
4 changes: 2 additions & 2 deletions tests/config/ConfigManager.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import {
TestFixture,
} from "alsatian";

import container from "../../src/inversify.config";
import { TYPES } from "../../src/types";
import container from "../../inversify.config";
import { TYPES } from "../../types";

import { TempDir } from "../_testing_helpers/TempDir.help";

Expand Down
Loading

0 comments on commit f086a91

Please sign in to comment.