diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
index 743c682..bf36646 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkIntegrationTest.java
@@ -323,7 +323,7 @@
                 "\tFile \"/workspace/test/skylark/functions.bzl\", line 2, in first",
                 "\t\tsecond(a, b)",
                 "\tFile \"/workspace/test/skylark/functions.bzl\", line 5, in second",
-                "\t\tthird('legal')",
+                "\t\tthird(\"legal\")",
                 "\tFile \"/workspace/test/skylark/functions.bzl\", line 7, in third",
                 errorMessage);
     scratch.file(
@@ -756,7 +756,7 @@
             target.getProvider(FileProvider.class).getFilesToBuild()))
         .containsExactly("foo.txt");
   }
-  
+
   @Test
   public void testRuleClassImplicitOutputs() throws Exception {
     scratch.file(
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
index 6f19044..71e9cec 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
@@ -185,8 +185,8 @@
 
   @Test
   public void testToString() throws Exception {
-    update("subject", new StringLiteral("Hello, 'world'.", '\''));
-    update("from", new StringLiteral("Java", '"'));
+    update("subject", new StringLiteral("Hello, 'world'."));
+    update("from", new StringLiteral("Java"));
     assertThat(getEnvironment().toString()).isEqualTo("<Environment[test]>");
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index 4a71755..f217591 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -521,7 +521,7 @@
   public void testDictComprehensions_ToString() throws Exception {
     assertEquals("{x: x for x in [1, 2]}",
         parseExpression("{x : x for x in [1, 2]}").toString());
-    assertEquals("{x + 'a': x for x in [1, 2]}",
+    assertEquals("{x + \"a\": x for x in [1, 2]}",
         parseExpression("{x + 'a' : x for x in [1, 2]}").toString());
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
index 17599d7..55867c6 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java
@@ -363,7 +363,7 @@
                 + LINE_SEPARATOR
                 + "\tFile \"\", line 7, in bar"
                 + LINE_SEPARATOR
-                + "\t\t'test'.index(x)",
+                + "\t\t\"test\".index(x)",
             "def foo():",
             "  bar(1)",
             "def bar(x):",
@@ -421,7 +421,7 @@
                 + LINE_SEPARATOR
                 + "\tFile \"\", line 5, in bar"
                 + LINE_SEPARATOR
-                + "\t\t'test'.index(x)"
+                + "\t\t\"test\".index(x)"
                 + LINE_SEPARATOR
                 + "method string.index(sub: string, start: int, end: int or NoneType) "
                 + "is not applicable "
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
index 43f6bcf..db96a9d 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ParserTest.java
@@ -224,7 +224,7 @@
   @Test
   public void testStringLiteralOptimizationToString() throws Exception {
     StringLiteral l = (StringLiteral) parseExpression("'abc' + 'def'");
-    assertEquals("'abcdef'", l.toString());
+    assertEquals("\"abcdef\"", l.toString());
   }
 
   @Test
@@ -236,7 +236,9 @@
 
   @Test
   public void testStringLiteralOptimizationDifferentQuote() throws Exception {
-    assertThat(parseExpression("'abc' + \"def\"")).isInstanceOf(BinaryOperatorExpression.class);
+    StringLiteral l = (StringLiteral) parseExpression("'abc' + \"def\"");
+    assertEquals(0, l.getLocation().getStartOffset());
+    assertEquals(13, l.getLocation().getEndOffset());
   }
 
   @Test
@@ -443,8 +445,8 @@
     assertEquals("[x[1::2]\n]", parseFile("x[1::2]").toString());
     assertEquals("[x[1:]\n]", parseFile("x[1:]").toString());
     assertEquals("[str[42]\n]", parseFile("str[42]").toString());
-    assertEquals("[ctx.new_file('hello')\n]", parseFile("ctx.new_file('hello')").toString());
-    assertEquals("[new_file('hello')\n]", parseFile("new_file('hello')").toString());
+    assertEquals("[ctx.new_file(\"hello\")\n]", parseFile("ctx.new_file('hello')").toString());
+    assertEquals("[new_file(\"hello\")\n]", parseFile("new_file(\"hello\")").toString());
   }
 
   @Test
@@ -1044,7 +1046,7 @@
 
     Label containingFileLabel = Label.parseAbsoluteUnchecked(containingFileLabelString);
     assertThat(imp.getLabel(containingFileLabel)).named("containingFileLabel()")
-        .isEqualTo(Label.parseAbsoluteUnchecked(expectedLabelString)); 
+        .isEqualTo(Label.parseAbsoluteUnchecked(expectedLabelString));
 
     int startOffset = stmt.getImport().getLocation().getStartOffset();
     int endOffset = stmt.getImport().getLocation().getEndOffset();
@@ -1055,7 +1057,7 @@
 
   private void invalidImportTest(String importString, String expectedMsg) {
     setFailFast(false);
-    parseFileForSkylark("load('" + importString + "', 'fun_test')\n"); 
+    parseFileForSkylark("load('" + importString + "', 'fun_test')\n");
     assertContainsError(expectedMsg);
   }
 
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
index 2e4ae53..85a8f8c 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java
@@ -35,7 +35,7 @@
 
   @Test
   public void testAssignmentNotValidLValue() {
-    checkError("cannot assign to ''a''", "'a' = 1");
+    checkError("cannot assign to '\"a\"'", "'a' = 1");
   }
 
   @Test
