Minor Improvement to Test Cleanup LookupRef
Permit spreadsheet allocated as private member in test class to be garbage-collected after test completion.
This commit is contained in:
parent
7aa83eb72f
commit
efe8f49123
|
|
@ -17,26 +17,28 @@ class AllSetupTeardown extends TestCase
|
||||||
protected $compatibilityMode;
|
protected $compatibilityMode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Spreadsheet
|
* @var ?Spreadsheet
|
||||||
*/
|
*/
|
||||||
protected $spreadsheet;
|
private $spreadsheet;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var Worksheet
|
* @var ?Worksheet
|
||||||
*/
|
*/
|
||||||
protected $sheet;
|
private $sheet;
|
||||||
|
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
$this->compatibilityMode = Functions::getCompatibilityMode();
|
$this->compatibilityMode = Functions::getCompatibilityMode();
|
||||||
$this->spreadsheet = new Spreadsheet();
|
|
||||||
$this->sheet = $this->spreadsheet->getActiveSheet();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown(): void
|
protected function tearDown(): void
|
||||||
{
|
{
|
||||||
Functions::setCompatibilityMode($this->compatibilityMode);
|
Functions::setCompatibilityMode($this->compatibilityMode);
|
||||||
$this->spreadsheet->disconnectWorksheets();
|
$this->sheet = null;
|
||||||
|
if ($this->spreadsheet !== null) {
|
||||||
|
$this->spreadsheet->disconnectWorksheets();
|
||||||
|
$this->spreadsheet = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static function setOpenOffice(): void
|
protected static function setOpenOffice(): void
|
||||||
|
|
@ -66,10 +68,30 @@ class AllSetupTeardown extends TestCase
|
||||||
{
|
{
|
||||||
if ($value !== null) {
|
if ($value !== null) {
|
||||||
if (is_string($value) && is_numeric($value)) {
|
if (is_string($value) && is_numeric($value)) {
|
||||||
$this->sheet->getCell($cell)->setValueExplicit($value, DataType::TYPE_STRING);
|
$this->getSheet()->getCell($cell)->setValueExplicit($value, DataType::TYPE_STRING);
|
||||||
} else {
|
} else {
|
||||||
$this->sheet->getCell($cell)->setValue($value);
|
$this->getSheet()->getCell($cell)->setValue($value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function getSpreadsheet(): Spreadsheet
|
||||||
|
{
|
||||||
|
if ($this->spreadsheet !== null) {
|
||||||
|
return $this->spreadsheet;
|
||||||
|
}
|
||||||
|
$this->spreadsheet = new Spreadsheet();
|
||||||
|
|
||||||
|
return $this->spreadsheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getSheet(): Worksheet
|
||||||
|
{
|
||||||
|
if ($this->sheet !== null) {
|
||||||
|
return $this->sheet;
|
||||||
|
}
|
||||||
|
$this->sheet = $this->getSpreadsheet()->getActiveSheet();
|
||||||
|
|
||||||
|
return $this->sheet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,12 @@ class ColumnOnSpreadsheetTest extends AllSetupTeardown
|
||||||
public function testColumnOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
public function testColumnOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
||||||
{
|
{
|
||||||
$this->mightHaveException($expectedResult);
|
$this->mightHaveException($expectedResult);
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
|
|
||||||
if ($cellReference === 'omitted') {
|
if ($cellReference === 'omitted') {
|
||||||
|
|
@ -40,11 +40,11 @@ class ColumnOnSpreadsheetTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testCOLUMNLocalDefinedName(): void
|
public function testCOLUMNLocalDefinedName(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$5', true)); // defined locally, only usable on sheet1
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$5', true)); // defined locally, only usable on sheet1
|
||||||
|
|
||||||
$sheet1->getCell('B3')->setValue('=COLUMN(newnr)');
|
$sheet1->getCell('B3')->setValue('=COLUMN(newnr)');
|
||||||
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
||||||
|
|
|
||||||
|
|
@ -15,16 +15,16 @@ class ColumnsOnSpreadsheetTest extends AllSetupTeardown
|
||||||
public function testColumnsOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
public function testColumnsOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
||||||
{
|
{
|
||||||
$this->mightHaveException($expectedResult);
|
$this->mightHaveException($expectedResult);
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->setTitle('ThisSheet');
|
$sheet->setTitle('ThisSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange5', $sheet, '$F$5:$I$5', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange5', $sheet, '$F$5:$I$5', true));
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('localname', $sheet1, '$F$6:$H$6', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('localname', $sheet1, '$F$6:$H$6', true));
|
||||||
|
|
||||||
if ($cellReference === 'omitted') {
|
if ($cellReference === 'omitted') {
|
||||||
$sheet->getCell('B3')->setValue('=COLUMNS()');
|
$sheet->getCell('B3')->setValue('=COLUMNS()');
|
||||||
|
|
@ -43,11 +43,11 @@ class ColumnsOnSpreadsheetTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testCOLUMNSLocalDefinedName(): void
|
public function testCOLUMNSLocalDefinedName(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$5', true)); // defined locally, only usable on sheet1
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$5', true)); // defined locally, only usable on sheet1
|
||||||
|
|
||||||
$sheet1->getCell('B3')->setValue('=COLUMNS(newnr)');
|
$sheet1->getCell('B3')->setValue('=COLUMNS(newnr)');
|
||||||
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ class IndirectTest extends AllSetupTeardown
|
||||||
public function testINDIRECT($expectedResult, $cellReference = 'omitted', $a1 = 'omitted'): void
|
public function testINDIRECT($expectedResult, $cellReference = 'omitted', $a1 = 'omitted'): void
|
||||||
{
|
{
|
||||||
$this->mightHaveException($expectedResult);
|
$this->mightHaveException($expectedResult);
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->getCell('A1')->setValue(100);
|
$sheet->getCell('A1')->setValue(100);
|
||||||
$sheet->getCell('A2')->setValue(200);
|
$sheet->getCell('A2')->setValue(200);
|
||||||
$sheet->getCell('A3')->setValue(300);
|
$sheet->getCell('A3')->setValue(300);
|
||||||
|
|
@ -25,7 +25,7 @@ class IndirectTest extends AllSetupTeardown
|
||||||
$sheet->getCell('A5')->setValue(500);
|
$sheet->getCell('A5')->setValue(500);
|
||||||
$sheet->setTitle('ThisSheet');
|
$sheet->setTitle('ThisSheet');
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->getCell('A1')->setValue(10);
|
$sheet1->getCell('A1')->setValue(10);
|
||||||
$sheet1->getCell('A2')->setValue(20);
|
$sheet1->getCell('A2')->setValue(20);
|
||||||
$sheet1->getCell('A3')->setValue(30);
|
$sheet1->getCell('A3')->setValue(30);
|
||||||
|
|
@ -37,8 +37,8 @@ class IndirectTest extends AllSetupTeardown
|
||||||
$sheet1->getCell('B4')->setValue(4);
|
$sheet1->getCell('B4')->setValue(4);
|
||||||
$sheet1->getCell('B5')->setValue(5);
|
$sheet1->getCell('B5')->setValue(5);
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('newnr', $sheet1, '$A$2:$A$4'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('newnr', $sheet1, '$A$2:$A$4'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('localname', $sheet1, '$B$2:$B$4', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('localname', $sheet1, '$B$2:$B$4', true));
|
||||||
|
|
||||||
$this->setCell('B1', $cellReference);
|
$this->setCell('B1', $cellReference);
|
||||||
$this->setCell('B2', $a1);
|
$this->setCell('B2', $a1);
|
||||||
|
|
@ -61,14 +61,14 @@ class IndirectTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testINDIRECTEurUsd(): void
|
public function testINDIRECTEurUsd(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->getCell('A1')->setValue('EUR');
|
$sheet->getCell('A1')->setValue('EUR');
|
||||||
$sheet->getCell('A2')->setValue('USD');
|
$sheet->getCell('A2')->setValue('USD');
|
||||||
$sheet->getCell('B1')->setValue(360);
|
$sheet->getCell('B1')->setValue(360);
|
||||||
$sheet->getCell('B2')->setValue(300);
|
$sheet->getCell('B2')->setValue(300);
|
||||||
|
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('EUR', $sheet, '$B$1'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('EUR', $sheet, '$B$1'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('USD', $sheet, '$B$2'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('USD', $sheet, '$B$2'));
|
||||||
|
|
||||||
$this->setCell('E1', '=INDIRECT("USD")');
|
$this->setCell('E1', '=INDIRECT("USD")');
|
||||||
|
|
||||||
|
|
@ -78,14 +78,14 @@ class IndirectTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testINDIRECTLeadingEquals(): void
|
public function testINDIRECTLeadingEquals(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->getCell('A1')->setValue('EUR');
|
$sheet->getCell('A1')->setValue('EUR');
|
||||||
$sheet->getCell('A2')->setValue('USD');
|
$sheet->getCell('A2')->setValue('USD');
|
||||||
$sheet->getCell('B1')->setValue(360);
|
$sheet->getCell('B1')->setValue(360);
|
||||||
$sheet->getCell('B2')->setValue(300);
|
$sheet->getCell('B2')->setValue(300);
|
||||||
|
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('EUR', $sheet, '=$B$1'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('EUR', $sheet, '=$B$1'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('USD', $sheet, '=$B$2'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('USD', $sheet, '=$B$2'));
|
||||||
|
|
||||||
$this->setCell('E1', '=INDIRECT("USD")');
|
$this->setCell('E1', '=INDIRECT("USD")');
|
||||||
|
|
||||||
|
|
@ -125,7 +125,7 @@ class IndirectTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testDeprecatedCall(): void
|
public function testDeprecatedCall(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->getCell('A1')->setValue('A2');
|
$sheet->getCell('A1')->setValue('A2');
|
||||||
$sheet->getCell('A2')->setValue('This is it');
|
$sheet->getCell('A2')->setValue('This is it');
|
||||||
$result = \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDIRECT('A2', $sheet->getCell('A1'));
|
$result = \PhpOffice\PhpSpreadsheet\Calculation\LookupRef::INDIRECT('A2', $sheet->getCell('A1'));
|
||||||
|
|
|
||||||
|
|
@ -15,16 +15,16 @@ class RowOnSpreadsheetTest extends AllSetupTeardown
|
||||||
public function testRowOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
public function testRowOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
||||||
{
|
{
|
||||||
$this->mightHaveException($expectedResult);
|
$this->mightHaveException($expectedResult);
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->setTitle('ThisSheet');
|
$sheet->setTitle('ThisSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange5', $sheet, '$F$5:$H$5', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange5', $sheet, '$F$5:$H$5', true));
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('localname', $sheet1, '$F$6:$H$6', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('localname', $sheet1, '$F$6:$H$6', true));
|
||||||
|
|
||||||
if ($cellReference === 'omitted') {
|
if ($cellReference === 'omitted') {
|
||||||
$sheet->getCell('B3')->setValue('=ROW()');
|
$sheet->getCell('B3')->setValue('=ROW()');
|
||||||
|
|
@ -43,11 +43,11 @@ class RowOnSpreadsheetTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testINDIRECTLocalDefinedName(): void
|
public function testINDIRECTLocalDefinedName(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$5', true)); // defined locally, only usable on sheet1
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$5', true)); // defined locally, only usable on sheet1
|
||||||
|
|
||||||
$sheet1->getCell('B3')->setValue('=ROW(newnr)');
|
$sheet1->getCell('B3')->setValue('=ROW(newnr)');
|
||||||
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
||||||
|
|
|
||||||
|
|
@ -15,16 +15,16 @@ class RowsOnSpreadsheetTest extends AllSetupTeardown
|
||||||
public function testRowsOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
public function testRowsOnSpreadsheet($expectedResult, $cellReference = 'omitted'): void
|
||||||
{
|
{
|
||||||
$this->mightHaveException($expectedResult);
|
$this->mightHaveException($expectedResult);
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
$sheet->setTitle('ThisSheet');
|
$sheet->setTitle('ThisSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangex', $sheet, '$E$2:$E$6'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrangey', $sheet, '$F$2:$H$2'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange3', $sheet, '$F$4:$H$4'));
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('namedrange5', $sheet, '$F$5:$H$5', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('namedrange5', $sheet, '$F$5:$H$5', true));
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('localname', $sheet1, '$F$6:$H$6', true));
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('localname', $sheet1, '$F$6:$H$6', true));
|
||||||
|
|
||||||
if ($cellReference === 'omitted') {
|
if ($cellReference === 'omitted') {
|
||||||
$sheet->getCell('B3')->setValue('=ROWS()');
|
$sheet->getCell('B3')->setValue('=ROWS()');
|
||||||
|
|
@ -43,11 +43,11 @@ class RowsOnSpreadsheetTest extends AllSetupTeardown
|
||||||
|
|
||||||
public function testRowsLocalDefinedName(): void
|
public function testRowsLocalDefinedName(): void
|
||||||
{
|
{
|
||||||
$sheet = $this->sheet;
|
$sheet = $this->getSheet();
|
||||||
|
|
||||||
$sheet1 = $this->spreadsheet->createSheet();
|
$sheet1 = $this->getSpreadsheet()->createSheet();
|
||||||
$sheet1->setTitle('OtherSheet');
|
$sheet1->setTitle('OtherSheet');
|
||||||
$this->spreadsheet->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$10', true)); // defined locally, only usable on sheet1
|
$this->getSpreadsheet()->addNamedRange(new NamedRange('newnr', $sheet1, '$F$5:$H$10', true)); // defined locally, only usable on sheet1
|
||||||
|
|
||||||
$sheet1->getCell('B3')->setValue('=ROWS(newnr)');
|
$sheet1->getCell('B3')->setValue('=ROWS(newnr)');
|
||||||
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
$result = $sheet1->getCell('B3')->getCalculatedValue();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue