Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 36 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id("io.qameta.allure") version "2.12.0"
}

def allureVersion = "2.16.0"
def aspectJVersion = '1.9.21'
configurations {
agent {
canBeResolved = true
canBeConsumed = true
}
}

android {
Expand All @@ -10,7 +21,7 @@ android {
targetSdk 34
versionCode 191
versionName "7.4.4"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunner "com.kaspersky.kaspresso.runner.KaspressoRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [eventBusIndex: 'ml.docilealligator.infinityforreddit.EventBusIndex']
Expand Down Expand Up @@ -49,11 +60,22 @@ android {
}
}

testOptions {
unitTests.returnDefaultValues = true
unitTests.all {
useJUnitPlatform()
}
}

buildFeatures {
buildConfig = true
viewBinding = true
}
namespace 'ml.docilealligator.infinityforreddit'

kotlinOptions {
jvmTarget = '11'
}
}

dependencies {
Expand Down Expand Up @@ -197,4 +219,17 @@ dependencies {
/**** Builds and flavors ****/
// debugImplementation because LeakCanary should only run in debug builds.
//debugImplementation 'com.squareup.leakcanary:leakcanary-android:x.y'

testImplementation platform("io.qameta.allure:allure-bom:$allureVersion")
testImplementation "io.qameta.allure:allure-junit5"
agent "org.aspectj:aspectjweaver:$aspectJVersion"

androidTestImplementation "androidx.test.ext:junit:1.0.0"
androidTestImplementation "androidx.test:rules:1.5.0"
androidTestImplementation "androidx.test:runner:1.5.0"

androidTestImplementation 'com.kaspersky.android-components:kaspresso:1.5.3'
androidTestUtil "androidx.test:orchestrator:1.5.1"
// Allure support
androidTestImplementation "com.kaspersky.android-components:kaspresso-allure-support:1.5.3"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ru.otus.pandina.screens

import com.kaspersky.kaspresso.screens.KScreen
import io.github.kakaocup.kakao.edit.KEditText
import io.github.kakaocup.kakao.switch.KSwitch
import io.github.kakaocup.kakao.text.KButton
import io.github.kakaocup.kakao.text.KTextView
import io.github.kakaocup.kakao.toolbar.KToolbar
import ml.docilealligator.infinityforreddit.R

object CustomizePostFilterScreen : KScreen<CustomizePostFilterScreen>() {

val toolBar = KToolbar{withId(R.id.toolbar_customize_post_filter_activity)}

val customizeFilterEditText = KEditText { withId(R.id.name_text_input_edit_text_customize_post_filter_activity)}

val textFilterTextView = KTextView { withId(R.id.post_type_text_text_view_customize_post_filter_activity)}

val textFilterCheckBox = KSwitch { withId(R.id.post_type_text_switch_customize_post_filter_activity)}

val linkFilterTextView = KTextView { withId(R.id.post_type_link_text_view_customize_post_filter_activity)}

val linkFilterCheckBox = KSwitch { withId(R.id.post_type_link_switch_customize_post_filter_activity)}

val onlyNsfwTextView = KTextView { withId(R.id.only_nsfw_text_view_customize_post_filter_activity)}

val saveButton = KButton { withId(R.id.action_save_customize_post_filter_activity)}
override val layoutId: Int? = null
override val viewClass: Class<*>? = null
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package ru.otus.pandina.screens

import android.view.View
import com.kaspersky.kaspresso.screens.KScreen
import io.github.kakaocup.kakao.image.KImageView
import io.github.kakaocup.kakao.recycler.KRecyclerItem
import io.github.kakaocup.kakao.recycler.KRecyclerView
import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KButton
import io.github.kakaocup.kakao.text.KTextView
import ml.docilealligator.infinityforreddit.R
import ml.docilealligator.infinityforreddit.activities.FilteredPostsActivity
import org.hamcrest.Matcher

object FilteredPostsScreen : KScreen<FilteredPostsScreen>() {

val filterButton = KButton { withId(R.id.fab_filtered_thing_activity) }

val moreOptions = KImageView { withContentDescription("More options")}

val changePostLayout = KTextView { withText("Change Post Layout")}

val postFragmentList = KRecyclerView(
builder = { withId(R.id.recycler_view_post_fragment) },
itemTypeBuilder = { itemType(::PostFragmentItem) }
)

class PostFragmentItem(parent: Matcher<View>) : KRecyclerItem<PostFragmentItem>(parent) {
val title = KTextView(parent) { withId(R.id.title_text_view_item_post_with_preview) }
val image = KImageView(parent) { withId(R.id.image_view_item_post_with_preview) }

val galleryImage = KImageView(parent) { withResourceName("image_view_item_post_gallery")}
}

override val layoutId: Int? = R.layout.activity_filtered_thing
override val viewClass: Class<*>? = FilteredPostsActivity::class.java
}
16 changes: 16 additions & 0 deletions app/src/androidTest/kotlin/ru/otus/pandina/screens/MainScreen.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package ru.otus.pandina.screens

import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.tabs.KTabLayout
import io.github.kakaocup.kakao.text.KButton
import ml.docilealligator.infinityforreddit.R

object MainScreen : Screen<MainScreen>() {

val button = KButton { withId(R.id.fab_main_activity) }

val tabLayout = KTabLayout { withId(R.id.tab_layout_main_activity) }

val navButton = KButton { withContentDescription("Open navigation drawer") }

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.otus.pandina.screens

import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KButton
import io.github.kakaocup.kakao.text.KTextView
import ml.docilealligator.infinityforreddit.R

object UserAgreementFragment : Screen<UserAgreementFragment>() {

val alertTitle = KTextView { withId(R.id.alertTitle)}

val dontAgreeButton = KButton { withText("Don't Agree")}

val agreeButton = KButton { withText("Agree")}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.pandina.screens.navigation

import io.github.kakaocup.kakao.edit.KEditText
import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KButton
import io.github.kakaocup.kakao.web.KWebView
import ml.docilealligator.infinityforreddit.R

object LoginScreen : Screen<LoginScreen>() {

val userNameField = KEditText { withText("Username")}

val loginPasswordField = KEditText { withResourceName("loginPassword")}

val loginButton = KButton { withText("Log In")}

val webView = KWebView { withId(R.id.webview_login_activity)}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package ru.otus.pandina.screens.navigation

import android.view.View
import io.github.kakaocup.kakao.image.KImageView
import io.github.kakaocup.kakao.recycler.KRecyclerItem
import io.github.kakaocup.kakao.recycler.KRecyclerView
import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KTextView
import ml.docilealligator.infinityforreddit.R
import org.hamcrest.Matcher

object NavigationViewLayout : Screen<NavigationViewLayout>() {

val navBanner = KImageView{withId(R.id.banner_image_view_nav_header_main)}

val accountNameTextView = KTextView { withId(R.id.name_text_view_nav_header_main) }

val karmaTextView = KTextView { withId(R.id.karma_text_view_nav_header_main) }

val accountSwitcher = KImageView { withId(R.id.account_switcher_image_view_nav_header_main) }

val addAccountButton = KImageView { withId(R.id.image_view_item_nav_drawer_menu_item) }

val addAccountTextView = KTextView { withId(R.id.text_view_item_nav_drawer_menu_item) }

val subscriptions = KTextView { withText("Subscriptions") }

val multireddit = KTextView { withText("Multireddit") }

val historyIcon = KImageView { withId(R.id.image_view_item_nav_drawer_menu_item) }

val trending = KTextView { withText("Trending") }

val darkThemeIcon = KImageView { withDrawable(R.drawable.ic_dark_theme_24dp) }

val darkTheme = KTextView { withText("Dark Theme") }

val lightThemeIcon = KImageView { withDrawable(R.drawable.ic_light_theme_24dp) }

val lightTheme = KTextView { withText("Light Theme") }

val settings = KTextView { withText("Settings") }


val nawDrawerRecyclerView = KRecyclerView(
builder = {withId(R.id.nav_drawer_recycler_view_main_activity)},
itemTypeBuilder = {itemType(NavigationViewLayout::NawDrawerRecyclerItem)}
)

class NawDrawerRecyclerItem(parent : Matcher<View>) : KRecyclerItem<NawDrawerRecyclerItem>(parent) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package ru.otus.pandina.screens.navigation.settings

import io.github.kakaocup.kakao.common.views.KView
import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KButton
import io.github.kakaocup.kakao.text.KTextView
import ml.docilealligator.infinityforreddit.R

object ActionPanel : Screen<ActionPanel>() {

val alertTitle = KTextView { withId(R.id.alertTitle)}

val list = KView {
withId(R.id.select_dialog_listview)
}

val cancelButton = KButton { withText("Cancel")}

fun getItem(itm : String) = KTextView {
withId(R.id.select_dialog_listview)
withDescendant {
withText(itm)
}
}.click()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package ru.otus.pandina.screens.navigation.settings

import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KTextView

object SettingsScreen : Screen<SettingsScreen>() {

val screenTittle = KTextView { withText("Settings")}

val notification = KTextView { withText("Notification")}

val interfaceSetting = KTextView { withText("Interface")}

val theme = KTextView { withText("Theme")}

val gesturesAndButtons = KTextView {withText("Gestures & Buttons")}

val video = KTextView {withText("Video")}

val lazyModeInterval = KTextView{withText("Lazy Mode Interval")}

val summary = KTextView{withText("2.5s")}

val downloadLocation = KTextView{withText("Download Location")}

val dataSavingMode = KTextView { withText("Data Saving Mode")}

val nsfwAndSpoiler = KTextView {withText("NSFW & Spoiler")}

val postHistory = KTextView { withText("Post History")}

val postFilter = KTextView { withText("Post Filter")}

val sortType = KTextView { withText("Sort Type")}

val miscellaneous = KTextView { withText("Miscellaneous")}

val advanced = KTextView { withText("Advanced")}

val about = KTextView { withText("About")}

val privacyPolicy = KTextView { withText("Privacy Policy")}

val redditUserAgreement = KTextView { withText("Reddit User Agreement")}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package ru.otus.pandina.screens.navigation.settings

import android.view.View
import io.github.kakaocup.kakao.common.views.KView
import io.github.kakaocup.kakao.image.KImageView
import io.github.kakaocup.kakao.recycler.KRecyclerItem
import io.github.kakaocup.kakao.recycler.KRecyclerView
import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.switch.KSwitch
import io.github.kakaocup.kakao.text.KTextView
import ml.docilealligator.infinityforreddit.R
import org.hamcrest.Matcher

object ThemeScreen : Screen<ThemeScreen>() {

val screeTitle = KTextView {
withParent { withId(R.id.toolbar_settings_activity) }
withText("Theme")
}

val frame = KView { withId(R.id.frame_layout_settings_activity) }

val themeRecycler = KRecyclerView(
builder = { withId(R.id.recycler_view) },
itemTypeBuilder = { itemType(ThemeScreen::ThemeRecyclerItem) }
)


class ThemeRecyclerItem(parent: Matcher<View>) : KRecyclerItem<ThemeRecyclerItem>(parent) {

val icon = KImageView(parent) { withResourceName("icon_frame") }

val title = KTextView(parent) { withResourceName("title") }

val summary = KTextView(parent) { withResourceName("summary") }

val switcher = KSwitch(parent) { withResourceName("material_switch_switch_preference") }
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ru.otus.pandina.screens.navigation.settings.font

import io.github.kakaocup.kakao.screen.Screen
import io.github.kakaocup.kakao.text.KTextView

object FontPreviewScreen : Screen<FontPreviewScreen>() {

val screenTitle = KTextView { withText("Font Preview") }

val someFont = KTextView { withAnyText() }

fun selectFont(font : String) {
someFont {
hasText(font)
click()
}
}
}
Loading