diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml index 7e0e41a..550afe3 100644 --- a/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/composeApp/src/commonMain/composeResources/values/strings.xml @@ -17,7 +17,8 @@ Difficile Impossible - Création de personnage + Création de personnage + Édition de personnage Nom Ajouter une action Sauvegarder @@ -67,7 +68,6 @@ Supprimer Compétence d'occupation - État diminuer Modifier Supprimer diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt index 7a9bff5..c9a257b 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/App.kt @@ -143,7 +143,7 @@ private fun WindowsHandler( is CharacterSheetCreateWindow -> CharacterSheetMainNavHost( startDestination = CharacterSheetEditDestination.navigationRoute( - id = null, + id = window.sheetId, enableBack = false, ), ) diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/WindowNavHost.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/WindowNavHost.kt index 66e221e..87d6bf1 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/WindowNavHost.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/WindowNavHost.kt @@ -5,21 +5,27 @@ import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.Stable import androidx.compose.runtime.State import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.window.Window +import androidx.compose.ui.window.WindowState +import androidx.compose.ui.window.rememberWindowState import com.pixelized.desktop.lwa.navigation.window.destination.Window val LocalWindow = compositionLocalOf { error("Local Window is not yet ready") } +val LocalWindowState = compositionLocalOf { + error("Local Window state is not yet ready") +} @Stable class WindowController { - private val _windows = mutableStateOf>(emptySet()) - val windows: State> get() = _windows + private val _windows = mutableStateOf>(emptyMap()) + val windows: State> get() = _windows fun showWindow(window: Window) { - _windows.value = _windows.value.toMutableSet().apply { add(window) } + _windows.value = _windows.value.toMutableMap().apply { this[window.id] = window } } fun hideWindow(window: Window) { @@ -27,7 +33,7 @@ class WindowController { } fun hideWindow(id: String) { - _windows.value = _windows.value.toMutableSet().apply { removeIf { it.id == id } } + _windows.value = _windows.value.toMutableMap().apply { this.remove(id) } } } @@ -36,16 +42,20 @@ fun WindowsNavHost( controller: WindowController, content: @Composable (Window) -> Unit, ) { - controller.windows.value.forEach { window -> - CompositionLocalProvider( - LocalWindow provides window, - ) { - Window( - onCloseRequest = { controller.hideWindow(id = window.id) }, - state = window.state, - title = window.title, + controller.windows.value.forEach { (id, window) -> + key(id) { + val state = rememberWindowState(size = window.size) + CompositionLocalProvider( + LocalWindow provides window, + LocalWindowState provides state, ) { - content.invoke(window) + Window( + onCloseRequest = { controller.hideWindow(id = window.id) }, + state = state, + title = window.title, + ) { + content.invoke(window) + } } } } diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/CharacterSheetCreateWindow.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/CharacterSheetCreateWindow.kt index fa5ef18..4c0fe67 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/CharacterSheetCreateWindow.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/CharacterSheetCreateWindow.kt @@ -5,8 +5,11 @@ import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp @Stable -class CharacterSheetCreateWindow : Window( - title = "", +class CharacterSheetCreateWindow( + title: String, + val sheetId: String?, +) : Window( + title = title, size = size, ) { companion object { diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/Window.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/Window.kt index eea81b4..533d681 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/Window.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/navigation/window/destination/Window.kt @@ -1,32 +1,12 @@ package com.pixelized.desktop.lwa.navigation.window.destination import androidx.compose.runtime.Stable -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.window.WindowPlacement -import androidx.compose.ui.window.WindowPosition -import androidx.compose.ui.window.WindowState import java.util.UUID @Stable sealed class Window( val id: String = UUID.randomUUID().toString(), val title: String, - size: DpSize, -) { - val state = WindowState( - placement = WindowPlacement.Floating, - isMinimized = false, - position = WindowPosition.PlatformDefault, - width = size.width, - height = size.height, - ) - - val width: Dp get() = state.size.width - val height: Dp get() = state.size.height - val size: DpSize get() = state.size - - suspend fun resize(size: DpSize) { - state.size = size - } -} \ No newline at end of file + val size: DpSize, +) \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/detail/CharacterSheetPage.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/detail/CharacterSheetPage.kt index 64c5b52..8d9e766 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/detail/CharacterSheetPage.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/detail/CharacterSheetPage.kt @@ -41,7 +41,6 @@ import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.Edit import androidx.compose.material.icons.filled.MoreVert import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.Stable import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf @@ -60,15 +59,15 @@ import com.pixelized.desktop.lwa.composable.decoratedBox.DecoratedBox import com.pixelized.desktop.lwa.composable.tooltip.TooltipLayout import com.pixelized.desktop.lwa.composable.tooltip.TooltipUio import com.pixelized.desktop.lwa.navigation.screen.LocalScreenController -import com.pixelized.desktop.lwa.navigation.screen.destination.navigateToCharacterSheetEdit import com.pixelized.desktop.lwa.navigation.window.LocalWindow -import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetWindow +import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetCreateWindow import com.pixelized.desktop.lwa.screen.characterSheet.detail.dialog.CharacterSheetDeleteConfirmationDialog import com.pixelized.desktop.lwa.screen.characterSheet.detail.dialog.CharacterSheetStatDialog import com.pixelized.desktop.lwa.screen.characterSheet.detail.dialog.DiminishedStatDialog import com.pixelized.desktop.lwa.screen.roll.RollPage import com.pixelized.desktop.lwa.screen.roll.RollViewModel import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking import lwacharactersheet.composeapp.generated.resources.Res import lwacharactersheet.composeapp.generated.resources.character_sheet__delete__label import lwacharactersheet.composeapp.generated.resources.character_sheet__edit__label @@ -76,8 +75,10 @@ import lwacharactersheet.composeapp.generated.resources.character_sheet__skills_ import lwacharactersheet.composeapp.generated.resources.character_sheet__skills__magic_title import lwacharactersheet.composeapp.generated.resources.character_sheet__skills__special_title import lwacharactersheet.composeapp.generated.resources.character_sheet__sub_characteristics__title +import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__edit__title import lwacharactersheet.composeapp.generated.resources.ic_d20_32dp import lwacharactersheet.composeapp.generated.resources.ic_skull_32dp +import org.jetbrains.compose.resources.getString import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel @@ -128,10 +129,6 @@ fun CharacterSheetPage( val scope = rememberCoroutineScope() val blurController = remember { BlurContentController() } - LaunchedEffect(Unit) { - window.resize(size = CharacterSheetWindow.size) - } - Surface( modifier = Modifier.fillMaxSize(), ) { @@ -150,9 +147,11 @@ fun CharacterSheetPage( } }, onEdit = { - screen.navigateToCharacterSheetEdit( - id = sheet.id, - enableBack = true, + windowController.showWindow( + window = CharacterSheetCreateWindow( + title = runBlocking { getString(Res.string.character_sheet_edit__edit__title) }, + sheetId = sheet.id, + ), ) }, onDelete = { diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/edit/CharacterSheetEditPage.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/edit/CharacterSheetEditPage.kt index 5febf95..b2a411a 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/edit/CharacterSheetEditPage.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/characterSheet/edit/CharacterSheetEditPage.kt @@ -21,7 +21,6 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material.icons.filled.Add import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.Stable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -33,7 +32,6 @@ import com.pixelized.desktop.lwa.LocalWindowController import com.pixelized.desktop.lwa.composable.decoratedBox.DecoratedBox import com.pixelized.desktop.lwa.navigation.screen.LocalScreenController import com.pixelized.desktop.lwa.navigation.window.LocalWindow -import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetCreateWindow import com.pixelized.desktop.lwa.screen.characterSheet.edit.composable.BaseSkillFieldUio import com.pixelized.desktop.lwa.screen.characterSheet.edit.composable.BaseSkillForm import com.pixelized.desktop.lwa.screen.characterSheet.edit.composable.FieldUio @@ -51,7 +49,6 @@ import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__sa import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__skills__magic_action import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__skills__special_action import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__sub_characteristics__title -import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__title import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel @@ -106,14 +103,11 @@ fun CharacterSheetEditPage( val screen = LocalScreenController.current val scope = rememberCoroutineScope() - LaunchedEffect(Unit) { - window.resize(size = CharacterSheetCreateWindow.size) - } - Surface( modifier = Modifier.fillMaxSize(), ) { CharacterSheetEdit( + title = window.title, form = viewModel.characterSheet.value, onBack = remember { if (viewModel.enableBack) { @@ -151,6 +145,8 @@ fun CharacterSheetEditPage( @Composable fun CharacterSheetEdit( + modifier: Modifier = Modifier, + title: String, form: CharacterSheetEditPageUio, onBack: (() -> Unit)?, onNewSpecialSkill: () -> Unit, @@ -159,13 +155,14 @@ fun CharacterSheetEdit( onSave: () -> Unit, ) { Scaffold( + modifier = modifier, topBar = { TopAppBar( title = { Text( overflow = TextOverflow.Ellipsis, maxLines = 1, - text = stringResource(Res.string.character_sheet_edit__title), + text = title, ) }, navigationIcon = onBack?.let { action: () -> Unit -> diff --git a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/main/MainPage.kt b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/main/MainPage.kt index f5f4c09..8190424 100644 --- a/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/main/MainPage.kt +++ b/composeApp/src/commonMain/kotlin/com/pixelized/desktop/lwa/screen/main/MainPage.kt @@ -25,10 +25,13 @@ import com.pixelized.desktop.lwa.navigation.screen.destination.navigateToNetwork import com.pixelized.desktop.lwa.navigation.screen.destination.navigateToRollHistory import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetCreateWindow import com.pixelized.desktop.lwa.navigation.window.destination.CharacterSheetWindow +import kotlinx.coroutines.runBlocking import lwacharactersheet.composeapp.generated.resources.Res +import lwacharactersheet.composeapp.generated.resources.character_sheet_edit__create__title import lwacharactersheet.composeapp.generated.resources.main_page__create_action import lwacharactersheet.composeapp.generated.resources.main_page__network_action import lwacharactersheet.composeapp.generated.resources.main_page__roll_history_action +import org.jetbrains.compose.resources.getString import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel @@ -66,7 +69,12 @@ fun MainPage( ) }, onCreateCharacter = { - window.showWindow(window = CharacterSheetCreateWindow()) + window.showWindow( + window = CharacterSheetCreateWindow( + title = runBlocking { getString(Res.string.character_sheet_edit__create__title) }, + sheetId = null, + ) + ) }, onRollHistory = { screen.navigateToRollHistory() diff --git a/server/.gitignore b/server/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/server/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/server/build.gradle.kts b/server/build.gradle.kts new file mode 100644 index 0000000..494178b --- /dev/null +++ b/server/build.gradle.kts @@ -0,0 +1,44 @@ +plugins { + alias(libs.plugins.androidApplication) + alias(libs.plugins.kotlinAndroid) +} + +android { + namespace = "com.pixelized.server" + compileSdk = 34 + + defaultConfig { + applicationId = "com.pixelized.server" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "android.support.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } +} + +dependencies { + + implementation(libs.appcompat.v7) + testImplementation(libs.junit) + androidTestImplementation(libs.runner) + androidTestImplementation(libs.espresso.core) +} \ No newline at end of file diff --git a/server/proguard-rules.pro b/server/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/server/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/server/src/androidTest/java/com/pixelized/server/ExampleInstrumentedTest.kt b/server/src/androidTest/java/com/pixelized/server/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..6b7d46f --- /dev/null +++ b/server/src/androidTest/java/com/pixelized/server/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.pixelized.server + +import android.support.test.InstrumentationRegistry +import android.support.test.runner.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.pixelized.server", appContext.packageName) + } +} \ No newline at end of file diff --git a/server/src/main/AndroidManifest.xml b/server/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a2157ec --- /dev/null +++ b/server/src/main/AndroidManifest.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/server/src/main/res/drawable/ic_launcher_background.xml b/server/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/server/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/server/src/main/res/drawable/ic_launcher_foreground.xml b/server/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/server/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/server/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/server/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/server/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/server/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/server/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/server/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/server/src/main/res/mipmap-hdpi/ic_launcher.webp b/server/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/server/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/server/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/server/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/server/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/server/src/main/res/mipmap-mdpi/ic_launcher.webp b/server/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/server/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/server/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/server/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/server/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/server/src/main/res/mipmap-xhdpi/ic_launcher.webp b/server/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/server/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/server/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/server/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/server/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/server/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/server/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/server/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/server/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/server/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/server/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/server/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/server/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/server/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/server/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/server/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/server/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/server/src/main/res/values-night/themes.xml b/server/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..b112a1c --- /dev/null +++ b/server/src/main/res/values-night/themes.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/server/src/main/res/values/colors.xml b/server/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/server/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/server/src/main/res/values/strings.xml b/server/src/main/res/values/strings.xml new file mode 100644 index 0000000..8d8a20c --- /dev/null +++ b/server/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + server + \ No newline at end of file diff --git a/server/src/main/res/values/themes.xml b/server/src/main/res/values/themes.xml new file mode 100644 index 0000000..17c56b5 --- /dev/null +++ b/server/src/main/res/values/themes.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/server/src/test/java/com/pixelized/server/ExampleUnitTest.kt b/server/src/test/java/com/pixelized/server/ExampleUnitTest.kt new file mode 100644 index 0000000..d95fbd9 --- /dev/null +++ b/server/src/test/java/com/pixelized/server/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.pixelized.server + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file