Index: test/main_test.ts |
diff --git a/test/main_test.ts b/test/main_test.ts |
index 971459209ad4432c6876d1671e4a1ce9673a3e66..bd8b2a9f3af4ce72cb5ec0b19d06bab8d06661f8 100644 |
--- a/test/main_test.ts |
+++ b/test/main_test.ts |
@@ -4,111 +4,147 @@ |
import chai = require('chai'); |
import main = require('../lib/main'); |
-import {expectTranslate, expectErroneousCode} from './test_support'; |
+import {expectTranslate} from './test_support'; |
describe('main transpiler functionality', () => { |
- describe('comments', () => { |
- it('keeps leading comments', () => { |
- expectTranslate(` |
-function f() { |
-/* A */ a; |
-/* B */ b; |
-}`).to.equal(`f() { |
- /* A */ a; |
- /* B */ b; |
+ describe( |
+ 'comments', () => { |
+ it('keeps leading comments', |
+ () => { |
+ expectTranslate(`/* A */ var a; |
+/* B */ var b;`).to.equal(`/// A |
+@JS() |
+external get a; |
+@JS() |
+external set a(v); |
+ |
+/// B |
+@JS() |
+external get b; |
+@JS() |
+external set b(v);`); |
+ expectTranslate(`// A |
+var a; |
+/// B |
+var b;`).to.equal(`/// A |
+@JS() |
+external get a; |
+@JS() |
+external set a(v); |
+ |
+/// B |
+@JS() |
+external get b; |
+@JS() |
+external set b(v);`); |
+ }); |
+ it('keeps ctor comments', () => { |
+ expectTranslate('/** A */ class A {\n /** ctor */ constructor() {}}').to.equal(`/// A |
+@JS() |
+class A { |
+ // @Ignore |
+ A.fakeConstructor$(); |
+ |
+ /// ctor |
+ external factory A(); |
}`); |
- expectTranslate(`function f() { |
-// A |
-a |
-// B |
-b |
-}`).to.equal(`f() { |
- // A |
- a; |
- // B |
- b; |
+ }); |
+ it('translates links to dart doc format', () => { |
+ expectTranslate('/** {@link this/place} */ var a').to.equal(`/// [this/place] |
+@JS() |
+external get a; |
+@JS() |
+external set a(v);`); |
+ expectTranslate('/* {@link 1} {@link 2} */ var a').to.equal(`/// [1] [2] |
+@JS() |
+external get a; |
+@JS() |
+external set a(v);`); |
+ }); |
+ it('removes @module doc tags', () => { |
+ expectTranslate(`/** @module |
+ * This is a module for doing X. |
+ */`).to.equal(`/// This is a module for doing X.`); |
+ }); |
+ it('removes @description doc tags', () => { |
+ expectTranslate(`/** @description |
+ * This is a module for doing X. |
+ */`).to.equal(`/// This is a module for doing X.`); |
+ }); |
+ it('removes @depracted doc tags', () => { |
+ expectTranslate(`/** |
+ * Use SomethingElse instead. |
+ * @deprecated |
+ */`).to.equal(`/// Use SomethingElse instead.`); |
+ }); |
+ it('removes @param doc tags', () => { |
+ expectTranslate(`/** |
+ * Method to do blah. |
+ * @param doc Document. |
+ */`).to.equal(`/// Method to do blah.`); |
+ }); |
+ it('removes @return doc tags', () => { |
+ expectTranslate(`/** |
+ * Method to do blah. |
+ * @return {String} |
+ */`).to.equal(`/// Method to do blah.`); |
+ }); |
+ it('removes @throws doc tags', () => { |
+ expectTranslate(`/** |
+ * Method to do blah. |
+ * @throws ArgumentException If arguments are wrong |
+ */`).to.equal(`/// Method to do blah.`); |
+ }); |
+ it('multiple line comment', () => { |
+ expectTranslate(`/** |
+ * Method to do blah. |
+ * Bla bla bla. |
+ * Foo bar. |
+ */`).to.equal(`/// Method to do blah. |
+/// Bla bla bla. |
+/// Foo bar.`); |
+ }); |
+ it('multiple line comment', () => { |
+ expectTranslate(`class Foo { |
+/** |
+* Method to do blah. |
+* Bla bla bla. |
+* Foo bar. |
+*/ |
+ bar(); |
+}`).to.equal(`@JS() |
+class Foo { |
+ // @Ignore |
+ Foo.fakeConstructor$(); |
+ |
+ /// Method to do blah. |
+ /// Bla bla bla. |
+ /// Foo bar. |
+ external bar(); |
}`); |
- }); |
- it('keeps ctor comments', () => { |
- expectTranslate('/** A */ class A {\n /** ctor */ constructor() {}}').to.equal(`/** A */ |
-class A { |
- /** ctor */ A() {} |
+ |
+ expectTranslate(`class Foo { |
+// Baz. |
+// Bla bla bla. |
+// Foo bar. |
+ |
+// Bla. |
+bar(); |
+}`).to.equal(`@JS() |
+class Foo { |
+ // @Ignore |
+ Foo.fakeConstructor$(); |
+ |
+ /// Baz. |
+ /// Bla bla bla. |
+ /// Foo bar. |
+ |
+ /// Bla. |
+ external bar(); |
}`); |
- }); |
- it('translates links to dart doc format', () => { |
- expectTranslate('/** {@link this/place} */ a').to.equal('/** [this/place] */ a;'); |
- expectTranslate('/* {@link 1} {@link 2} */ a').to.equal('/* [1] [2] */ a;'); |
- }); |
- it('removes @module doc tags', () => { |
- expectTranslate(`/** @module |
- * This is a module for doing X. |
- */`).to.equal(`/** |
- * This is a module for doing X. |
- */`); |
- }); |
- it('removes @description doc tags', () => { |
- expectTranslate(`/** @description |
- * This is a module for doing X. |
- */`).to.equal(`/** |
- * This is a module for doing X. |
- */`); |
- }); |
- it('removes @depracted doc tags', () => { |
- expectTranslate(`/** |
- * Use SomethingElse instead. |
- * @deprecated |
- */`).to.equal(`/** |
- * Use SomethingElse instead. |
- * |
- */`); |
- }); |
- it('removes @param doc tags', () => { |
- expectTranslate(`/** |
- * Method to do blah. |
- * @param doc Document. |
- */`).to.equal(`/** |
- * Method to do blah. |
- * |
- */`); |
- }); |
- it('removes @return doc tags', () => { |
- expectTranslate(`/** |
- * Method to do blah. |
- * @return {String} |
- */`).to.equal(`/** |
- * Method to do blah. |
- * |
- */`); |
- }); |
- it('removes @throws doc tags', () => { |
- expectTranslate(`/** |
- * Method to do blah. |
- * @throws ArgumentException If arguments are wrong |
- */`).to.equal(`/** |
- * Method to do blah. |
- * |
- */`); |
- }); |
- }); |
- describe('errors', () => { |
- it('reports multiple errors', () => { |
- // Reports both the private field not having an underbar and protected being unsupported. |
- let errorLines = new RegExp( |
- 'delete operator is unsupported\n' + |
- '.*void operator is unsupported'); |
- expectErroneousCode('delete x["y"]; void z;').to.throw(errorLines); |
- }); |
- it('reports relative paths in errors', () => { |
- chai.expect(() => expectTranslate({'/a/b/c.ts': 'delete x["y"];'}, {basePath: '/a'})) |
- .to.throw(/^b\/c.ts:1/); |
- }); |
- it('reports errors across multiple files', () => { |
- expectErroneousCode({'a.ts': 'delete x["y"];', 'b.ts': 'delete x["y"];'}, { |
- failFast: false |
- }).to.throw(/^a\.ts.*\nb\.ts/); |
- }); |
- }); |
+ }); |
+ }); |
describe('output paths', () => { |
it('writes within the path', () => { |