Chromium Code Reviews| 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..7c096b155e31bc72b0e294b35b274e571c4febbb 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" + |
| + "Class = function() {};\n" + |
|
Dan Beam
2014/09/10 19:26:27
why are you doing this with global assignment rath
Vitaly Pavlenko
2014/09/10 20:25:21
Done.
|
| + "\n" + |
| + "Class.prototype = {\n" + |
| + " /** @return {number} */\n" + |
|
Dan Beam
2014/09/10 19:26:27
@private?
Vitaly Pavlenko
2014/09/10 20:25:21
You mean, we should remove @private declaration fr
|
| + " method_: function() { return 42; }\n" + |
| + "};\n" + |
| + "\n" + |
| + "cr.makePublic(Class, ['method']);", |
| + "/** @constructor */\n" + |
| + "Class = function() {};\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" + |
| + "Class = function() {}\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" + |
| + "Class = function() {}\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" + |
| + "Class = function() {}\n" + |
|
Dan Beam
2014/09/10 19:26:27
ident off
Vitaly Pavlenko
2014/09/10 20:25:21
Done.
|
| + "\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" + |
| + "Class = function() {}\n" + |
| + "\n" + |
| + "Class.prototype = {\n" + |
| + " method_: function() {}\n" + |
| + "}\n" + |
| + "\n" + |
| + "cr.makePublic(Class, []);", |
| + "/** @constructor */\n" + |
| + "Class = function() {}\n" + |
| + "\n" + |
| + "Class.prototype = {\n" + |
| + " method_: function() {}\n" + |
| + "}\n" + |
| + "\n" + |
| + "cr.makePublic(Class, []);"); |
| + } |
| + |
| + public void testCrMakePublicRequiresExportedMethodToBeDeclared() throws Exception { |
| + test( |
| + "/** @constructor */\n" + |
| + "Class = function() {}\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" + |
| + "Class = function() {}\n" + |
| + "\n" + |
| + "/** @return {number} */\n" + |
| + "Class.prototype.method_ = function() {};\n" + |
| + "\n" + |
| + "cr.makePublic(Class, ['method']);", |
| + "/** @constructor */\n" + |
| + "Class = function() {}\n" + |
| + "\n" + |
| + "/** @return {number} */\n" + |
| + "Class.prototype.method_ = function() {};\n" + |
| + "\n" + |
| + "/** @return {number} */\n" + |
| + "Class.method;\n" + |
| + "\n" + |
| + "cr.makePublic(Class, ['method']);"); |
| + } |
| + |
|
Dan Beam
2014/09/10 19:26:27
what about the case of:
function Class() {
Vitaly Pavlenko
2014/09/10 20:25:21
Looks like there's no such case right now in Chrom
Dan Beam
2014/09/12 00:57:51
that's fine
Vitaly Pavlenko
2014/09/12 18:38:07
Acknowledged.
|
| + public void testCrMakePublicWorksOnDummyDeclaration() throws Exception { |
| + test( |
| + "/** @constructor */\n" + |
| + "Class = function() {}\n" + |
| + "\n" + |
| + "/** @return {number} */\n" + |
| + "Class.prototype.method_;\n" + |
| + "\n" + |
| + "cr.makePublic(Class, ['method']);", |
| + "/** @constructor */\n" + |
| + "Class = function() {}\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); |
| + } |
| + |
| } |