diff --git a/package-lock.json b/package-lock.json index ccc091b3ec..3715a7301f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15563,6 +15563,7 @@ "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-2.1.3.tgz", "integrity": "sha512-LMM2bseebLbYjODBOVt7TCPP9OI2vZIXCavIXhkO9m+10Uj5l7u/SKoeRmYx8FYHTVGZSpk6peX+3BMHC1WwNw==", "dev": true, + "license": "MIT", "dependencies": { "is-wsl": "^2.2.0", "which": "^3.0.0" diff --git a/src/AbsoluteCellRange.ts b/src/AbsoluteCellRange.ts index 0b9585fb6d..6cba3c563f 100644 --- a/src/AbsoluteCellRange.ts +++ b/src/AbsoluteCellRange.ts @@ -26,8 +26,14 @@ export interface SimpleCellRange { end: SimpleCellAddress, } -export function isSimpleCellRange(obj: any): obj is SimpleCellRange { - if (obj && (typeof obj === 'object' || typeof obj === 'function')) { +/** + * Type guard that checks if an object is a valid SimpleCellRange. + * @param {unknown} val - Value to check + * @returns {boolean} True if and only if the object is a valid SimpleCellRange + */ +export function isSimpleCellRange(val: unknown): val is SimpleCellRange { + if (val && (typeof val === 'object' || typeof val === 'function')) { + const obj = val as Record return 'start' in obj && isSimpleCellAddress(obj.start) && 'end' in obj && isSimpleCellAddress(obj.end) } else { return false diff --git a/test/unit/cruds/change-cell-content.spec.ts b/test/unit/cruds/change-cell-content.spec.ts index c8c5a9b7c3..d34f09f32a 100644 --- a/test/unit/cruds/change-cell-content.spec.ts +++ b/test/unit/cruds/change-cell-content.spec.ts @@ -582,6 +582,20 @@ describe('changing cell content', () => { expect(engine.getCellValueDetailedType({ sheet: 0, col: 0, row: 1 })).toEqual(CellValueDetailedType.NUMBER_CURRENCY) expect(engine.getCellValueDetailedType({ sheet: 0, col: 0, row: 2 })).toEqual(CellValueDetailedType.NUMBER_PERCENT) }) + + it('should work in scenario from issue https://github.com/handsontable/hyperformula/issues/1297', () => { + const engine = HyperFormula.buildFromArray([ + [1, 2, '=SUM(A1:B1)'], + ['=SUM(1:1)', 0, 0], + ['=SUM(1:2)', 0, 0], + ]) + + engine.setCellContents(adr('C1'), [['=SUM(A1:B1)']]) + engine.setCellContents(adr('A3'), [['=SUM(A1:C2)']]) + engine.setCellContents(adr('B1'), [[null]]) + + expect(engine.getCellValue(adr('A3'))).toEqual(4) + }) }) describe('change multiple cells contents', () => {