/* Copyright (C) 2023 José Rebelo This file is part of Gadgetbridge. Gadgetbridge is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gadgetbridge is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.activity; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Test; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayList; import java.util.Date; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.util.GB; public class XiaomiActivityFileIdTest { @Test public void testEncode() { final byte[] expectedEncoding = GB.hexStringToByteArray("21F3286504008C"); final XiaomiActivityFileId xiaomiActivityFileId = new XiaomiActivityFileId( new Date(1697182497000L), 4, 3, 1, 8, 0 ); assertArrayEquals(expectedEncoding, xiaomiActivityFileId.toBytes()); } @Test public void testDecode() { final byte[] bytes = GB.hexStringToByteArray("21F328650403A0"); final XiaomiActivityFileId expectedFileId = XiaomiActivityFileId.from(bytes); assertEquals(1697182497000L, expectedFileId.getTimestamp().getTime()); assertEquals(4, expectedFileId.getTimezone()); assertEquals(3, expectedFileId.getVersion()); assertEquals(XiaomiActivityFileId.Type.SPORTS, expectedFileId.getType()); assertEquals(XiaomiActivityFileId.Subtype.SPORTS_FREESTYLE, expectedFileId.getSubtype()); assertEquals(XiaomiActivityFileId.DetailType.DETAILS, expectedFileId.getDetailType()); } @Test public void testDecodeEncode() { final byte[] bytes = GB.hexStringToByteArray("21F328650403A021F3286504008C"); final ByteBuffer bufDecode = ByteBuffer.wrap(bytes).order(ByteOrder.LITTLE_ENDIAN); final List fileIds = new ArrayList<>(); while (bufDecode.position() < bufDecode.limit()) { final XiaomiActivityFileId fileId = XiaomiActivityFileId.from(bufDecode); fileIds.add(fileId); System.out.println(fileId); } final ByteBuffer bufEncode = ByteBuffer.allocate(fileIds.size() * 7).order(ByteOrder.LITTLE_ENDIAN); for (final XiaomiActivityFileId fileId : fileIds) { bufEncode.put(fileId.toBytes()); } assertArrayEquals(bytes, bufEncode.array()); } @Test public void testZero() { final XiaomiActivityFileId fileId = XiaomiActivityFileId.from(new byte[]{0, 0, 0, 0, 0, 0, 0}); assertTrue(fileId.getTimestamp().getTime() == 0 && fileId.getVersion() == 0); } }