Skip to content

Commit 58ee9a9

Browse files
committed
[GR-23265] Make test_traceback.test_encoded_file pass
PullRequest: graalpython/1076
2 parents fc3a29a + a0b53c0 commit 58ee9a9

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_traceback.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_bad_indentation
4848
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_base_exception
4949
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_caret
50+
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_encoded_file
5051
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_format_exception_only_bad__str__
5152
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_nocaret
5253
*graalpython.lib-python.3.test.test_traceback.TracebackCases.test_print_exception

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/PythonFileDetector.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public final class PythonFileDetector implements TruffleFile.FileTypeDetector {
5858

5959
private static final String UTF_8_BOM_IN_LATIN_1 = new String(new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF}, StandardCharsets.ISO_8859_1);
6060
private static final Pattern ENCODING_COMMENT = Pattern.compile("^[ \t\f]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+).*");
61+
private static final Pattern BLANK_LINE = Pattern.compile("^[ \t\f]*(?:#.*)?");
6162

6263
@Override
6364
public String findMimeType(TruffleFile file) throws IOException {
@@ -106,19 +107,23 @@ private static Charset tryGetCharsetFromLine(String line, boolean hasBOM) {
106107

107108
@TruffleBoundary
108109
public static Charset findEncodingStrict(BufferedReader reader) throws IOException {
109-
Charset charset;
110110
// Read first two lines like CPython
111111
String firstLine = reader.readLine();
112-
boolean hasBOM = false;
113-
if (firstLine != null && firstLine.startsWith(UTF_8_BOM_IN_LATIN_1)) {
114-
hasBOM = true;
115-
firstLine = firstLine.substring(UTF_8_BOM_IN_LATIN_1.length());
116-
}
117-
if ((charset = tryGetCharsetFromLine(firstLine, hasBOM)) != null) {
118-
return charset;
119-
}
120-
if ((charset = tryGetCharsetFromLine(reader.readLine(), hasBOM)) != null) {
121-
return charset;
112+
if (firstLine != null) {
113+
boolean hasBOM = false;
114+
if (firstLine.startsWith(UTF_8_BOM_IN_LATIN_1)) {
115+
hasBOM = true;
116+
firstLine = firstLine.substring(UTF_8_BOM_IN_LATIN_1.length());
117+
}
118+
Charset charset;
119+
if ((charset = tryGetCharsetFromLine(firstLine, hasBOM)) != null) {
120+
return charset;
121+
}
122+
if (BLANK_LINE.matcher(firstLine).matches()) {
123+
if ((charset = tryGetCharsetFromLine(reader.readLine(), hasBOM)) != null) {
124+
return charset;
125+
}
126+
}
122127
}
123128
return StandardCharsets.UTF_8;
124129
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/PosixSubprocessModuleBuiltins.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,10 @@ private synchronized int forkExec(PList args, @SuppressWarnings("unused") PList
175175
pb.redirectError(Redirect.INHERIT);
176176
}
177177

178+
if (errwrite == c2pwrite) {
179+
pb.redirectErrorStream(true);
180+
}
181+
178182
try {
179183
if (getContext().getEnv().getPublicTruffleFile(cwd).exists()) {
180184
pb.directory(new File(cwd));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/parser/PythonParserImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public final class PythonParserImpl implements PythonParser, PythonCodeSerialize
7979
private long numberOfFiles = 0;
8080
private static final boolean IN_IMAGE_BUILD_TIME = ImageInfo.inImageBuildtimeCode();
8181

82-
private static final Pattern START_INDENT_REGEX = Pattern.compile("^([ \t]+)[^#\r\n\f]");
82+
private static final Pattern START_INDENT_REGEX = Pattern.compile("^([ \t]+)[^#\r\n\f\t ]");
8383

8484
public static final DescriptiveBailErrorListener ERROR_LISTENER = new DescriptiveBailErrorListener();
8585

0 commit comments

Comments
 (0)