giggio/jasmine-headless-webkit-dotnet — pull request #1 by Diullei (2012-11-28 13:55:28+00:00)
Title: TypeScript support

Fala @giggio blz?

Eu fiz umas alterações no teu código para permitir a execução de testes com TypeScript. Estou mandando pra você avaliar.

### Uma descrição rápida do que foi feito:

* Eu criei uma interface chamada `ISourceCompiler` e extraí todo o código da classe `SourceFile` que compila os arquivos coffeeScript para uma classe chamda `CoffeeScriptSourceCompiler` que implementa esta interface.

* alterei a classe `SourceFile`para carregar via MEF todas as classes que implementam `ISourceCompiler` (Achei que MEF poderia ser uma boa opção, assim qualquer um pode implementar um SourceCompiler e plugar).

* Feito isso eu criei um novo projeto chamado `jasmine-headless-typeScript-compiler` e implementei a interface `ISourceCompiler` para permitir a compilação de código TypeScript usando o teu projeto `TypeScriptCompiler`.

Repassei os testes e parece que está funcionando bem. Espero que minhas modificações rodem corretamente ai pra você rs, aqui está de boa...

### OBSERVAÇÕES

Para que o projeto `TypeScriptCompiler` atenda bem esta extensão que eu criei vai ser necessário permitir que ele mapeie os arquivos referenciados pelo TypeScript, seja referência a módulos ou referência a arquivos usando a syntaxe `/// `. Como ele não faz isso ainda eu precisei declarar no mesmo arquivo todos os objetos utilizados. Pra ficar mais claro o que estou tentando dizer veja o exemplo abaixo:

///
///

declare var Calculator: any;
declare var describe: any;
declare var expect: any;
declare var it: any;

describe("Calculator", function () {
it("should fail", function () {
expect(new Calculator().sum(1, 2)).toBe(3);
});
});

Veja que se eu remover o bloco `declare` o código vai quebrar no momento da compilação por que o `TypeScriptCompiler` não segue as referências declaradas no topo do arquivo. O mesmo ocorreria para importação de módulos.

Vou pensar qual a melhor forma de resolver isso. Uma possível solução é implementar em C# o acesso a leitura e escrita no disco e passar isso pra dentro da EngineJavaScript que você está utilizando no projeto. Talvez esta compilação do TypeScript que você está utilizando precise ser revista por que eu acho que ela ignora o mapeamento das referências. Não tenho certeza ainda, tendo um tempo eu verifico e te falo.

No mais o projeto ficou bem legal kra. Gostei bastante.

Vlw!