@@ -10,22 +10,20 @@ import {
1010 detailedError ,
1111 detailedErrorWithOrigin ,
1212 expectArrayWithSameContent ,
13- expectEngineToBeTheSameAs ,
14- expectReferenceToHaveRefError ,
1513 extractReference ,
1614} from '../testUtils'
1715
1816describe ( 'Removing sheet - checking if its possible' , ( ) => {
1917 it ( 'no if theres no such sheet' , ( ) => {
2018 const engine = HyperFormula . buildFromArray ( [ [ ] ] )
2119
22- expect ( engine . isItPossibleToRemoveSheet ( 1 ) ) . toEqual ( false )
20+ expect ( engine . isItPossibleToRemoveSheet ( 1 ) ) . toBe ( false )
2321 } )
2422
2523 it ( 'yes otherwise' , ( ) => {
2624 const engine = HyperFormula . buildFromArray ( [ [ ] ] )
2725
28- expect ( engine . isItPossibleToRemoveSheet ( 0 ) ) . toEqual ( true )
26+ expect ( engine . isItPossibleToRemoveSheet ( 0 ) ) . toBe ( true )
2927 } )
3028} )
3129
@@ -116,6 +114,70 @@ describe('remove sheet', () => {
116114 expect ( engine . getCellValue ( adr ( 'A2' , 1 ) ) ) . toBe ( 2 )
117115 expect ( engine . getCellValue ( adr ( 'A3' , 1 ) ) ) . toBe ( 3 )
118116 } )
117+
118+ it ( 'converts sheet to placeholder if other sheet depends on it' , ( ) => {
119+ const engine = HyperFormula . buildFromSheets ( {
120+ Sheet1 : [ [ 42 ] ] ,
121+ Sheet2 : [ [ '=Sheet1!A1' ] ] ,
122+ } )
123+
124+ const sheet1Id = engine . getSheetId ( 'Sheet1' ) !
125+
126+ engine . removeSheet ( sheet1Id )
127+
128+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : false } ) ) . toBe ( false )
129+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : true } ) ) . toBe ( true )
130+ } )
131+
132+ it ( 'removes sheet completely if nothing depends on it' , ( ) => {
133+ const engine = HyperFormula . buildFromSheets ( {
134+ Sheet1 : [ [ 42 ] ] ,
135+ Sheet2 : [ [ 100 ] ] ,
136+ } )
137+
138+ const sheet1Id = engine . getSheetId ( 'Sheet1' ) !
139+
140+ engine . removeSheet ( sheet1Id )
141+
142+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : false } ) ) . toBe ( false )
143+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : true } ) ) . toBe ( false )
144+ } )
145+
146+ it ( 'removes the placeholder sheet if nothing depends on it any longer' , ( ) => {
147+ const engine = HyperFormula . buildFromSheets ( {
148+ Sheet1 : [ [ 42 ] ] ,
149+ Sheet2 : [ [ '=Sheet1!A1' ] ] ,
150+ } )
151+
152+ const sheet1Id = engine . getSheetId ( 'Sheet1' ) !
153+ const sheet2Id = engine . getSheetId ( 'Sheet2' ) !
154+
155+ engine . removeSheet ( sheet1Id )
156+
157+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : false } ) ) . toBe ( false )
158+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : true } ) ) . toBe ( true )
159+
160+ engine . setCellContents ( adr ( 'A1' , sheet2Id ) , 100 )
161+
162+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : false } ) ) . toBe ( false )
163+ expect ( engine . sheetMapping . hasSheetWithId ( sheet1Id , { includePlaceholders : true } ) ) . toBe ( false )
164+ } )
165+
166+ it ( 'decreases lastSheetId if removed sheet was the last one' , ( ) => {
167+ const engine = HyperFormula . buildFromSheets ( {
168+ Sheet1 : [ [ 1 ] ] ,
169+ Sheet2 : [ [ 2 ] ] ,
170+ } )
171+
172+ const sheet2Id = engine . getSheetId ( 'Sheet2' ) !
173+
174+ engine . removeSheet ( sheet2Id )
175+
176+ engine . addSheet ( 'Sheet3' )
177+ const sheet3Id = engine . getSheetId ( 'Sheet3' ) !
178+
179+ expect ( sheet3Id ) . toBe ( sheet2Id ) // new sheet reuses the ID
180+ } )
119181} )
120182
121183describe ( 'remove sheet - adjust edges' , ( ) => {
@@ -149,6 +211,7 @@ describe('remove sheet - adjust edges', () => {
149211
150212 const a1From0 = engine . addressMapping . getCell ( adr ( 'A1' ) )
151213 const a1From1 = engine . addressMapping . getCell ( adr ( 'A1' , 1 ) )
214+
152215 expect ( engine . graph . existsEdge ( a1From1 ! , a1From0 ! ) ) . toBe ( true )
153216
154217 engine . removeSheet ( 1 )
@@ -221,7 +284,7 @@ describe('remove sheet - adjust formula dependencies', () => {
221284
222285} )
223286
224- describe ( 'remove sheet - issue #1116' , ( ) => {
287+ describe ( 'removeSheet() recalculates formulas ( issue #1116) ' , ( ) => {
225288 it ( 'returns REF error after removing sheet referenced without quotes' , ( ) => {
226289 const engine = HyperFormula . buildEmpty ( )
227290 const table1Name = 'table1'
@@ -727,6 +790,7 @@ describe('remove sheet - adjust matrix mapping', () => {
727790 [ '=TRANSPOSE(A1:B1)' ] ,
728791 ] ,
729792 } )
793+
730794 expect ( engine . arrayMapping . getArray ( AbsoluteCellRange . spanFrom ( adr ( 'A2' ) , 1 , 2 ) ) ) . toBeInstanceOf ( ArrayFormulaVertex )
731795
732796 engine . removeSheet ( 0 )
@@ -746,7 +810,7 @@ describe('remove sheet - adjust column index', () => {
746810
747811 engine . removeSheet ( 0 )
748812
749- expect ( removeSheetSpy ) . toHaveBeenCalled ( )
813+ expect ( removeSheetSpy ) . toHaveBeenCalledWith ( 0 )
750814 expectArrayWithSameContent ( [ ] , index . getValueIndex ( 0 , 0 , 1 ) . index )
751815 } )
752816} )
0 commit comments