/* * Copyright 2009 Google Inc. * * 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.jstestdriver.coverage; import java.util.Collections; import org.joda.time.Instant; import junit.framework.TestCase; import com.google.common.collect.Sets; import com.google.jstestdriver.FileInfo; import com.google.jstestdriver.Time; /** * @author corbinrsmith@gmail.com (Cory Smith) */ public class CoverageInstrumentingProcessorTest extends TestCase { public void testInstrument() throws Exception { FileInfo fileInfo = new FileInfo("foo.js", 0, -1, true, false, "var a = 1;", "foo.js"); String expected = "decorated"; Code code = new Code(fileInfo.getFilePath(), fileInfo.getData()); CoverageAccumulator accumulator = new CoverageAccumulator(); final Instant instant = new Instant(System.currentTimeMillis()); FileInfo decorated = new CoverageInstrumentingProcessor(new DecoratorStub(expected, code), Collections.<String>emptySet(), accumulator, new Time() { public Instant now() { return instant; } }).process(fileInfo); assertEquals(expected, decorated.getData()); assertEquals(fileInfo.getFilePath(), decorated.getFilePath()); assertEquals(instant.getMillis(), decorated.getTimestamp()); assertEquals(fileInfo.isServeOnly(), decorated.isServeOnly()); } public void testSkipInstrument() throws Exception { FileInfo lcov = new FileInfo("LCOV.js", 0, -1, true, false, "var a = 1;", "LCOV.js"); FileInfo serveOnly = new FileInfo("someData.dat", 0, -1, true, true, "scally{wag}", "someData.dat"); FileInfo excluded = new FileInfo("excluded.dat", 0, -1, true, false, "not{me}", "excluded.dat"); FileInfo remote = new FileInfo("https://foobar", 0, -1, true, false, null, "https://foobar"); FileInfo empty = new FileInfo("foobar.js", 0, -1, true, false, "\n", "foobar.js"); CoverageInstrumentingProcessor processor = new CoverageInstrumentingProcessor(null, Sets.<String>newHashSet(excluded.getFilePath()), null, null); assertSame(lcov, processor.process(lcov)); assertSame(serveOnly, processor.process(serveOnly)); assertSame(remote, processor.process(remote)); assertSame(excluded, processor.process(excluded)); assertSame(empty, processor.process(empty)); } static class DecoratorStub extends CodeInstrumentor { private final String decorated; private final Code expectedCode; public DecoratorStub(String decorated, Code expectedCode) { super(null); this.decorated = decorated; this.expectedCode = expectedCode; } @Override public InstrumentedCode instrument(Code code) { assertEquals(expectedCode, code); return new InstrumentedCode(-1, "", Collections.<Integer>emptyList(), decorated); } } }