/*
* Copyright 2015 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.lint;
import com.google.javascript.jscomp.CheckLevel;
import com.google.javascript.jscomp.Compiler;
import com.google.javascript.jscomp.CompilerOptions;
import com.google.javascript.jscomp.CompilerPass;
import com.google.javascript.jscomp.DiagnosticGroups;
import com.google.javascript.jscomp.TypeICompilerTestCase;
/**
* Test case for {@link CheckArrayWithGoogObject}.
*
*/
public final class CheckArrayWithGoogObjectTest extends TypeICompilerTestCase {
private static final String GOOG_OBJECT = LINE_JOINER.join(
"var goog = {};",
"goog.object = {};",
"goog.object.forEach = function(obj, f, opt_this) {}");
@Override
protected CompilerPass getProcessor(Compiler compiler) {
return new CheckArrayWithGoogObject(compiler);
}
@Override
protected CompilerOptions getOptions(CompilerOptions options) {
super.getOptions(options);
options.setWarningLevel(DiagnosticGroups.LINT_CHECKS, CheckLevel.WARNING);
return options;
}
public void testGoogObjectForEach1() {
testGoogObjectWarning(LINE_JOINER.join(
GOOG_OBJECT,
"var arr = [1, 2, 3];",
"goog.object.forEach(arr, alert);"));
}
public void testGoogObjectForEach2() {
testGoogObjectWarning(LINE_JOINER.join(
GOOG_OBJECT,
"function f(/** Array<number>|number */ n) {",
" if (typeof n == 'number')",
" alert(n);",
" else",
" goog.object.forEach(n, alert);",
"}"));
}
public void testGoogObjectForEach3() {
testGoogObjectWarning(LINE_JOINER.join(
GOOG_OBJECT,
"function f(/** !Array<number> */ arr) {",
" goog.object.forEach(arr, alert);",
"}"));
}
public void testGoogObjectForEach4() {
testNoGoogObjectWarning(LINE_JOINER.join(
GOOG_OBJECT,
"function f(/** Object<string, number> */ obj) {",
" goog.object.forEach(obj, alert);",
"}"));
}
private void testGoogObjectWarning(String js) {
testSame(DEFAULT_EXTERNS, js, CheckArrayWithGoogObject.ARRAY_PASSED_TO_GOOG_OBJECT);
}
private void testNoGoogObjectWarning(String js) {
testSame(DEFAULT_EXTERNS, js, null);
}
}