/* * Copyright 2013 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 com.google.javascript.jscomp.CompilerOptions.LanguageMode; /** * Unit test for the Compiler DisambiguatPrivateeProperties pass. * * @author johnlenz@google.com (John Lenz) */ public final class DisambiguatePrivatePropertiesTest extends CompilerTestCase { private boolean useGoogleCodingConvention = true; @Override protected CompilerPass getProcessor(Compiler compiler) { return new DisambiguatePrivateProperties(compiler); } @Override protected CodingConvention getCodingConvention() { if (useGoogleCodingConvention) { return new GoogleCodingConvention(); } else { return new ClosureCodingConvention(); } } @Override protected int getNumRepetitions() { return 1; } @Override protected void setUp() throws Exception { useGoogleCodingConvention = true; } public void testNoRenaming1() { useGoogleCodingConvention = true; // Not variables testSame("var x_"); // Not standard props testSame("x.prop"); // Not annotated props (we don't use type information) testSame("var x = {};\n/** @private */ x.prop;"); // Not quoted props testSame("({})['prop_'];"); testSame("({'prop_': 1});"); testSame("({get 'prop_'(){ return 1} });"); testSame("({set 'prop_'(a){ this.a = 1} });"); useGoogleCodingConvention = false; // Not when the coding convention doesn't understand it. testSame("({}).prop_;"); testSame("({prop_: 1});"); testSame("({get prop_(){ return 1} });"); testSame("({set prop_(a){ this.a = 1} });"); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); testSame("({prop_(){ return 1} });"); testSame("class A{method_(){return 1} }"); } public void testRenaming1() { useGoogleCodingConvention = true; test( "({}).prop_;", "({}).prop_$0;"); test( "({prop_: 1});", "({prop_$0: 1});"); test( "({get prop_(){ return 1} });", "({get prop_$0(){ return 1} });"); test( "({set prop_(a){ this.a = 1} });", "({set prop_$0(a){ this.a = 1} });"); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); test( "({prop_(){ return 1} });", "({prop_$0(){ return 1} });"); test( "class A{method_(){return 1} }", "class A{method_$0(){return 1} }"); } public void testNoRenameIndirectProps() { useGoogleCodingConvention = true; testSame("({}).superClass_;"); testSame("({superClass_: 1});"); testSame("({get superClass_(){ return 1} });"); testSame("({set superClass_(a){this.a = 1} });"); setAcceptedLanguage(LanguageMode.ECMASCRIPT_2015); testSame("({superClass_(){ return 1} });"); } }