Spreadsheet XLSX import: Fix bug causing xls import failing for some operators (#16336)
* Fix bug causing xls import failing for some comparisons * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Benjamin Nauck <benjamin.nauck@adlede.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -8,6 +8,7 @@ set(Spreadsheet_Scripts
|
||||
Init.py
|
||||
TestSpreadsheet.py
|
||||
importXLSX.py
|
||||
test_importXLSX.py
|
||||
)
|
||||
|
||||
if(BUILD_GUI)
|
||||
|
||||
@@ -225,7 +225,7 @@ class FormulaTranslator(object):
|
||||
else:
|
||||
# print('There is a branch. look up: ', theExpr[1])
|
||||
if (lenExpr > 1) and (theExpr[1] in treeDict[branch]):
|
||||
branch = treeDict[branch][theExpr[0]]
|
||||
branch = treeDict[branch][theExpr[1]]
|
||||
if branch is None:
|
||||
keyToken = True
|
||||
else:
|
||||
|
||||
98
src/Mod/Spreadsheet/test_importXLSX.py
Normal file
98
src/Mod/Spreadsheet/test_importXLSX.py
Normal file
@@ -0,0 +1,98 @@
|
||||
import unittest
|
||||
from unittest.mock import patch, MagicMock
|
||||
|
||||
from importXLSX import FormulaTranslator, getText, handleStrings, open
|
||||
|
||||
|
||||
class TestFormulaTranslator(unittest.TestCase):
|
||||
def test_translate_expressions(self):
|
||||
# With
|
||||
formulas_and_expressions = [
|
||||
("1=2", "1==2"),
|
||||
("a<b", "a<b"),
|
||||
("a>b", "a>b"),
|
||||
("1<>2", "1!=2"),
|
||||
("a>=b", "a>=b"),
|
||||
("a<=b", "a<=b"),
|
||||
("a!b", "a.b"),
|
||||
("a+b", "a+b"),
|
||||
("a-b", "a-b"),
|
||||
("a*b", "a*b"),
|
||||
("a/b", "a/b"),
|
||||
("a^b", "a^b"),
|
||||
("c*(a+b)", "c*(a+b)"),
|
||||
("IF(a=b, c, d)", "(a==b? c: d)"),
|
||||
("ABS(a)", "abs(a)"),
|
||||
("ACOS(a)", "pi/180deg*acos(a)"),
|
||||
("ASIN(a)", "pi/180deg*asin(a)"),
|
||||
("ATAN(a)", "pi/180deg*atan(a)"),
|
||||
("ATAN2(a)", "pi/180deg*atan2(a)"),
|
||||
("COS(a)", "cos(1rad*(a))"),
|
||||
("COSH(a)", "cosh(1rad*(a))"),
|
||||
("EXP(a)", "exp(a)"),
|
||||
("LOG(n)", "log(n)"),
|
||||
("LOG10(n)", "log10(n)"),
|
||||
("MOD(n,d)", "mod(n,d)"),
|
||||
("POWER(n,p)", "pow(n,p)"),
|
||||
("SIN(a)", "sin(1rad*(a))"),
|
||||
("SINH(a)", "sinh(1rad*(a))"),
|
||||
("SQRT(a)", "sqrt(a)"),
|
||||
("TAN(a)", "tan(1rad*(a))"),
|
||||
("TANH(a)", "tanh(1rad*(a))"),
|
||||
("AVERAGE(a,b,c)", "average(a,b,c)"),
|
||||
("COUNT(a,b,c)", "count(a,b,c)"),
|
||||
("MAX(a,b,c)", "max(a,b,c)"),
|
||||
("MIN(a,b,c)", "min(a,b,c)"),
|
||||
("STDEVA(a,b,c)", "stddev(a,b,c)"),
|
||||
("SUM(a,b,c)", "sum(a,b,c)"),
|
||||
("PI", "pi"),
|
||||
("_xlfn.CEILING.MATH(a)", "ceil(a)"),
|
||||
("_xlfn.FLOOR.MATH(a)", "floor(a)"),
|
||||
]
|
||||
|
||||
# When
|
||||
result = []
|
||||
for formula, _ in formulas_and_expressions:
|
||||
translator = FormulaTranslator()
|
||||
result.append(translator.translateForm(formula))
|
||||
|
||||
# Then
|
||||
expected = [f"={expression}" for _, expression in formulas_and_expressions]
|
||||
self.assertListEqual(expected, result)
|
||||
|
||||
def test_translate_multi_character_branching_operators(self):
|
||||
# With
|
||||
formulas_and_expressions = [
|
||||
("1<>2", "1!=2"),
|
||||
("a>=b", "a>=b"),
|
||||
("a<=b", "a<=b"),
|
||||
]
|
||||
|
||||
# When
|
||||
result = []
|
||||
for formula, _ in formulas_and_expressions:
|
||||
translator = FormulaTranslator()
|
||||
result.append(translator.translateForm(formula))
|
||||
|
||||
# Then
|
||||
expected = [f"={expression}" for _, expression in formulas_and_expressions]
|
||||
self.assertListEqual(expected, result)
|
||||
|
||||
def test_translate_nested_expression(self):
|
||||
# With
|
||||
formulas_and_expressions = [
|
||||
(
|
||||
"IF(a<b+c,0.1+SIN(0.5),0.3+MAX(COS(0.2),SIN(0.1)))",
|
||||
"(a<b+c?0.1+sin(1rad*(0.5)):0.3+max(cos(1rad*(0.2)),sin(1rad*(0.1))))",
|
||||
),
|
||||
]
|
||||
|
||||
# When
|
||||
result = []
|
||||
for formula, _ in formulas_and_expressions:
|
||||
translator = FormulaTranslator()
|
||||
result.append(translator.translateForm(formula))
|
||||
|
||||
# Then
|
||||
expected = [f"={expression}" for _, expression in formulas_and_expressions]
|
||||
self.assertListEqual(expected, result)
|
||||
Reference in New Issue
Block a user