/* * Copyright 2016 The Closure Compiler Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.javascript.jscomp; import static com.google.javascript.jscomp.CheckAccessControls.BAD_PRIVATE_PROPERTY_ACCESS; /** * Integration test to check that {@link PolymerPass} and {@link CheckAccessControls} work together * as expected. */ public final class CheckAccessControlsPolymerTest extends TypeICompilerTestCase { private static final String EXTERNS = LINE_JOINER.join( CompilerTypeTestCase.DEFAULT_EXTERNS, "var Polymer = function(descriptor) {};", "/** @constructor */", "var PolymerElement = function() {};"); public CheckAccessControlsPolymerTest() { super(EXTERNS); parseTypeInfo = true; enablePolymerPass(); allowExternsChanges(true); } @Override protected int getNumRepetitions() { return 1; } @Override protected CompilerPass getProcessor(final Compiler compiler) { return new CheckAccessControls(compiler, true); } @Override protected CompilerOptions getOptions() { CompilerOptions options = super.getOptions(); options.setWarningLevel(DiagnosticGroups.ACCESS_CONTROLS, CheckLevel.ERROR); options.setWarningLevel(DiagnosticGroups.CONSTANT_PROPERTY, CheckLevel.ERROR); return options; } public void testPrivateMethodInElement() { testNoWarning(LINE_JOINER.join( "var AnElement = Polymer({", " is: 'an-element',", "", " /** @private */", " foo_: function() {},", " bar: function() { this.foo_(); },", "});")); } public void testPrivateMethodInBehavior() { testNoWarning(new String[] { LINE_JOINER.join( "/** @polymerBehavior */", "var Behavior = {", " /** @private */", " foo_: function() {},", " bar: function() { this.foo_(); },", "};"), LINE_JOINER.join( "var AnElement = Polymer({", " is: 'an-element',", " behaviors: [Behavior],", "});") }); } public void testPrivateMethodFromBehaviorUsedInElement() { testError(new String[] { LINE_JOINER.join( "/** @polymerBehavior */", "var Behavior = {", " /** @private */", " foo_: function() {},", "};"), LINE_JOINER.join( "var AnElement = Polymer({", " is: 'an-element',", " behaviors: [Behavior],", " bar: function() { this.foo_(); },", "});") }, BAD_PRIVATE_PROPERTY_ACCESS); } public void testPrivatePropertyInBehavior() { testNoWarning(new String[] { LINE_JOINER.join( "/** @polymerBehavior */", "var Behavior = {", " /** @private */", " foo_: 'foo',", " bar: function() { alert(this.foo_); },", "};"), LINE_JOINER.join( "var AnElement = Polymer({", " is: 'an-element',", " behaviors: [Behavior],", "});") }); } public void testPrivatePropertyFromBehaviorUsedInElement() { testError(new String[] { LINE_JOINER.join( "/** @polymerBehavior */", "var Behavior = {", " /** @private */", " foo_: 'foo',", "};"), LINE_JOINER.join( "var AnElement = Polymer({", " is: 'an-element',", " behaviors: [Behavior],", " bar: function() { alert(this.foo_); },", "});") }, BAD_PRIVATE_PROPERTY_ACCESS); } }