diff --git a/app/release_notes.txt b/app/release_notes.txt index 98fc077ae..16cb2a8d7 100644 --- a/app/release_notes.txt +++ b/app/release_notes.txt @@ -6,10 +6,16 @@ Coming soon! New Features: - Save and resume auto-detection algorithm settings along with masks in the project file (per dataset). - - Crop images before digitization + - Crop images before digitization. + - Undo/Redo management system (used only for cropping images at the moment) + - Initial ability to run digitization on multiple images via NodeJS command-line Bug fixes: - Improve X Step with Interpolation algorithm for log-scale charts + - Improved unit test coverage + +Misc: + - Minor UI tweaks for mask creation Version 4.1 =========== diff --git a/app/tests/save_tests.js b/app/tests/save_tests.js index 7119bf9d9..3a9d5e0e5 100644 --- a/app/tests/save_tests.js +++ b/app/tests/save_tests.js @@ -74,14 +74,38 @@ QUnit.test("Resume Version 4.2 with masks", function(assert) { assert.equal(autodetection1.mask.size, 264662, testLabelPrefix + "Check mask size for 1st dataset"); let autodetection2 = plotData.getAutoDetectionDataForDataset(datasets[5]); assert.equal(autodetection2.mask.size, 14710, testLabelPrefix + "Check mask size for 6th dataset"); - }; + let checkMeasurements = function(plotData, assert, testLabelPrefix) { + // distance + let distanceMeasurements = plotData.getMeasurementsByType(wpd.DistanceMeasurement); + assert.equal(distanceMeasurements.length, 1, testLabelPrefix + "Number of distance measurements"); + assert.equal(distanceMeasurements[0].connectionCount(), 1, testLabelPrefix + "Number of distances"); + let axes = plotData.getAxesForMeasurement(distanceMeasurements[0]); + assert.equal(axes.pixelToDataDistance(distanceMeasurements[0].getDistance(0)), 5.969022081900202, testLabelPrefix + "Distance value"); + + // angle + let angleMeasurements = plotData.getMeasurementsByType(wpd.AngleMeasurement); + assert.equal(angleMeasurements.length, 1, testLabelPrefix + "Number of angle measurements"); + assert.equal(angleMeasurements[0].connectionCount(), 1, testLabelPrefix + "Number of angles"); + assert.equal(angleMeasurements[0].getAngle(0), 45.01999740464475, testLabelPrefix + "Angle value"); + + // area/perimeter + let areaMeasurements = plotData.getMeasurementsByType(wpd.AreaMeasurement); + assert.equal(areaMeasurements.length, 1, testLabelPrefix + "Number of area measurements"); + assert.equal(areaMeasurements[0].connectionCount(), 1, testLabelPrefix + "Number of areas"); + axes = plotData.getAxesForMeasurement(areaMeasurements[0]); + assert.equal(axes.pixelToDataDistance(areaMeasurements[0].getPerimeter(0)), 22.18065208060926, testLabelPrefix + "Perimeter value"); + assert.equal(axes.pixelToDataArea(areaMeasurements[0].getArea(0)), 30.245012069196335, testLabelPrefix + "Area value"); + + }; let done = assert.async(); wpdtest.loadPlotData("files/wpd4_2_with_masks.json").then(plotDataObjs => { checkAxes(plotDataObjs.plotData, assert, "Deserialize from JSON: "); checkAxes(plotDataObjs.plotData2, assert, "Serialize then deserialize: "); checkDatasets(plotDataObjs.plotData, assert, "Deserialize from JSON: "); checkDatasets(plotDataObjs.plotData2, assert, "Serialize then deserialize: "); + checkMeasurements(plotDataObjs.plotData, assert, "Deserialize from JSON: "); + checkMeasurements(plotDataObjs.plotData2, assert, "Serialize then deserialize: "); done(); }); }); \ No newline at end of file