@@ -6,7 +6,7 @@ import { anything, instance, mock, when } from 'ts-mockito';
6
6
import { Uri } from 'vscode' ;
7
7
import { WorkspaceService } from '../../client/common/application/workspace' ;
8
8
import { IS_WINDOWS } from '../../client/common/platform/constants' ;
9
- import { expandWorkingDir } from '../../client/datascience/jupyter/jupyterUtils' ;
9
+ import { expandWorkingDir , modifyTraceback } from '../../client/datascience/jupyter/jupyterUtils' ;
10
10
11
11
suite ( 'Data Science JupyterUtils' , ( ) => {
12
12
const workspaceService = mock ( WorkspaceService ) ;
@@ -33,4 +33,45 @@ suite('Data Science JupyterUtils', () => {
33
33
assert . equal ( expandWorkingDir ( '${workspaceFolder}' , 'test/xyz/bip/foo.baz' , inst ) , Uri . file ( 'test/bar' ) . fsPath ) ;
34
34
assert . equal ( expandWorkingDir ( '${cwd}-${file}' , 'bar/bip/foo.baz' , inst ) , `${ Uri . file ( 'test/bar' ) . fsPath } -${ Uri . file ( 'bar/bip/foo.baz' ) . fsPath } ` ) ;
35
35
} ) ;
36
+
37
+ test ( 'modifying traceback' , ( ) => {
38
+ const trace1 = [
39
+ '"\u001b[1;36m File \u001b[1;32m"<ipython-input-2-940d61ce6e42>"\u001b[1;36m, line \u001b[1;32m599999\u001b[0m\n\u001b[1;33m sys.\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"'
40
+ ] ;
41
+ const after1 = [
42
+ `"\u001b[1;36m File \u001b[1;32m"footastic.py"\u001b[1;36m, line \u001b[1;32m<a href='file://foo.py?line=600001'>600002</a>\u001b[0m\n\u001b[1;33m sys.\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"`
43
+ ] ;
44
+ const file1 = 'foo.py' ;
45
+ // Use a join after to make the assert show the results
46
+ assert . equal ( after1 . join ( '\n' ) , modifyTraceback ( file1 , 'footastic.py' , 2 , trace1 ) . join ( '\n' ) , 'Syntax error failure' ) ;
47
+ const trace2 = [
48
+ '\u001b[1;31m---------------------------------------------------------------------------\u001b[0m' ,
49
+ '\u001b[1;31mException\u001b[0m Traceback (most recent call last)' ,
50
+ "\u001b[1;32md:\\Training\\SnakePython\\manualTestFile.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mtrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0.01\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'spam'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m" ,
51
+ '\u001b[1;31mException\u001b[0m: spam'
52
+ ] ;
53
+ const after2 = [
54
+ '\u001b[1;31m---------------------------------------------------------------------------\u001b[0m' ,
55
+ '\u001b[1;31mException\u001b[0m Traceback (most recent call last)' ,
56
+ `\u001b[1;32md:\\Training\\SnakePython\\manualTestFile.py\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m <a href='file://d:\\Training\\SnakePython\\manualTestFile.py?line=23'>24</a>\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mtrange\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m100\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m <a href='file://d:\\Training\\SnakePython\\manualTestFile.py?line=24'>25</a>\u001b[0m \u001b[0mtime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msleep\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m0.01\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> <a href='file://d:\\Training\\SnakePython\\manualTestFile.py?line=25'>26</a>\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mException\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'spam'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m` ,
57
+ '\u001b[1;31mException\u001b[0m: spam'
58
+ ] ;
59
+ const file2 = 'd:\\Training\\SnakePython\\manualTestFile.py' ;
60
+ assert . equal ( after2 . join ( '\n' ) , modifyTraceback ( file2 , file2 , 20 , trace2 ) . join ( '\n' ) , 'Exception failure' ) ;
61
+ const trace3 = [
62
+ '\u001b[0;31m---------------------------------------------------------------------------\u001b[0m' ,
63
+ '\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)' ,
64
+ '\u001b[0;32m~/Test/manualTestFile.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n' ,
65
+ "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'numpy'"
66
+ ] ;
67
+ const after3 = [
68
+ '\u001b[0;31m---------------------------------------------------------------------------\u001b[0m' ,
69
+ '\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)' ,
70
+ "\u001b[0;32m~/Test/manualTestFile.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> <a href='file:///home/rich/Test/manualTestFile.py?line=24'>25</a>\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m <a href='file:///home/rich/Test/manualTestFile.py?line=25'>26</a>\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m <a href='file:///home/rich/Test/manualTestFile.py?line=26'>27</a>\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n" ,
71
+ "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'numpy'"
72
+ ] ;
73
+ const file3 = '/home/rich/Test/manualTestFile.py' ;
74
+ const display3 = '~/Test/manualTestFile.py' ;
75
+ assert . equal ( after3 . join ( '\n' ) , modifyTraceback ( file3 , display3 , 20 , trace3 ) . join ( '\n' ) , 'Exception unix failure' ) ;
76
+ } ) ;
36
77
} ) ;
0 commit comments