Improve parameter parsing (#583)

* DigiKey: Skip empty values

* Move improved range detection from LCSCProvider to ParameterDTO class
Improve numeric value detection by moving extra info to value_text

* ParameterDTO: Add micro unit prefix

* Bring $value_text2 to a defined state

* ParameterDTO: Don't overwrite $unit if it's not empty

* ParameterDTO: Don't overwrite $unit if it's not empty

* Correct some inaccuacies in comments

* Added tests and fixed certain edge cases in parsing parameters

* Added more tests for parameter parsing

---------

Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
This commit is contained in:
frank-f 2024-04-15 22:33:27 +02:00 committed by GitHub
parent fdf64f9e9a
commit 7a6b045030
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 141 additions and 34 deletions

View file

@ -67,6 +67,56 @@ class ParameterDTOTest extends TestCase
'm',
'test'
];
//Test ranges with tilde
yield [
new ParameterDTO('test', value_min: -1.0, value_max: 2.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'-1.0~+2.0', //Leading signs are parsed correctly
'kg',
'm',
'test'
];
//Test ranges with comment
yield [
new ParameterDTO('test', value_text: "Test", value_min: -1.0, value_max: 2.0, unit: 'kg', symbol: 'm',
group: 'test'),
'test',
'-1.0~+2.0 kg Test', //Leading signs are parsed correctly
'kg',
'm',
'test'
];
//Test @comment
yield [
new ParameterDTO('test', value_text: "@comment", value_typ: 1.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'1.0@comment',
'kg',
'm',
'test'
];
//Test plus minus range (without unit)
yield [
new ParameterDTO('test', value_min: -1.0, value_max: +1.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'±1.0',
'kg',
'm',
'test'
];
yield [ //And with unit
new ParameterDTO('test', value_min: -1.0, value_max: +1.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'±1.0kg',
'kg',
'm',
'test'
];
}
public function parseValueIncludingUnitDataProvider(): \Generator
@ -142,6 +192,33 @@ class ParameterDTOTest extends TestCase
'm',
'test'
];
//Test ranges with tilde
yield [
new ParameterDTO('test', value_min: -1.0, value_max: 2.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'-1.0kg~+2.0kg', //Leading signs are parsed correctly
'm',
'test'
];
//Test @comment
yield [
new ParameterDTO('test', value_text: "@comment", value_typ: 1.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'1.0 kg@comment',
'm',
'test'
];
//Test plus minus range (without unit)
yield [
new ParameterDTO('test', value_min: -1.0, value_max: +1.0, unit: 'kg', symbol: 'm', group: 'test'),
'test',
'±1.0 kg',
'm',
'test'
];
}
/**
@ -175,6 +252,7 @@ class ParameterDTOTest extends TestCase
$this->assertEquals(["70", ""], ParameterDTO::splitIntoValueAndUnit("70℃"));
$this->assertEquals(["-5.0", "kg"], ParameterDTO::splitIntoValueAndUnit("-5.0 kg"));
$this->assertEquals(["-5.0", "µg"], ParameterDTO::splitIntoValueAndUnit("-5.0 µg"));
$this->assertNull(ParameterDTO::splitIntoValueAndUnit('kg'));
$this->assertNull(ParameterDTO::splitIntoValueAndUnit('Test'));