mirror of
https://github.com/oliexdev/openScale.git
synced 2025-09-02 12:54:10 +02:00
- updated Trisa body analyze junit test
- updated deprecated instrumentation import
This commit is contained in:
@@ -2,11 +2,11 @@
|
|||||||
"formatVersion": 1,
|
"formatVersion": 1,
|
||||||
"database": {
|
"database": {
|
||||||
"version": 3,
|
"version": 3,
|
||||||
"identityHash": "2db259b9e244ebad0c664f2c9fb36068",
|
"identityHash": "974ad0a810bf389300cf67b40862bb75",
|
||||||
"entities": [
|
"entities": [
|
||||||
{
|
{
|
||||||
"tableName": "scaleMeasurements",
|
"tableName": "scaleMeasurements",
|
||||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `userId` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `datetime` INTEGER, `weight` REAL NOT NULL, `fat` REAL NOT NULL, `water` REAL NOT NULL, `muscle` REAL NOT NULL, `visceralFat` REAL NOT NULL, `lbm` REAL NOT NULL, `waist` REAL NOT NULL, `hip` REAL NOT NULL, `bone` REAL NOT NULL, `chest` REAL NOT NULL, `thigh` REAL NOT NULL, `biceps` REAL NOT NULL, `neck` REAL NOT NULL, `caliper1` REAL NOT NULL, `caliper2` REAL NOT NULL, `caliper3` REAL NOT NULL, `calories` REAL NOT NULL, `comment` TEXT, FOREIGN KEY(`userId`) REFERENCES `scaleUsers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `userId` INTEGER NOT NULL, `enabled` INTEGER NOT NULL, `datetime` INTEGER, `weight` REAL NOT NULL, `fat` REAL NOT NULL, `water` REAL NOT NULL, `muscle` REAL NOT NULL, `visceralFat` REAL NOT NULL, `lbm` REAL NOT NULL, `waist` REAL NOT NULL, `hip` REAL NOT NULL, `bone` REAL NOT NULL, `chest` REAL NOT NULL, `thigh` REAL NOT NULL, `biceps` REAL NOT NULL, `neck` REAL NOT NULL, `caliper1` REAL NOT NULL, `caliper2` REAL NOT NULL, `caliper3` REAL NOT NULL, `comment` TEXT, FOREIGN KEY(`userId`) REFERENCES `scaleUsers`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"fieldPath": "id",
|
"fieldPath": "id",
|
||||||
@@ -128,12 +128,6 @@
|
|||||||
"affinity": "REAL",
|
"affinity": "REAL",
|
||||||
"notNull": true
|
"notNull": true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldPath": "calories",
|
|
||||||
"columnName": "calories",
|
|
||||||
"affinity": "REAL",
|
|
||||||
"notNull": true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldPath": "comment",
|
"fieldPath": "comment",
|
||||||
"columnName": "comment",
|
"columnName": "comment",
|
||||||
@@ -253,10 +247,9 @@
|
|||||||
"foreignKeys": []
|
"foreignKeys": []
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"views": [],
|
|
||||||
"setupQueries": [
|
"setupQueries": [
|
||||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"2db259b9e244ebad0c664f2c9fb36068\")"
|
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, \"974ad0a810bf389300cf67b40862bb75\")"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -16,14 +16,9 @@
|
|||||||
|
|
||||||
package com.health.openscale;
|
package com.health.openscale;
|
||||||
|
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase;
|
|
||||||
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory;
|
|
||||||
import androidx.room.testing.MigrationTestHelper;
|
|
||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import androidx.test.InstrumentationRegistry;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
|
|
||||||
import com.health.openscale.core.database.AppDatabase;
|
import com.health.openscale.core.database.AppDatabase;
|
||||||
|
|
||||||
@@ -31,6 +26,12 @@ import org.junit.Rule;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import androidx.room.testing.MigrationTestHelper;
|
||||||
|
import androidx.sqlite.db.SupportSQLiteDatabase;
|
||||||
|
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
import static junit.framework.Assert.assertNotSame;
|
import static junit.framework.Assert.assertNotSame;
|
||||||
import static junit.framework.Assert.assertTrue;
|
import static junit.framework.Assert.assertTrue;
|
||||||
|
@@ -15,10 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.health.openscale;
|
package com.health.openscale;
|
||||||
|
|
||||||
import androidx.room.Room;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import androidx.test.InstrumentationRegistry;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
|
|
||||||
import com.health.openscale.core.database.AppDatabase;
|
import com.health.openscale.core.database.AppDatabase;
|
||||||
import com.health.openscale.core.database.ScaleMeasurementDAO;
|
import com.health.openscale.core.database.ScaleMeasurementDAO;
|
||||||
@@ -36,6 +33,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.room.Room;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@@ -51,7 +52,7 @@ public class DatabaseTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void initDatabase() {
|
public void initDatabase() {
|
||||||
Context context = InstrumentationRegistry.getTargetContext();
|
Context context = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||||
appDB = Room.inMemoryDatabaseBuilder(context, AppDatabase.class).build();
|
appDB = Room.inMemoryDatabaseBuilder(context, AppDatabase.class).build();
|
||||||
userDao = appDB.userDAO();
|
userDao = appDB.userDAO();
|
||||||
measurementDAO = appDB.measurementDAO();
|
measurementDAO = appDB.measurementDAO();
|
||||||
|
@@ -1,39 +1,65 @@
|
|||||||
package com.health.openscale;
|
package com.health.openscale;
|
||||||
|
|
||||||
|
import com.health.openscale.core.bluetooth.BluetoothTrisaBodyAnalyze;
|
||||||
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
import com.health.openscale.core.datatypes.ScaleMeasurement;
|
||||||
import com.health.openscale.core.datatypes.ScaleUser;
|
import com.health.openscale.core.datatypes.ScaleUser;
|
||||||
import com.health.openscale.core.utils.Converters;
|
import com.health.openscale.core.utils.Converters;
|
||||||
|
import com.health.openscale.gui.MainActivity;
|
||||||
|
|
||||||
import junit.framework.Assert;
|
import junit.framework.Assert;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
|
|
||||||
import static com.health.openscale.core.bluetooth.lib.TrisaBodyAnalyzeLib.convertDeviceTimestampToJava;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import static com.health.openscale.core.bluetooth.lib.TrisaBodyAnalyzeLib.convertJavaTimestampToDevice;
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
import static com.health.openscale.core.bluetooth.lib.TrisaBodyAnalyzeLib.getBase10Float;
|
import androidx.test.rule.ActivityTestRule;
|
||||||
import static com.health.openscale.core.bluetooth.lib.TrisaBodyAnalyzeLib.parseScaleMeasurementData;
|
|
||||||
import static junit.framework.Assert.assertEquals;
|
import static junit.framework.Assert.assertEquals;
|
||||||
|
|
||||||
/** Unit tests for {@link com.health.openscale.core.bluetooth.lib.TrisaBodyAnalyzeLib}.*/
|
/** Unit tests for {@link com.health.openscale.core.bluetooth.lib.TrisaBodyAnalyzeLib}.*/
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class TrisaBodyAnalyzeLibTest {
|
public class TrisaBodyAnalyzeLibTest {
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public ActivityTestRule<MainActivity> mActivityTestRule = new ActivityTestRule<>(MainActivity.class, false, false);
|
||||||
|
|
||||||
|
|
||||||
|
public BluetoothTrisaBodyAnalyze trisaBodyAnalyze;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void initTest() {
|
||||||
|
try {
|
||||||
|
mActivityTestRule.runOnUiThread(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
trisaBodyAnalyze =new BluetoothTrisaBodyAnalyze(InstrumentationRegistry.getInstrumentation().getTargetContext());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (Throwable throwable) {
|
||||||
|
throwable.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getBase10FloatTests() {
|
public void getBase10FloatTests() {
|
||||||
double eps = 1e-9; // margin of error for inexact floating point comparisons
|
double eps = 1e-9; // margin of error for inexact floating point comparisons
|
||||||
assertEquals(0.0, getBase10Float(new byte[]{0, 0, 0, 0}, 0));
|
|
||||||
assertEquals(0.0, getBase10Float(new byte[]{0, 0, 0, -1}, 0));
|
assertEquals(0.0f, trisaBodyAnalyze.getBase10Float(new byte[]{0, 0, 0, 0}, 0));
|
||||||
assertEquals(76.1, getBase10Float(new byte[]{-70, 29, 0, -2}, 0), eps);
|
assertEquals(0.0f, trisaBodyAnalyze.getBase10Float(new byte[]{0, 0, 0, -1}, 0));
|
||||||
assertEquals(1234.5678, getBase10Float(new byte[]{78, 97, -68, -4}, 0), eps);
|
assertEquals(76.1f, trisaBodyAnalyze.getBase10Float(new byte[]{-70, 29, 0, -2}, 0), eps);
|
||||||
assertEquals(12345678e127, getBase10Float(new byte[]{78, 97, -68, 127}, 0));
|
assertEquals(1234.5678f, trisaBodyAnalyze.getBase10Float(new byte[]{78, 97, -68, -4}, 0), eps);
|
||||||
assertEquals(12345678e-128, getBase10Float(new byte[]{78, 97, -68, -128}, 0), eps);
|
assertEquals(12345678e20f, trisaBodyAnalyze.getBase10Float(new byte[]{78, 97, -68, 20}, 0));
|
||||||
|
assertEquals(12345678e-20f, trisaBodyAnalyze.getBase10Float(new byte[]{78, 97, -68, -20}, 0), eps);
|
||||||
|
|
||||||
byte[] data = new byte[]{1,2,3,4,5};
|
byte[] data = new byte[]{1,2,3,4,5};
|
||||||
assertEquals(0x030201*1e4, getBase10Float(data, 0));
|
assertEquals(0x030201*1e4f, trisaBodyAnalyze.getBase10Float(data, 0));
|
||||||
assertEquals(0x040302*1e5, getBase10Float(data, 1));
|
assertEquals(0x040302*1e5f, trisaBodyAnalyze.getBase10Float(data, 1));
|
||||||
|
|
||||||
assertThrows(IndexOutOfBoundsException.class, getBase10FloatRunnable(data, -1));
|
assertThrows(IndexOutOfBoundsException.class, getBase10FloatRunnable(data, -1));
|
||||||
assertThrows(IndexOutOfBoundsException.class, getBase10FloatRunnable(data, 5));
|
assertThrows(IndexOutOfBoundsException.class, getBase10FloatRunnable(data, 5));
|
||||||
@@ -42,18 +68,18 @@ public class TrisaBodyAnalyzeLibTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertJavaTimestampToDeviceTests() {
|
public void convertJavaTimestampToDeviceTests() {
|
||||||
assertEquals(275852082, convertJavaTimestampToDevice(1538156082000L));
|
assertEquals(275852082, trisaBodyAnalyze.convertJavaTimestampToDevice(1538156082000L));
|
||||||
|
|
||||||
// Rounds down.
|
// Rounds down.
|
||||||
assertEquals(275852082, convertJavaTimestampToDevice(1538156082499L));
|
assertEquals(275852082, trisaBodyAnalyze.convertJavaTimestampToDevice(1538156082499L));
|
||||||
|
|
||||||
// Rounds up.
|
// Rounds up.
|
||||||
assertEquals(275852083, convertJavaTimestampToDevice(1538156082500L));
|
assertEquals(275852083, trisaBodyAnalyze.convertJavaTimestampToDevice(1538156082500L));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertDeviceTimestampToJavaTests() {
|
public void convertDeviceTimestampToJavaTests() {
|
||||||
assertEquals(1538156082000L, convertDeviceTimestampToJava(275852082));
|
assertEquals(1538156082000L, trisaBodyAnalyze.convertDeviceTimestampToJava(275852082));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -67,7 +93,7 @@ public class TrisaBodyAnalyzeLibTest {
|
|||||||
user.setBodyHeight(186);
|
user.setBodyHeight(186);
|
||||||
user.setMeasureUnit(Converters.MeasureUnit.CM);
|
user.setMeasureUnit(Converters.MeasureUnit.CM);
|
||||||
|
|
||||||
ScaleMeasurement measurement = parseScaleMeasurementData(bytes, user);
|
ScaleMeasurement measurement = trisaBodyAnalyze.parseScaleMeasurementData(bytes, user);
|
||||||
|
|
||||||
float eps = 1e-3f;
|
float eps = 1e-3f;
|
||||||
assertEquals(76.0f, measurement.getWeight(), eps);
|
assertEquals(76.0f, measurement.getWeight(), eps);
|
||||||
@@ -83,7 +109,7 @@ public class TrisaBodyAnalyzeLibTest {
|
|||||||
long expected_timestamp_seconds = 1538156082L; // Fri Sep 28 17:34:42 UTC 2018
|
long expected_timestamp_seconds = 1538156082L; // Fri Sep 28 17:34:42 UTC 2018
|
||||||
byte[] bytes = hexToBytes("9f:ba:1d:00:fe:32:2b:71:10:00:00:00:ff:8d:14:00:ff:00:09:00");
|
byte[] bytes = hexToBytes("9f:ba:1d:00:fe:32:2b:71:10:00:00:00:ff:8d:14:00:ff:00:09:00");
|
||||||
|
|
||||||
ScaleMeasurement measurement = parseScaleMeasurementData(bytes, null);
|
ScaleMeasurement measurement = trisaBodyAnalyze.parseScaleMeasurementData(bytes, null);
|
||||||
|
|
||||||
assertEquals(76.1f, measurement.getWeight(), 1e-3f);
|
assertEquals(76.1f, measurement.getWeight(), 1e-3f);
|
||||||
assertEquals(new Date(expected_timestamp_seconds * 1000), measurement.getDateTime());
|
assertEquals(new Date(expected_timestamp_seconds * 1000), measurement.getDateTime());
|
||||||
@@ -95,7 +121,7 @@ public class TrisaBodyAnalyzeLibTest {
|
|||||||
long expected_timestamp_seconds = 1538156082L; // Fri Sep 28 17:34:42 UTC 2018
|
long expected_timestamp_seconds = 1538156082L; // Fri Sep 28 17:34:42 UTC 2018
|
||||||
byte[] bytes = hexToBytes("9f:ba:1d:00:fe:32:2b:71:10:00:00:00:ff:8d:14:00:ff:00:09:00");
|
byte[] bytes = hexToBytes("9f:ba:1d:00:fe:32:2b:71:10:00:00:00:ff:8d:14:00:ff:00:09:00");
|
||||||
|
|
||||||
ScaleMeasurement measurement = parseScaleMeasurementData(bytes, new ScaleUser());
|
ScaleMeasurement measurement = trisaBodyAnalyze.parseScaleMeasurementData(bytes, new ScaleUser());
|
||||||
|
|
||||||
assertEquals(76.1f, measurement.getWeight(), 1e-3f);
|
assertEquals(76.1f, measurement.getWeight(), 1e-3f);
|
||||||
assertEquals(new Date(expected_timestamp_seconds * 1000), measurement.getDateTime());
|
assertEquals(new Date(expected_timestamp_seconds * 1000), measurement.getDateTime());
|
||||||
@@ -106,11 +132,11 @@ public class TrisaBodyAnalyzeLibTest {
|
|||||||
* Creates a {@link Runnable} that will call getBase10Float(). In Java 8, this can be done more
|
* Creates a {@link Runnable} that will call getBase10Float(). In Java 8, this can be done more
|
||||||
* easily with a lambda expression at the call site, but we are using Java 7.
|
* easily with a lambda expression at the call site, but we are using Java 7.
|
||||||
*/
|
*/
|
||||||
private static Runnable getBase10FloatRunnable(final byte[] data, final int offset) {
|
private Runnable getBase10FloatRunnable(final byte[] data, final int offset) {
|
||||||
return new Runnable() {
|
return new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
getBase10Float(data, offset);
|
trisaBodyAnalyze.getBase10Float(data, offset);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
@@ -18,11 +18,6 @@ package com.health.openscale.gui;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import androidx.test.InstrumentationRegistry;
|
|
||||||
import androidx.test.espresso.contrib.PickerActions;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
import androidx.test.rule.ActivityTestRule;
|
|
||||||
import androidx.test.filters.LargeTest;
|
|
||||||
import android.widget.DatePicker;
|
import android.widget.DatePicker;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.TimePicker;
|
import android.widget.TimePicker;
|
||||||
@@ -63,6 +58,12 @@ import org.junit.runner.RunWith;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.test.espresso.contrib.PickerActions;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.filters.LargeTest;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
|
import androidx.test.rule.ActivityTestRule;
|
||||||
|
|
||||||
import static androidx.test.espresso.Espresso.onView;
|
import static androidx.test.espresso.Espresso.onView;
|
||||||
import static androidx.test.espresso.action.ViewActions.click;
|
import static androidx.test.espresso.action.ViewActions.click;
|
||||||
import static androidx.test.espresso.action.ViewActions.replaceText;
|
import static androidx.test.espresso.action.ViewActions.replaceText;
|
||||||
@@ -85,7 +86,7 @@ public class AddMeasurementTest {
|
|||||||
|
|
||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void initTest() {
|
public static void initTest() {
|
||||||
context = InstrumentationRegistry.getTargetContext();
|
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||||
|
|
||||||
openScale = OpenScale.getInstance();
|
openScale = OpenScale.getInstance();
|
||||||
|
|
||||||
|
@@ -18,12 +18,6 @@ package com.health.openscale.gui;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import androidx.test.InstrumentationRegistry;
|
|
||||||
import androidx.test.espresso.ViewInteraction;
|
|
||||||
import androidx.test.espresso.contrib.PickerActions;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
import androidx.test.rule.ActivityTestRule;
|
|
||||||
import androidx.test.filters.LargeTest;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewParent;
|
import android.view.ViewParent;
|
||||||
@@ -46,6 +40,13 @@ import org.junit.runner.RunWith;
|
|||||||
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
import androidx.test.espresso.ViewInteraction;
|
||||||
|
import androidx.test.espresso.contrib.PickerActions;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.filters.LargeTest;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
|
import androidx.test.rule.ActivityTestRule;
|
||||||
|
|
||||||
import static androidx.test.espresso.Espresso.onView;
|
import static androidx.test.espresso.Espresso.onView;
|
||||||
import static androidx.test.espresso.action.ViewActions.click;
|
import static androidx.test.espresso.action.ViewActions.click;
|
||||||
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
|
import static androidx.test.espresso.action.ViewActions.closeSoftKeyboard;
|
||||||
@@ -68,7 +69,7 @@ public class AddUserTest {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void initTest() {
|
public void initTest() {
|
||||||
context = InstrumentationRegistry.getTargetContext();
|
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||||
|
|
||||||
// Set first start to true to get the user add dialog
|
// Set first start to true to get the user add dialog
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
@@ -20,14 +20,6 @@ import android.content.Context;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import androidx.test.InstrumentationRegistry;
|
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
|
||||||
import androidx.test.rule.ActivityTestRule;
|
|
||||||
import androidx.test.rule.GrantPermissionRule;
|
|
||||||
import androidx.test.runner.screenshot.BasicScreenCaptureProcessor;
|
|
||||||
import androidx.test.runner.screenshot.ScreenCapture;
|
|
||||||
import androidx.test.runner.screenshot.Screenshot;
|
|
||||||
import androidx.test.filters.LargeTest;
|
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
|
|
||||||
import com.health.openscale.R;
|
import com.health.openscale.R;
|
||||||
@@ -52,6 +44,14 @@ import java.util.Calendar;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import androidx.test.filters.LargeTest;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
|
import androidx.test.rule.ActivityTestRule;
|
||||||
|
import androidx.test.rule.GrantPermissionRule;
|
||||||
|
import androidx.test.runner.screenshot.BasicScreenCaptureProcessor;
|
||||||
|
import androidx.test.runner.screenshot.ScreenCapture;
|
||||||
|
import androidx.test.runner.screenshot.Screenshot;
|
||||||
import timber.log.Timber;
|
import timber.log.Timber;
|
||||||
|
|
||||||
import static android.os.Environment.DIRECTORY_PICTURES;
|
import static android.os.Environment.DIRECTORY_PICTURES;
|
||||||
@@ -81,7 +81,7 @@ public class ScreenshotRecorder {
|
|||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void initRecorder() {
|
public void initRecorder() {
|
||||||
context = InstrumentationRegistry.getTargetContext();
|
context = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||||
openScale = OpenScale.getInstance();
|
openScale = OpenScale.getInstance();
|
||||||
|
|
||||||
// Set first start to true to get the user add dialog
|
// Set first start to true to get the user add dialog
|
||||||
|
@@ -255,7 +255,17 @@ public class BluetoothTrisaBodyAnalyze extends BluetoothCommunication {
|
|||||||
|
|
||||||
private void onScaleMeasurumentReceived(byte[] data) {
|
private void onScaleMeasurumentReceived(byte[] data) {
|
||||||
ScaleUser user = OpenScale.getInstance().getSelectedScaleUser();
|
ScaleUser user = OpenScale.getInstance().getSelectedScaleUser();
|
||||||
|
ScaleMeasurement measurement = parseScaleMeasurementData(data, user);
|
||||||
|
|
||||||
|
if (measurement == null) {
|
||||||
|
Timber.e("Failed to parse scale measure measurement data: %s", byteInHex(data));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
addScaleData(measurement);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ScaleMeasurement parseScaleMeasurementData(byte[] data, ScaleUser user) {
|
||||||
// data contains:
|
// data contains:
|
||||||
//
|
//
|
||||||
// 1 byte: info about presence of other fields:
|
// 1 byte: info about presence of other fields:
|
||||||
@@ -272,15 +282,14 @@ public class BluetoothTrisaBodyAnalyze extends BluetoothCommunication {
|
|||||||
// Check that we have at least weight & timestamp, which is the minimum information that
|
// Check that we have at least weight & timestamp, which is the minimum information that
|
||||||
// ScaleMeasurement needs.
|
// ScaleMeasurement needs.
|
||||||
if (data.length < 9) {
|
if (data.length < 9) {
|
||||||
return; // data is too short
|
return null; // data is too short
|
||||||
}
|
}
|
||||||
byte infoByte = data[0];
|
byte infoByte = data[0];
|
||||||
boolean hasTimestamp = (infoByte & 1) == 1;
|
boolean hasTimestamp = (infoByte & 1) == 1;
|
||||||
boolean hasResistance1 = (infoByte & 2) == 2;
|
boolean hasResistance1 = (infoByte & 2) == 2;
|
||||||
boolean hasResistance2 = (infoByte & 4) == 4;
|
boolean hasResistance2 = (infoByte & 4) == 4;
|
||||||
if (!hasTimestamp) {
|
if (!hasTimestamp) {
|
||||||
Timber.e("Failed to parse scale measure measurement data: %s", byteInHex(data));
|
return null;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
float weightKg = getBase10Float(data, 1);
|
float weightKg = getBase10Float(data, 1);
|
||||||
int deviceTimestamp = Converters.fromSignedInt32Le(data, 5);
|
int deviceTimestamp = Converters.fromSignedInt32Le(data, 5);
|
||||||
@@ -307,7 +316,7 @@ public class BluetoothTrisaBodyAnalyze extends BluetoothCommunication {
|
|||||||
measurement.setBone(trisaBodyAnalyzeLib.getBone(weightKg, impedance));
|
measurement.setBone(trisaBodyAnalyzeLib.getBone(weightKg, impedance));
|
||||||
}
|
}
|
||||||
|
|
||||||
addScaleData(measurement);
|
return measurement;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Write a single command byte, without any arguments. */
|
/** Write a single command byte, without any arguments. */
|
||||||
@@ -363,17 +372,17 @@ public class BluetoothTrisaBodyAnalyze extends BluetoothCommunication {
|
|||||||
*
|
*
|
||||||
* @throws IndexOutOfBoundsException if {@code offset < 0} or {@code offset + 4> data.length}
|
* @throws IndexOutOfBoundsException if {@code offset < 0} or {@code offset + 4> data.length}
|
||||||
*/
|
*/
|
||||||
private float getBase10Float(byte[] data, int offset) {
|
public float getBase10Float(byte[] data, int offset) {
|
||||||
int mantissa = Converters.fromUnsignedInt24Le(data, offset);
|
int mantissa = Converters.fromUnsignedInt24Le(data, offset);
|
||||||
int exponent = data[offset + 3]; // note: byte is signed.
|
int exponent = data[offset + 3]; // note: byte is signed.
|
||||||
return mantissa * (float)Math.pow(10, exponent);
|
return (float)(mantissa * Math.pow(10, exponent));
|
||||||
}
|
}
|
||||||
|
|
||||||
private int convertJavaTimestampToDevice(long javaTimestampMillis) {
|
public int convertJavaTimestampToDevice(long javaTimestampMillis) {
|
||||||
return (int)((javaTimestampMillis + 500)/1000 - TIMESTAMP_OFFSET_SECONDS);
|
return (int)((javaTimestampMillis + 500)/1000 - TIMESTAMP_OFFSET_SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private long convertDeviceTimestampToJava(int deviceTimestampSeconds) {
|
public long convertDeviceTimestampToJava(int deviceTimestampSeconds) {
|
||||||
return 1000 * (TIMESTAMP_OFFSET_SECONDS + (long)deviceTimestampSeconds);
|
return 1000 * (TIMESTAMP_OFFSET_SECONDS + (long)deviceTimestampSeconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user