From 2e5bdf7f208d6a5f2c1da3f49eeb43dc20e194a5 Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:12:11 +0100 Subject: [PATCH 1/8] feat(camera): simplify onAccuracyChanged method --- .../lookupgroup27/lookup/model/map/Camera.kt | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt b/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt index 4b6358834..1cd0c1846 100644 --- a/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt +++ b/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt @@ -5,7 +5,6 @@ import android.hardware.SensorEvent import android.hardware.SensorEventListener import android.hardware.SensorManager import android.opengl.Matrix -import android.util.Log /** * Represents a camera for handling movement and projection in our OpenGL World. @@ -75,21 +74,5 @@ class Camera(private var fov: Float) : SensorEventListener { } } - override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) { - when (sensor?.type) { - Sensor.TYPE_ROTATION_VECTOR -> { - when (accuracy) { - SensorManager.SENSOR_STATUS_UNRELIABLE -> { - Log.w("SensorAccuracy", "Rotation vector sensor is unreliable") - } - SensorManager.SENSOR_STATUS_ACCURACY_LOW -> { - Log.i("SensorAccuracy", "Rotation vector sensor accuracy is low") - } - SensorManager.SENSOR_STATUS_ACCURACY_HIGH -> { - Log.d("SensorAccuracy", "Rotation vector sensor accuracy is high") - } - } - } - } - } + override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {} } From d334c44bdb90cb77c1ae2997217a4d879a194d11 Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:12:53 +0100 Subject: [PATCH 2/8] test(map): add GeometryUtilsTest test class --- .../renderables/utils/GeometryUtilsTest.kt | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/GeometryUtilsTest.kt diff --git a/app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/GeometryUtilsTest.kt b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/GeometryUtilsTest.kt new file mode 100644 index 000000000..1660693e9 --- /dev/null +++ b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/GeometryUtilsTest.kt @@ -0,0 +1,78 @@ +package com.github.lookupgroup27.lookup.model.map.renderables.utils + +import org.junit.Assert.assertArrayEquals +import org.junit.Assert.assertEquals +import org.junit.Test + +class GeometryUtilsTest { + + @Test + fun testGenerateCircularGeometry_vertices() { + val numSegments = 4 + val geometryData = GeometryUtils.generateCircularGeometry(numSegments) + + // Expected vertices for a 4-segment circle + val expectedVertices = + floatArrayOf( + 0f, + 0f, + 0f, // Center vertex + 1f, + 0f, + 0f, // First segment + 0f, + 1f, + 0f, // Second segment + -1f, + 0f, + 0f, // Third segment + 0f, + -1f, + 0f, // Fourth segment + 1f, + 0f, + 0f // Wrap around to the first segment + ) + + // Assert that the vertices match + assertArrayEquals(expectedVertices, geometryData.vertices, 0.001f) + } + + @Test + fun testGenerateCircularGeometry_indices() { + val numSegments = 4 + val geometryData = GeometryUtils.generateCircularGeometry(numSegments) + + // Expected indices for a 4-segment circle + val expectedIndices = + shortArrayOf( + 0, + 1, + 2, // Triangle 1 + 0, + 2, + 3, // Triangle 2 + 0, + 3, + 4, // Triangle 3 + 0, + 4, + 1 // Triangle 4 (wrap around) + ) + + // Assert that the indices match + assertArrayEquals(expectedIndices, geometryData.indices) + } + + @Test + fun testGenerateCircularGeometry_numberOfVerticesAndIndices() { + val numSegments = 32 + val geometryData = GeometryUtils.generateCircularGeometry(numSegments) + + // The number of vertices should be numSegments + 2 (center + one for wraparound) + assertEquals(numSegments + 2, geometryData.vertices.size / 3) + + // The number of indices should be numSegments * 3 (3 indices per triangle) + assertEquals(numSegments * 3, geometryData.indices.size) + } +} From 84074e2f3225589a88f5072c0768471cd7d23f6a Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:13:13 +0100 Subject: [PATCH 3/8] test(profile-pic): add ChangeAvatarButtonTest test class --- .../ui/profile/ChangeAvatarButtonTest.kt | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ChangeAvatarButtonTest.kt diff --git a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ChangeAvatarButtonTest.kt b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ChangeAvatarButtonTest.kt new file mode 100644 index 000000000..2c0c21be3 --- /dev/null +++ b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/profile/ChangeAvatarButtonTest.kt @@ -0,0 +1,60 @@ +package com.github.lookupgroup27.lookup.ui.profile + +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import com.github.lookupgroup27.lookup.R +import com.github.lookupgroup27.lookup.ui.profile.components.ChangeAvatarButton +import org.junit.Rule +import org.junit.Test + +class ChangeAvatarButtonTest { + + @get:Rule val composeTestRule = createComposeRule() + + @Test + fun changeAvatarButton_isDisplayed_whenAvatarIsNotDefaultOrNull() { + // Set up the test + composeTestRule.setContent { + ChangeAvatarButton( + selectedAvatar = R.drawable.avatar1, isAvatarDefaultOrNull = false, onButtonClick = {}) + } + + // Verify the button is displayed + composeTestRule.onNodeWithText("Change Avatar").assertIsDisplayed() + } + + @Test + fun changeAvatarButton_isNotDisplayed_whenAvatarIsDefaultOrNull() { + // Set up the test + composeTestRule.setContent { + ChangeAvatarButton( + selectedAvatar = R.drawable.default_profile_icon, + isAvatarDefaultOrNull = true, + onButtonClick = {}) + } + + // Verify the button does not exist + composeTestRule.onNodeWithText("Change Avatar").assertDoesNotExist() + } + + @Test + fun changeAvatarButton_triggersOnClick_whenClicked() { + var isClicked = false + + // Set up the test + composeTestRule.setContent { + ChangeAvatarButton( + selectedAvatar = R.drawable.avatar1, + isAvatarDefaultOrNull = false, + onButtonClick = { isClicked = true }) + } + + // Perform a click on the button + composeTestRule.onNodeWithText("Change Avatar").performClick() + + // Verify the callback was invoked + assert(isClicked) + } +} From cea861fdf40e6b047f6642c7018456efe62f2a23 Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:21:40 +0100 Subject: [PATCH 4/8] test(opengl-utils): add BufferUtilsTest test class to test ShortArrayToBuffer method --- .../map/renderables/utils/BufferUtilsTest.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/BufferUtilsTest.kt diff --git a/app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/BufferUtilsTest.kt b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/BufferUtilsTest.kt new file mode 100644 index 000000000..7a11bb390 --- /dev/null +++ b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/renderables/utils/BufferUtilsTest.kt @@ -0,0 +1,28 @@ +package com.github.lookupgroup27.lookup.model.map.renderables.utils + +import com.github.lookupgroup27.lookup.util.opengl.BufferUtils.toBuffer +import java.nio.ShortBuffer +import org.junit.Assert.assertArrayEquals +import org.junit.Test + +class BufferUtilsTest { + + @Test + fun testShortArrayToBuffer() { + // Input short array + val inputArray = shortArrayOf(1, 2, 3, 4, 5) + + // Convert the array to a ShortBuffer + val buffer: ShortBuffer = inputArray.toBuffer() + + // Verify the buffer's capacity + assert(buffer.capacity() == inputArray.size) + + // Create an output array and read the buffer's contents into it + val outputArray = ShortArray(inputArray.size) + buffer.get(outputArray) + + // Verify the output array matches the input array + assertArrayEquals(inputArray, outputArray) + } +} From 8ce58e9b7a7926593c4b2110eeefd8b6405d25db Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:30:46 +0100 Subject: [PATCH 5/8] test(camera): write test for onAccuracyChanged method --- .../lookup/model/map/CameraTest.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 app/src/test/java/com/github/lookupgroup27/lookup/model/map/CameraTest.kt diff --git a/app/src/test/java/com/github/lookupgroup27/lookup/model/map/CameraTest.kt b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/CameraTest.kt new file mode 100644 index 000000000..f4fcff928 --- /dev/null +++ b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/CameraTest.kt @@ -0,0 +1,22 @@ +package com.github.lookupgroup27.lookup.model.map + +import android.hardware.Sensor +import android.hardware.SensorManager +import org.junit.Test +import org.mockito.Mockito.mock +import org.mockito.Mockito.times +import org.mockito.Mockito.verify + +class CameraTest { + + @Test + fun testOnAccuracyChanged() { + val sensor = mock(Sensor::class.java) + val camera = Camera(90f) + + camera.onAccuracyChanged(sensor, SensorManager.SENSOR_STATUS_ACCURACY_HIGH) + + // Since the method does nothing, we just verify that it can be called without exceptions + verify(sensor, times(0)).type // This is just to use the sensor mock + } +} From dea988736245ed417c284dfeeac0b2714da15ef0 Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:38:01 +0100 Subject: [PATCH 6/8] test(sample-screen): add SampleScreenTest test class --- .../lookup/ui/overview/SampleScreenTest.kt | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/overview/SampleScreenTest.kt diff --git a/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/overview/SampleScreenTest.kt b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/overview/SampleScreenTest.kt new file mode 100644 index 000000000..84d684525 --- /dev/null +++ b/app/src/androidTest/java/com/github/lookupgroup27/lookup/ui/overview/SampleScreenTest.kt @@ -0,0 +1,55 @@ +package com.github.lookupgroup27.lookup.ui.overview + +import androidx.compose.ui.test.* +import androidx.compose.ui.test.junit4.createComposeRule +import com.github.lookupgroup27.lookup.ui.navigation.NavigationActions +import org.junit.Rule +import org.junit.Test +import org.mockito.kotlin.mock + +class SampleScreenTest { + + @get:Rule val composeTestRule = createComposeRule() + + private val mockNavigationActions: NavigationActions = mock() + + @Test + fun sampleScreen_displaysCorrectText() { + // Set up test input + val testText = "Sample Screen Text" + val screenTag = "sampleScreenTag" + val backButtonTag = "backButtonTag" + + // Render the composable + composeTestRule.setContent { + SampleScreen( + screenText = testText, + navigationActions = mockNavigationActions, + screenTag = screenTag, + backButtonTag = backButtonTag) + } + + // Verify the screen text is displayed + composeTestRule.onNodeWithText(testText).assertIsDisplayed() + } + + @Test + fun sampleScreen_hasCorrectTestTags() { + // Set up test input + val screenTag = "sampleScreenTag" + val backButtonTag = "backButtonTag" + + // Render the composable + composeTestRule.setContent { + SampleScreen( + screenText = "Sample Screen Text", + navigationActions = mockNavigationActions, + screenTag = screenTag, + backButtonTag = backButtonTag) + } + + // Verify the test tags are present + composeTestRule.onNodeWithTag(screenTag).assertIsDisplayed() + composeTestRule.onNodeWithTag(backButtonTag).assertIsDisplayed() + } +} From 790456c2a1d3e563076bba72eda28fe35d32eb0e Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:41:56 +0100 Subject: [PATCH 7/8] feat(camera): change onAccuracyChanged method --- .../java/com/github/lookupgroup27/lookup/model/map/Camera.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt b/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt index 1cd0c1846..34b01c8e2 100644 --- a/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt +++ b/app/src/main/java/com/github/lookupgroup27/lookup/model/map/Camera.kt @@ -74,5 +74,5 @@ class Camera(private var fov: Float) : SensorEventListener { } } - override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {} + override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) = Unit } From 9c8c2e0d67ff3e1cf883cdca693f615cb622794c Mon Sep 17 00:00:00 2001 From: Kenzoud Date: Thu, 19 Dec 2024 16:48:02 +0100 Subject: [PATCH 8/8] test(star): add StarsLoaderTest test class to test StarsLoader --- .../lookup/model/map/stars/StarsLoaderTest.kt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/src/test/java/com/github/lookupgroup27/lookup/model/map/stars/StarsLoaderTest.kt diff --git a/app/src/test/java/com/github/lookupgroup27/lookup/model/map/stars/StarsLoaderTest.kt b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/stars/StarsLoaderTest.kt new file mode 100644 index 000000000..b8ce1f912 --- /dev/null +++ b/app/src/test/java/com/github/lookupgroup27/lookup/model/map/stars/StarsLoaderTest.kt @@ -0,0 +1,45 @@ +package com.github.lookupgroup27.lookup.model.map.stars + +import android.content.Context +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.mockito.Mockito.* + +class StarsLoaderTest { + + private lateinit var mockContext: Context + private lateinit var mockRepository: StarDataRepository + private lateinit var starsLoader: StarsLoader + + @Before + fun setUp() { + mockContext = mock(Context::class.java) + mockRepository = mock(StarDataRepository::class.java) + starsLoader = StarsLoader(mockContext, mockRepository) + } + + @Test + fun testLoadStars_callsUpdateStarPositions() { + // Arrange: Set up the mock repository + `when`(mockRepository.getUpdatedStars()).thenReturn(emptyList()) + + // Act: Call loadStars + starsLoader.loadStars() + + // Assert: Verify that updateStarPositions was called + verify(mockRepository).updateStarPositions() + } + + @Test + fun testLoadStars_handlesEmptyStarDataList() { + // Arrange: Return an empty star data list + `when`(mockRepository.getUpdatedStars()).thenReturn(emptyList()) + + // Act: Call loadStars + val stars = starsLoader.loadStars() + + // Assert: Verify the result is an empty list + assertEquals(0, stars.size) + } +}