Skip to content

Commit

Permalink
See #58. Add support for configuring path of Executable Dependency
Browse files Browse the repository at this point in the history
  • Loading branch information
Glavin001 committed Apr 10, 2018
1 parent df78838 commit a58a916
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 4 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion src/beautifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -366,10 +366,11 @@ export class Unibeautify {
langOptions
);
return promise.then(currentText => {
const beautifierOptions = langOptions[beautifier.name] || {};
const dependencyManager = new DependencyManager(
beautifier.name,
beautifier.dependencies || [],
langOptions
beautifierOptions
);
return dependencyManager.load().then(() => {
return beautifier
Expand Down
21 changes: 21 additions & 0 deletions test/beautifier/beautifier.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
import { Unibeautify, Language, Beautifier } from "../../src/";

test("should fail to load undefined beautifier", () => {
const unibeautify = new Unibeautify();
const beautifier: Beautifier = undefined as any;
expect(() => unibeautify.loadBeautifier(beautifier)).toThrowError("Beautifier is missing a \"name\" property.");
});

test("should fail to load beautifier without name", () => {
const unibeautify = new Unibeautify();
const beautifierResult = "Testing Result";
const beautifier: Beautifier = {
beautify: ({ Promise }) => {
return Promise.resolve(beautifierResult);
},
name: undefined as any,
options: {
TestLang: false,
},
};
expect(() => unibeautify.loadBeautifier(beautifier)).toThrowError("Beautifier is missing a \"name\" property.");
});

test("should load beautifier", () => {
const unibeautify = new Unibeautify();
const beautifierResult = "Testing Result";
Expand Down
94 changes: 92 additions & 2 deletions test/beautifier/dependency.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ test("should throw Error when dependency type is unknown", () => {
};
return expect(() => {
unibeautify.loadBeautifier(beautifier);
}).toThrowError("");
}).toThrowError('Dependency type not found for: {"type":"wrong"}');
});

describe("Node", () => {
Expand Down Expand Up @@ -109,7 +109,7 @@ describe("Executable", () => {
};
const beautifier: Beautifier = {
beautify: ({ Promise, dependencies }) => {
dependencies.get("");
dependencies.get(dependency.name);
return Promise.resolve(beautifierResult);
},
dependencies: [dependency],
Expand All @@ -130,4 +130,94 @@ describe("Executable", () => {
'Dependency "Fake Program" is required and not installed.'
);
});

test("should successfully beautify text when dependency is installed", () => {
const unibeautify = new Unibeautify();
const lang: Language = {
atomGrammars: [],
extensions: ["test"],
name: "TestLang",
namespace: "test",
since: "0.1.0",
sublimeSyntaxes: [],
vscodeLanguages: [],
};
unibeautify.loadLanguage(lang);

const beautifierResult = "Testing Result";
const dependency: DependencyDefinition = {
name: "Node",
program: "node",
type: DependencyType.Executable,
};
const beautifier: Beautifier = {
beautify: ({ Promise, dependencies }) => {
dependencies.get(dependency.name);
return Promise.resolve(beautifierResult);
},
dependencies: [dependency],
name: "TestBeautify",
options: {
TestLang: false,
},
};
unibeautify.loadBeautifier(beautifier);

return expect(
unibeautify.beautify({
languageName: "TestLang",
options: {},
text: "test",
})
).resolves.toBe(beautifierResult);
});

test("should throw Error when path configuration for dependency is incorrect", () => {
const unibeautify = new Unibeautify();
const lang: Language = {
atomGrammars: [],
extensions: ["test"],
name: "TestLang",
namespace: "test",
since: "0.1.0",
sublimeSyntaxes: [],
vscodeLanguages: [],
};
unibeautify.loadLanguage(lang);

const beautifierResult = "Testing Result";
const dependency: DependencyDefinition = {
name: "Node",
program: "node",
type: DependencyType.Executable,
};
const beautifier: Beautifier = {
beautify: ({ Promise, dependencies }) => {
dependencies.get(dependency.name);
return Promise.resolve(beautifierResult);
},
dependencies: [dependency],
name: "TestBeautify",
options: {
TestLang: false,
},
};
unibeautify.loadBeautifier(beautifier);

return expect(
unibeautify.beautify({
languageName: "TestLang",
options: {
TestLang: {
[beautifier.name]: {
Node: {
path: "/this/path/is/wrong",
},
} as any,
},
},
text: "test",
})
).rejects.toThrowError('Dependency "Node" is required and not installed.');
});
});

0 comments on commit a58a916

Please sign in to comment.