Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

POC: unit test execution without instrumentation #925

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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
7 changes: 6 additions & 1 deletion app/src/main/java/com/orgzly/android/data/DataRepository.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.content.res.Resources
import android.database.DatabaseUtils
import android.media.MediaScannerConnection
import android.net.Uri
import android.os.Handler
Expand Down Expand Up @@ -1127,7 +1128,11 @@ class DataRepository @Inject constructor(
}

private fun buildSqlQuery(query: Query): SupportSQLiteQuery {
val queryBuilder = SqliteQueryBuilder(context)
val defaultPriority = AppPreferences.defaultPriority(context);
val todoKeywordsSet = AppPreferences.todoKeywordsSet(context)
val doneKeywordsSet = AppPreferences.doneKeywordsSet(context)
val sqlEscape = DatabaseUtils::sqlEscapeString;
val queryBuilder = SqliteQueryBuilder(defaultPriority, todoKeywordsSet, doneKeywordsSet, sqlEscape)

val (selection, selectionArgs, having, orderBy) = queryBuilder.build(query)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.orgzly.android.query.sql

import android.content.Context
import android.database.DatabaseUtils
import com.orgzly.android.prefs.AppPreferences
import com.orgzly.android.query.*
import com.orgzly.org.datetime.OrgInterval
import java.util.*


class SqliteQueryBuilder(val context: Context) {
class SqliteQueryBuilder(private val defaultPriority: String,
private val todoKeywordsSet: Set<String>,
private val doneKeywordsSet: Set<String>,
private val sqlEscape: (str: String) -> String) {
private var where: String = ""
private val arguments: MutableList<String> = ArrayList()

Expand Down Expand Up @@ -39,7 +39,7 @@ class SqliteQueryBuilder(val context: Context) {
o.add("book_name")

/* Priority or default priority. */
o.add("COALESCE(priority, '" + AppPreferences.defaultPriority(context) + "')")
o.add("COALESCE(priority, '" + defaultPriority + "')")
o.add("priority IS NULL")

if (hasScheduledCondition) {
Expand Down Expand Up @@ -141,19 +141,18 @@ class SqliteQueryBuilder(val context: Context) {
}

is SortOrder.Priority -> {
o.add("COALESCE(priority, '" + AppPreferences.defaultPriority(context) + "')" + if (order.desc) " DESC" else "")
o.add("COALESCE(priority, '" + defaultPriority + "')" + if (order.desc) " DESC" else "")
o.add("priority" + if (order.desc) " IS NOT NULL" else " IS NULL")
}

is SortOrder.State -> {
val states = AppPreferences.todoKeywordsSet(context)
.union(AppPreferences.doneKeywordsSet(context))
val states = todoKeywordsSet.union(doneKeywordsSet)

if (states.isNotEmpty()) {
val statesInOrder = if (order.desc) states.reversed() else states

o.add(statesInOrder.foldIndexed("CASE state") { i, str, state ->
"$str WHEN ${DatabaseUtils.sqlEscapeString(state)} THEN $i"
"$str WHEN ${sqlEscape(state)} THEN $i"
} + " ELSE ${states.size} END")
}
}
Expand Down Expand Up @@ -194,12 +193,12 @@ class SqliteQueryBuilder(val context: Context) {
is Condition.HasStateType -> {
when (expr.type) {
StateType.TODO -> {
val states = AppPreferences.todoKeywordsSet(context)
val states = todoKeywordsSet
arguments.addAll(states)
not(expr.not, "COALESCE(state, '') IN (" + Collections.nCopies(states.size, "?").joinToString() + ")")
}
StateType.DONE -> {
val states = AppPreferences.doneKeywordsSet(context)
val states = doneKeywordsSet
arguments.addAll(states)
not(expr.not, "COALESCE(state, '') IN (" + Collections.nCopies(states.size, "?").joinToString() + ")")

Expand All @@ -209,7 +208,7 @@ class SqliteQueryBuilder(val context: Context) {
}

is Condition.HasPriority -> {
arguments.add(AppPreferences.defaultPriority(context))
arguments.add(defaultPriority)
arguments.add(expr.priority)
not(expr.not, "LOWER(COALESCE(NULLIF(priority, ''), ?)) = ?")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
package com.orgzly.android.query

import androidx.test.espresso.matcher.ViewMatchers.assertThat
import com.orgzly.android.OrgzlyTest
import com.orgzly.android.query.sql.SqliteQueryBuilder
import com.orgzly.android.query.user.DottedQueryBuilder
import com.orgzly.android.query.user.DottedQueryParser
import org.hamcrest.Matchers.`is`
import org.hamcrest.MatcherAssert.assertThat
import org.hamcrest.core.Is.`is`
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.Parameterized
import java.util.*

@RunWith(value = Parameterized::class)
class QueryTest(private val param: Parameter) : OrgzlyTest() {
class QueryTest(private val param: Parameter) {

private lateinit var actualParsedQuery: String
private lateinit var actualQueryString: String
Expand Down Expand Up @@ -305,16 +304,19 @@ class QueryTest(private val param: Parameter) : OrgzlyTest() {
}

@Before
override fun setUp() {
super.setUp()
fun setUp() {

// Parse query
val parser = DottedQueryParser()
val query = parser.parse(param.queryString)
actualParsedQuery = query.toString()

// Build SQL
val sqlBuilder = SqliteQueryBuilder(context)
val defaultPriority = "B"
val todoKeywordsSet = setOf("TODO", "NEXT")
val doneKeywordsSet = setOf("DONE")
val sqlEscape = fun (str: String) : String {return "'$str'" }
val sqlBuilder = SqliteQueryBuilder(defaultPriority, todoKeywordsSet, doneKeywordsSet, sqlEscape)
val sqlQuery = sqlBuilder.build(query)

// Build query
Expand Down