| /* |
| * Copyright 2011 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.editor.client.testing; |
| |
| import com.google.gwt.editor.client.EditorContext; |
| import com.google.gwt.editor.client.EditorDriver; |
| import com.google.gwt.editor.client.EditorVisitor; |
| |
| /** |
| * A utility class that creates a string representation of an Editor hierarchy |
| * for testing purposes. |
| */ |
| public final class EditorHierarchyPrinter extends EditorVisitor { |
| private static final String INDENT = " "; |
| private static final String SPACE = " "; |
| |
| /** |
| * Produce a string representation of the Editor hierarchy being controlled by |
| * {@code driver}. |
| */ |
| public static String toString(EditorDriver<?> driver) { |
| StringBuilder sb = new StringBuilder(); |
| driver.accept(new EditorHierarchyPrinter(sb)); |
| return sb.toString(); |
| } |
| |
| private int level = 0; |
| private final StringBuilder sb; |
| |
| private EditorHierarchyPrinter(StringBuilder out) { |
| this.sb = out; |
| } |
| |
| @Override |
| public <T> void endVisit(EditorContext<T> ctx) { |
| level--; |
| } |
| |
| @Override |
| public <T> boolean visit(EditorContext<T> ctx) { |
| println(ctx.getAbsolutePath()); |
| data(ctx.getEditedType().getName()); |
| data(ctx.getEditor().getClass().getName()); |
| data("Implements: " // |
| + ctx.asCompositeEditor() == null ? "" : "CompositeEditor " // |
| + ctx.asHasEditorDelegate() == null ? "" : "HasEditorDelegate " // |
| + ctx.asHasEditorErrors() == null ? "" : "HasEditorErrors " // |
| + ctx.asLeafValueEditor() == null ? "" : "LeafValueEditor " // |
| + ctx.asValueAwareEditor() == null ? "" : "ValueAwareEditor "); |
| level++; |
| return true; |
| } |
| |
| private void data(String msg) { |
| println(SPACE + msg); |
| } |
| |
| private void println(String msg) { |
| for (int i = 0; i < level; i++) { |
| sb.append(INDENT); |
| } |
| sb.append(msg); |
| sb.append("\n"); |
| } |
| } |