| /* |
| * Copyright 2014 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.gwt.dev.js; |
| |
| import com.google.gwt.core.ext.UnableToCompleteException; |
| import com.google.gwt.core.ext.linker.impl.NamedRange; |
| import com.google.gwt.dev.cfg.BindingProperty; |
| import com.google.gwt.dev.cfg.ConditionNone; |
| import com.google.gwt.dev.cfg.ConfigurationProperty; |
| import com.google.gwt.dev.jjs.impl.FullCompileTestBase; |
| import com.google.gwt.dev.util.DefaultTextOutput; |
| import com.google.gwt.dev.util.TextOutput; |
| import com.google.gwt.thirdparty.guava.common.collect.Maps; |
| |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * Tests for JsToStringGenerationVisitor. |
| */ |
| public class JsToStringGenerationVisitorTest extends FullCompileTestBase { |
| |
| // Compilation Configuration Properties. |
| @Override |
| public void setUp() throws Exception { |
| // Compilation Configuration Properties. |
| BindingProperty stackMode = new BindingProperty("compiler.stackMode"); |
| stackMode.addDefinedValue(new ConditionNone(), "STRIP"); |
| setProperties(new BindingProperty[] {stackMode}, new String[] {"STRIP"}, |
| new ConfigurationProperty[] {}); |
| super.setUp(); |
| } |
| |
| public void testClassRangeMarking() throws UnableToCompleteException { |
| // Prepares the EntryPoint class to compile. |
| StringBuilder code = new StringBuilder(); |
| code.append("package test;\n"); |
| code.append("public class EntryPoint {\n"); |
| code.append(" public interface SomeInterface {}\n"); |
| code.append(" public static void onModuleLoad() {}\n"); |
| code.append("}\n"); |
| |
| // Compiles EntryPoint to JS. |
| compileSnippetToJS(code.toString()); |
| TextOutput text = new DefaultTextOutput(true); |
| JsSourceGenerationVisitor jsSourceGenerationVisitor = new JsSourceGenerationVisitor(text); |
| jsSourceGenerationVisitor.accept(jsProgram); |
| |
| // Verifies that the EntryPoint class, SomeInterface interface and some other classes were |
| // delimited in the output by getClassRanges(). |
| List<NamedRange> classRanges = jsSourceGenerationVisitor.getClassRanges(); |
| Map<String, NamedRange> classRangesByName = Maps.newHashMap(); |
| for (NamedRange classRange : classRanges) { |
| classRangesByName.put(classRange.getName(), classRange); |
| } |
| assertTrue(classRangesByName.containsKey("test.EntryPoint")); |
| assertTrue(classRangesByName.containsKey("test.EntryPoint$SomeInterface")); |
| assertTrue(classRangesByName.size() > 2); |
| |
| NamedRange programClassRange = jsSourceGenerationVisitor.getProgramClassRange(); |
| // Verifies there is a preamble before the program class range. |
| assertTrue(programClassRange.getStartPosition() > 0); |
| // Verifies there is an epilogue after the program class range. |
| assertTrue(programClassRange.getEndPosition() < text.getPosition()); |
| } |
| |
| @Override |
| protected void optimizeJava() { |
| } |
| } |