Index: third_party/closure_compiler/runner/test/com/google/javascript/jscomp/ChromePassTest.java |
diff --git a/third_party/closure_compiler/runner/test/com/google/javascript/jscomp/ChromePassTest.java b/third_party/closure_compiler/runner/test/com/google/javascript/jscomp/ChromePassTest.java |
index 73675705e0a7ccf0d8791cc8df9efb9b429eeae5..d6264c1ad06919f8b3c0c6ca0581bcaf7f493e58 100644 |
--- a/third_party/closure_compiler/runner/test/com/google/javascript/jscomp/ChromePassTest.java |
+++ b/third_party/closure_compiler/runner/test/com/google/javascript/jscomp/ChromePassTest.java |
@@ -363,4 +363,166 @@ public class ChromePassTest extends CompilerTestCase { |
test("cr.exportPath();", null, ChromePass.CR_EXPORT_PATH_WRONG_NUMBER_OF_ARGUMENTS); |
} |
+ public void testCrMakePublicWorksOnOneMethodDefinedInPrototypeObject() throws Exception { |
+ test( |
+ "/** @constructor */\n" + |
+ "function Class() {};\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " /** @return {number} */\n" + |
+ " method_: function() { return 42; }\n" + |
+ "};\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);", |
+ "/** @constructor */\n" + |
+ "function Class() {};\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " /** @return {number} */\n" + |
+ " method_: function() { return 42; }\n" + |
+ "};\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.method;\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);"); |
+ } |
+ |
+ public void testCrMakePublicWorksOnTwoMethods() throws Exception { |
+ test( |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " /** @return {number} */\n" + |
+ " m1_: function() { return 42; },\n" + |
+ "\n" + |
+ " /** @return {string} */\n" + |
+ " m2_: function() { return ''; }\n" + |
+ "};\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['m1', 'm2']);", |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " /** @return {number} */\n" + |
+ " m1_: function() { return 42; },\n" + |
+ "\n" + |
+ " /** @return {string} */\n" + |
+ " m2_: function() { return ''; }\n" + |
+ "}\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.m1;\n" + |
+ "\n" + |
+ "/** @return {string} */\n" + |
+ "Class.m2;\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['m1', 'm2']);"); |
+ } |
+ |
+ public void testCrMakePublicRequiresMethodsToHaveJSDoc() throws Exception { |
+ test("/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " method_: function() {}\n" + |
+ "}\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);", null, ChromePass.CR_MAKE_PUBLIC_HAS_NO_JSDOC); |
+ } |
+ |
+ public void testCrMakePublicDoesNothingWithMethodsNotInAPI() throws Exception { |
+ test( |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " method_: function() {}\n" + |
+ "}\n" + |
+ "\n" + |
+ "cr.makePublic(Class, []);", |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ " method_: function() {}\n" + |
+ "}\n" + |
+ "\n" + |
+ "cr.makePublic(Class, []);"); |
+ } |
+ |
+ public void testCrMakePublicRequiresExportedMethodToBeDeclared() throws Exception { |
+ test( |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "Class.prototype = {\n" + |
+ "}\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);", null, |
+ ChromePass.CR_MAKE_PUBLIC_MISSED_DECLARATION); |
+ } |
+ |
+ public void testCrMakePublicWorksOnOneMethodDefinedDirectlyOnPrototype() throws Exception { |
+ test( |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.prototype.method_ = function() {};\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);", |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.prototype.method_ = function() {};\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.method;\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);"); |
+ } |
+ |
+ public void testCrMakePublicWorksOnDummyDeclaration() throws Exception { |
+ test( |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.prototype.method_;\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);", |
+ "/** @constructor */\n" + |
+ "function Class() {}\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.prototype.method_;\n" + |
+ "\n" + |
+ "/** @return {number} */\n" + |
+ "Class.method;\n" + |
+ "\n" + |
+ "cr.makePublic(Class, ['method']);"); |
+ } |
+ |
+ public void testCrMakePublicReportsInvalidSecondArgumentMissing() throws Exception { |
+ test( |
+ "cr.makePublic(Class);", null, |
+ ChromePass.CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT); |
+ } |
+ |
+ public void testCrMakePublicReportsInvalidSecondArgumentNotAnArray() throws Exception { |
+ test( |
+ "cr.makePublic(Class, 42);", null, |
+ ChromePass.CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT); |
+ } |
+ |
+ public void testCrMakePublicReportsInvalidSecondArgumentArrayWithNotAString() throws Exception { |
+ test( |
+ "cr.makePublic(Class, [42]);", null, |
+ ChromePass.CR_MAKE_PUBLIC_INVALID_SECOND_ARGUMENT); |
+ } |
+ |
} |