@@ -9,7 +9,7 @@ import * as typemoq from 'typemoq';
99import { IFileSystem } from '../../client/common/platform/types' ;
1010import { Identifiers } from '../../client/datascience/constants' ;
1111import { JupyterVariables } from '../../client/datascience/jupyter/jupyterVariables' ;
12- import { CellState , ICell , IHistoryProvider , IJupyterExecution , INotebookServer } from '../../client/datascience/types' ;
12+ import { CellState , ICell , IHistoryProvider , IJupyterExecution , IJupyterVariable , INotebookServer } from '../../client/datascience/types' ;
1313
1414// tslint:disable:no-any max-func-body-length
1515suite ( 'JupyterVariables' , ( ) => {
@@ -19,20 +19,20 @@ suite('JupyterVariables', () => {
1919 let jupyterVariables : JupyterVariables ;
2020 let fileSystem : typemoq . IMock < IFileSystem > ;
2121
22- function generateVariableOutput ( outputData : nbformat . IMimeBundle ) : nbformat . IOutput {
22+ function generateVariableOutput ( outputData : string , outputType : string ) : nbformat . IOutput {
2323 return {
24- output_type : 'execute_result' ,
25- data : outputData
24+ output_type : outputType ,
25+ text : outputData
2626 } ;
2727 }
2828
29- function generateCell ( outputData : nbformat . IMimeBundle , hasOutput : boolean ) : ICell {
29+ function generateCell ( outputData : string , outputType : string , hasOutput : boolean ) : ICell {
3030 return {
3131 data : {
3232 cell_type : 'code' ,
3333 execution_count : 0 ,
3434 metadata : { } ,
35- outputs : hasOutput ? [ generateVariableOutput ( outputData ) ] : [ ] ,
35+ outputs : hasOutput ? [ generateVariableOutput ( outputData , outputType ) ] : [ ] ,
3636 source : ''
3737 } ,
3838 id : '0' ,
@@ -42,8 +42,8 @@ suite('JupyterVariables', () => {
4242 } ;
4343 }
4444
45- function generateCells ( outputData : nbformat . IMimeBundle , hasOutput : boolean = true ) : ICell [ ] {
46- return [ generateCell ( outputData , hasOutput ) ] ;
45+ function generateCells ( outputData : string , outputType : string , hasOutput : boolean = true ) : ICell [ ] {
46+ return [ generateCell ( outputData , outputType , hasOutput ) ] ;
4747 }
4848
4949 function createTypeMoq < T > ( tag : string ) : typemoq . IMock < T > {
@@ -75,7 +75,8 @@ suite('JupyterVariables', () => {
7575
7676 fakeServer . setup ( fs => fs . execute ( typemoq . It . isAny ( ) , typemoq . It . isAny ( ) , typemoq . It . isAny ( ) , typemoq . It . isAny ( ) , undefined , typemoq . It . isAny ( ) ) )
7777 . returns ( ( ) => Promise . resolve ( generateCells (
78- { 'text/plain' : '"[{"name": "big_dataframe", "type": "DataFrame", "size": 62, "expensive": true}, {"name": "big_dict", "type": "dict", "size": 57, "expensive": true}, {"name": "big_list", "type": "list", "size": 57, "expensive": true}, {"name": "big_nparray", "type": "ndarray", "size": 60, "expensive": true}, {"name": "big_string", "type": "str", "size": 59, "expensive": true}, {"name": "getsizeof", "type": "builtin_function_or_method", "size": 58, "expensive": true}, {"name": "json", "type": "module", "size": 53, "expensive": true}, {"name": "notebook", "type": "module", "size": 57, "expensive": true}, {"name": "np", "type": "module", "size": 51, "expensive": true}, {"name": "pd", "type": "module", "size": 51, "expensive": true}, {"name": "plt", "type": "module", "size": 52, "expensive": true}, {"name": "style", "type": "module", "size": 54, "expensive": true}, {"name": "sys", "type": "module", "size": 52, "expensive": true}, {"name": "testing", "type": "str", "size": 56, "expensive": true}, {"name": "textFile", "type": "TextIOWrapper", "size": 57, "expensive": true}, {"name": "value", "type": "int", "size": 66, "expensive": true}]"' }
78+ '[{"name": "big_dataframe", "type": "DataFrame", "size": 62, "expensive": true}, {"name": "big_dict", "type": "dict", "size": 57, "expensive": true}, {"name": "big_float", "type": "float", "size": 58, "expensive": true}, {"name": "big_int", "type": "int", "size": 56, "expensive": true}, {"name": "big_list", "type": "list", "size": 57, "expensive": true}, {"name": "big_nparray", "type": "ndarray", "size": 60, "expensive": true}, {"name": "big_series", "type": "Series", "size": 59, "expensive": true}, {"name": "big_string", "type": "str", "size": 59, "expensive": true}, {"name": "big_tuple", "type": "tuple", "size": 58, "expensive": true}]' ,
79+ 'stream'
7980 ) ) )
8081 . verifiable ( typemoq . Times . never ( ) ) ;
8182
@@ -86,7 +87,6 @@ suite('JupyterVariables', () => {
8687 } ) ;
8788
8889 // No cells, no output, no text/plain
89-
9090 test ( 'getVariables no cells' , async ( ) => {
9191 execution . setup ( sm => sm . getServer ( typemoq . It . isAny ( ) ) ) . returns ( ( ) => {
9292 return Promise . resolve ( fakeServer . object ) ;
@@ -113,7 +113,7 @@ suite('JupyterVariables', () => {
113113 } ) ;
114114
115115 fakeServer . setup ( fs => fs . execute ( typemoq . It . isValue ( 'test' ) , typemoq . It . isValue ( Identifiers . EmptyFileName ) , typemoq . It . isValue ( 0 ) , typemoq . It . isAnyString ( ) , undefined , typemoq . It . isValue ( true ) ) )
116- . returns ( ( ) => Promise . resolve ( generateCells ( { } , false ) ) )
116+ . returns ( ( ) => Promise . resolve ( generateCells ( '' , 'stream' , false ) ) )
117117 . verifiable ( typemoq . Times . once ( ) ) ;
118118
119119 let exceptionThrown = false ;
@@ -127,14 +127,15 @@ suite('JupyterVariables', () => {
127127 fakeServer . verifyAll ( ) ;
128128 } ) ;
129129
130- test ( 'getVariables bad mime ' , async ( ) => {
130+ test ( 'getVariables bad output type ' , async ( ) => {
131131 execution . setup ( sm => sm . getServer ( typemoq . It . isAny ( ) ) ) . returns ( ( ) => {
132132 return Promise . resolve ( fakeServer . object ) ;
133133 } ) ;
134134
135135 fakeServer . setup ( fs => fs . execute ( typemoq . It . isValue ( 'test' ) , typemoq . It . isValue ( Identifiers . EmptyFileName ) , typemoq . It . isValue ( 0 ) , typemoq . It . isAnyString ( ) , undefined , typemoq . It . isValue ( true ) ) )
136136 . returns ( ( ) => Promise . resolve ( generateCells (
137- { 'text/html' : '' }
137+ 'bogus string' ,
138+ 'bogus output type'
138139 ) ) )
139140 . verifiable ( typemoq . Times . once ( ) ) ;
140141
@@ -156,23 +157,46 @@ suite('JupyterVariables', () => {
156157
157158 fakeServer . setup ( fs => fs . execute ( typemoq . It . isValue ( 'test' ) , typemoq . It . isValue ( Identifiers . EmptyFileName ) , typemoq . It . isValue ( 0 ) , typemoq . It . isAnyString ( ) , undefined , typemoq . It . isValue ( true ) ) )
158159 . returns ( ( ) => Promise . resolve ( generateCells (
159- { 'text/plain' : '"[{"name": "big_dataframe", "type": "DataFrame", "size": 62, "expensive": true}, {"name": "big_dict", "type": "dict", "size": 57, "expensive": true}, {"name": "big_list", "type": "list", "size": 57, "expensive": true}, {"name": "big_nparray", "type": "ndarray", "size": 60, "expensive": true}, {"name": "big_string", "type": "str", "size": 59, "expensive": true}, {"name": "getsizeof", "type": "builtin_function_or_method", "size": 58, "expensive": true}, {"name": "json", "type": "module", "size": 53, "expensive": true}, {"name": "notebook", "type": "module", "size": 57, "expensive": true}, {"name": "np", "type": "module", "size": 51, "expensive": true}, {"name": "pd", "type": "module", "size": 51, "expensive": true}, {"name": "plt", "type": "module", "size": 52, "expensive": true}, {"name": "style", "type": "module", "size": 54, "expensive": true}, {"name": "sys", "type": "module", "size": 52, "expensive": true}, {"name": "testing", "type": "str", "size": 56, "expensive": true}, {"name": "textFile", "type": "TextIOWrapper", "size": 57, "expensive": true}, {"name": "value", "type": "int", "size": 66, "expensive": true}]"' }
160+ '[{"name": "big_dataframe", "type": "DataFrame", "size": 62, "expensive": true}, {"name": "big_dict", "type": "dict", "size": 57, "expensive": true}, {"name": "big_int", "type": "int", "size": 56, "expensive": true}, {"name": "big_list", "type": "list", "size": 57, "expensive": true}, {"name": "big_nparray", "type": "ndarray", "size": 60, "expensive": true}, {"name": "big_string", "type": "str", "size": 59, "expensive": true}]' ,
161+ 'stream'
160162 ) ) )
161163 . verifiable ( typemoq . Times . once ( ) ) ;
162164
163165 const results = await jupyterVariables . getVariables ( ) ;
164166
165167 // Check the results that we get back
166- assert . equal ( results . length , 16 ) ;
168+ assert . equal ( results . length , 6 ) ;
167169
168170 // Check our items (just the first few real items, no need to check all 19)
169171 assert . deepEqual ( results [ 0 ] , { name : 'big_dataframe' , size : 62 , type : 'DataFrame' , expensive : true } ) ;
170172 assert . deepEqual ( results [ 1 ] , { name : 'big_dict' , size : 57 , type : 'dict' , expensive : true } ) ;
171- assert . deepEqual ( results [ 2 ] , { name : 'big_list' , size : 57 , type : 'list' , expensive : true } ) ;
172- assert . deepEqual ( results [ 3 ] , { name : 'big_nparray' , size : 60 , type : 'ndarray' , expensive : true } ) ;
173- assert . deepEqual ( results [ 4 ] , { name : 'big_string' , size : 59 , type : 'str' , expensive : true } ) ;
174- assert . deepEqual ( results [ 5 ] , { name : 'getsizeof' , size : 58 , type : 'builtin_function_or_method' , expensive : true } ) ;
173+ assert . deepEqual ( results [ 2 ] , { name : 'big_int' , size : 56 , type : 'int' , expensive : true } ) ;
174+ assert . deepEqual ( results [ 3 ] , { name : 'big_list' , size : 57 , type : 'list' , expensive : true } ) ;
175+ assert . deepEqual ( results [ 4 ] , { name : 'big_nparray' , size : 60 , type : 'ndarray' , expensive : true } ) ;
176+ assert . deepEqual ( results [ 5 ] , { name : 'big_string' , size : 59 , type : 'str' , expensive : true } ) ;
177+
178+ fakeServer . verifyAll ( ) ;
179+ } ) ;
180+
181+ // getValue failure paths are shared with getVariables, so no need to test them here
182+ test ( 'getValue fake data' , async ( ) => {
183+ execution . setup ( sm => sm . getServer ( typemoq . It . isAny ( ) ) ) . returns ( ( ) => {
184+ return Promise . resolve ( fakeServer . object ) ;
185+ } ) ;
186+
187+ fakeServer . setup ( fs => fs . execute ( typemoq . It . isValue ( 'test' ) , typemoq . It . isValue ( Identifiers . EmptyFileName ) , typemoq . It . isValue ( 0 ) , typemoq . It . isAnyString ( ) , undefined , typemoq . It . isValue ( true ) ) )
188+ . returns ( ( ) => Promise . resolve ( generateCells (
189+ '{"name": "big_complex", "type": "complex", "size": 60, "expensive": true, "value": "(1+1j)"}' ,
190+ 'stream'
191+ ) ) )
192+ . verifiable ( typemoq . Times . once ( ) ) ;
193+
194+ const testVariable : IJupyterVariable = { name : 'big_complex' , type : 'complex' , size : 60 , expensive : true , truncated : false , count : 0 , shape : '' , value : '' } ;
195+
196+ const resultVariable = await jupyterVariables . getValue ( testVariable ) ;
175197
198+ // Verify the result value should be filled out from fake server result
199+ assert . deepEqual ( resultVariable , { name : 'big_complex' , size : 60 , type : 'complex' , expensive : true , value : '(1+1j)' } ) ;
176200 fakeServer . verifyAll ( ) ;
177201 } ) ;
178202} ) ;
0 commit comments