package com.atlassian.labs.speakeasy.commonjs.rest; import com.atlassian.labs.speakeasy.commonjs.Export; import com.atlassian.labs.speakeasy.commonjs.Module; import org.junit.Ignore; import org.junit.Test; import static com.google.common.collect.Sets.newHashSet; import static org.junit.Assert.assertEquals; /** * */ public class TestModule { @Test public void parseExports() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " * Some method\n" + " */\n" + "exports.foo = bar;"); assertEquals(1, module.getExports().size()); Export export = module.getExports().get("foo"); assertEquals("foo", export.getName()); assertEquals("Some method", export.getJsDoc().getDescription()); } @Test public void parseExportsMultipleExports() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " * Some method\n" + " */\n" + "exports.foo = bar;" + "/**\n" + " * Another method\n" + " */\n" + "exports.baz = bar;"); assertEquals(2, module.getExports().size()); } @Test public void parseExportsWithSpace() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " * Some method\n" + " */\n\n" + "exports.foo = bar;"); assertEquals(1, module.getExports().size()); Export export = module.getExports().get("foo"); assertEquals("foo", export.getName()); assertEquals("Some method", export.getJsDoc().getDescription()); } @Test public void parseExportsNoStars() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " Some method\n" + " */\n" + "exports.foo = bar;"); assertEquals(1, module.getExports().size()); Export export = module.getExports().get("foo"); assertEquals("foo", export.getName()); assertEquals("Some method", export.getJsDoc().getDescription()); } @Test public void parseExportsMultiline() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " * Some method\n" + " * Another point\n" + " */\n" + "exports.foo = bar;"); assertEquals(1, module.getExports().size()); Export export = module.getExports().get("foo"); assertEquals("foo", export.getName()); assertEquals("Some method\nAnother point", export.getJsDoc().getDescription()); } @Test public void parseDescription() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " * Some module\n" + " */\n"); assertEquals("Some module", module.getJsDoc().getDescription()); } @Test public void parseDescriptionWithExport() { Module module = new Module("foo", "foo.js", 0, "/**\n" + " * Some module\n" + " */\n" + "/**\n" + " * Some method\n" + " */\n" + "exports.foo = bar;"); assertEquals("Some module", module.getJsDoc().getDescription()); } @Test @Ignore("Would be nice for this to work, but optional") public void parseNoDescriptionWithExport() { Module module = new Module("foo", "foo.js", 0, "var foo;\n/**\n" + " * Some method\n" + " */\n" + "exports.foo = bar;"); assertEquals("", module.getJsDoc().getDescription()); } @Test public void parseDependencies() { Module module = new Module("foo", "foo.js", 0, "require('foo/bar');"); assertEquals(newHashSet("foo/bar"), module.getDependencies()); } @Test public void parseRelativeDependencies() { Module module = new Module("foo/bar", "foo.js", 0, "require('./baz');"); assertEquals(newHashSet("foo/baz"), module.getDependencies()); } @Test public void parsePrevRelativeDependencies() { Module module = new Module("foo/bar", "foo.js", 0, "require('../baz');"); assertEquals(newHashSet("baz"), module.getDependencies()); } }