Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(73)

Unified Diff: editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/html/HtmlAnalyzeHelperTest.java

Issue 11348291: Analyze Dart scripts in HTML files. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Analyze in builder thread Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/html/HtmlAnalyzeHelperTest.java
diff --git a/editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/html/HtmlAnalyzeHelperTest.java b/editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/html/HtmlAnalyzeHelperTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..31712feea1306652893c21456cb04e9d059daa9f
--- /dev/null
+++ b/editor/tools/plugins/com.google.dart.tools.core_test/src/com/google/dart/tools/core/html/HtmlAnalyzeHelperTest.java
@@ -0,0 +1,144 @@
+package com.google.dart.tools.core.html;
+
+import com.google.common.base.Joiner;
+import com.google.dart.compiler.ErrorCode;
+import com.google.dart.compiler.resolver.TypeErrorCode;
+import com.google.dart.tools.core.DartCore;
+import com.google.dart.tools.core.test.AbstractDartCoreTest;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+
+import static org.fest.assertions.Assertions.assertThat;
+
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Test for {@link HtmlAnalyzeHelper}.
+ */
+public class HtmlAnalyzeHelperTest extends AbstractDartCoreTest {
+ private static final long ONE_MINUTE_MS = 1 * 60 * 1000;
+
+ private static void assertMarker(IMarker marker, TypeErrorCode expectedErrorCode,
+ int expectedLine, int expectedOffset, int expectedLength) throws CoreException {
+ assertSame(expectedErrorCode, getMarkerErrorCode(marker));
+ assertEquals(expectedLine, marker.getAttribute(IMarker.LINE_NUMBER));
+ int offset = (Integer) marker.getAttribute(IMarker.CHAR_START);
+ int length = (Integer) marker.getAttribute(IMarker.CHAR_END) - offset;
+ assertEquals(expectedOffset, offset);
+ assertEquals(expectedLength, length);
+ }
+
+ /**
+ * @return the {@link ErrorCode} from {@link IMarker}.
+ */
+ private static ErrorCode getMarkerErrorCode(IMarker marker) {
+ String qualifiedName = marker.getAttribute("errorCode", (String) null);
+ if (qualifiedName == null) {
+ return null;
+ }
+ assertThat(qualifiedName).isNotNull();
+ return ErrorCode.Helper.forQualifiedName(qualifiedName);
+ }
+
+ private static IMarker[] waitForMarkers(IResource resource) throws Exception {
+ long start = System.currentTimeMillis();
+ while (true) {
+ if (System.currentTimeMillis() - start > ONE_MINUTE_MS) {
+ throw new TimeoutException();
+ }
+ IMarker[] markers = resource.findMarkers(DartCore.DART_PROBLEM_MARKER_TYPE, false, 0);
+ if (markers.length > 0) {
+ boolean allMarkersHasMessage = true;
+ for (IMarker marker : markers) {
+ allMarkersHasMessage &= marker.getAttribute(IMarker.MESSAGE) != null;
+ }
+ if (allMarkersHasMessage) {
+ return markers;
+ }
+ }
+ Thread.yield();
+ }
+ }
+
+ /**
+ * Test that when we analyze HTML file we add markers and place them at correct positions.
+ */
+ public void test_addMarkers() throws Exception {
+ String source = Joiner.on("\n").join(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "<html>",
+ " <body>",
+ " <script type='application/dart'>",
+ "main() {",
+ " int v = '123';",
+ "}",
+ " </script>",
+ " </body>",
+ "</html>",
+ "");
+ IFile htmlFile = testProject.setFileContent("Test.html", source);
+ // notify HtmlAnalyzeHelper
+ HtmlAnalyzeHelper.analyze(htmlFile);
+ // prepare single marker
+ IMarker marker;
+ {
+ IMarker[] markers = waitForMarkers(htmlFile);
+ assertThat(markers).hasSize(1);
+ marker = markers[0];
+ }
+ // validate marker
+ {
+ TypeErrorCode expectedErrorCode = TypeErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE;
+ int expectedLine = 6;
+ int expectedOffset = source.indexOf("'123'");
+ int expectedLength = "'123'".length();
+ assertMarker(marker, expectedErrorCode, expectedLine, expectedOffset, expectedLength);
+ }
+ }
+
+ /**
+ * Test that Dart scripts in HTML can reference other Dart code using relative path.
+ */
+ public void test_importLibrary() throws Exception {
+ setTestUnitContent(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "library Test;",
+ "class MyClass {}",
+ "");
+ String source = Joiner.on("\n").join(
+ "// filler filler filler filler filler filler filler filler filler filler",
+ "<html>",
+ " <body>",
+ " <script type='application/dart'>",
+ "import 'Test.dart';",
+ "main() {",
+ " new MyClass();",
+ " int v = '123';",
+ "}",
+ " </script>",
+ " </body>",
+ "</html>",
+ "");
+ IFile htmlFile = testProject.setFileContent("Test.html", source);
+ // notify HtmlAnalyzeHelper
+ HtmlAnalyzeHelper.analyze(htmlFile);
+ // prepare single marker
+ IMarker marker;
+ {
+ IMarker[] markers = waitForMarkers(htmlFile);
+ assertThat(markers).hasSize(1);
+ marker = markers[0];
+ }
+ // we need marker here just as indicator that analysis was finished
+ {
+ TypeErrorCode expectedErrorCode = TypeErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE;
+ int expectedLine = 8;
+ int expectedOffset = source.indexOf("'123'");
+ int expectedLength = "'123'".length();
+ assertMarker(marker, expectedErrorCode, expectedLine, expectedOffset, expectedLength);
+ }
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698