def test_conversion_with_symbols(qtbot):
    widget = UnitEdit(text='1*b*mm')
    show(locals())
    syms = widget.getSymbols()
    assert set(syms.keys()) == {'b'}

    expr = widget.getExpr()
    conv = units.convert_to(expr, units.meter)
    assert conv == units.meter * Symbol('b') / 1000
    assert widget.convertTo('meter') == conv
    assert widget.convertTo(units.meter) == conv
def test_constructor_units(qtbot):
    widget = UnitEdit(text='2.0*mm')
    show(locals())
    assert widget.getError() is False
    assert getCurrentColor(
        widget, 'Background').names[0] == widget.defaultColors['default'][0]
    assert widget.getSymbols() == dict()
    assert widget.getExpr().atoms(units.Unit) == {units.mm}
    assert widget.getDimension() == units.Dimension('length')
    assert widget.getMagnitude() == 2
    assert widget.getUnits() == units.millimeter
    assert widget.getValue() == widget.getUnits() * widget.getMagnitude()
expr = ExprEdit(text='1*a + 2*b - 1*a + cos(pi)')
expr.hasError[str].connect(printer('ExprEdit.hasError[str]'))
expr.exprChanged[str].connect(
    printer('ExprEdit.exprChanged[str] -> Expression is:'))
expr.editingFinished.connect(lambda: show_symbols(expr))
expr.editingFinished.connect(
    lambda: print('ExprEdit.editingFinished -> getValue():', expr.getValue()))
expr.setToolTip("Do some math")
layout.addWidget(expr)

unit = UnitEdit(text='2*mm + 1*inch')
unit.hasError[str].connect(printer('UnitEdit.hasError[str]'))
unit.exprChanged[object].connect(printer('UnitEdit.exprChanged[object]'))
unit.exprChanged.connect(
    lambda: print('UnitEdit.exprChanged -> getExpr()', unit.getExpr()))
unit.exprChanged.connect(
    lambda: print('UnitEdit.exprChanged -> getValue()', unit.getValue()))
unit.valueChanged[object].connect(printer('UnitEdit.valueChanged[object]'))
unit.setToolTip("Do math with units")
layout.addWidget(unit)

dim = DimensionEdit(text='2*mm + 1*inch', dimension='length')
dim.hasError[str].connect(printer('DimensionEdit.hasError[str]'))
dim.exprChanged[object].connect(printer('DimensionEdit.exprChanged[object]'))
dim.valueChanged[object].connect(printer('DimensionEdit.valueChanged[object]'))
dim.setToolTip("Dimension (length) is enforced")
layout.addWidget(dim)

entry = SympyEntryWidget(text='3*mm + 1*inch',
                         objectName='EntryWidget',