From dcbad2c97f438155a9f66c2f0eb8cf60e4216da9 Mon Sep 17 00:00:00 2001 From: Patches Date: Sun, 21 Apr 2019 20:57:38 -0500 Subject: [PATCH] issue119, issue120, issue122, issue124, and issue125 - Initial 4.x work --- .gitignore | 1 + .travis.yml | 4 +- build.gradle | 58 ++- config/checkstyle/import-control.xml | 1 - documentation/permissions_example.md | 20 +- gradle.properties | 28 +- gradle/checkstyle.gradle | 29 -- gradle/code-coverage.gradle | 12 +- gradle/cpd.gradle | 5 +- gradle/custom-tasks.gradle | 8 +- gradle/detekt.gradle | 16 +- gradle/findbugs.gradle | 26 -- gradle/gradle-bintray-upload.gradle | 11 +- gradle/jacoco.gradle | 76 ++-- gradle/ktlint.gradle | 2 +- gradle/pmd.gradle | 2 + gradle/static-analysis.gradle | 41 +- gradle/versions.gradle | 11 + gradle/wrapper/gradle-wrapper.jar | Bin 54413 -> 56177 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- wisefy/build.gradle | 61 ++- .../checkstyle/checkstyle-suppressions.xml | 11 - wisefy/config/checkstyle/checkstyle.xml | 421 ------------------ .../config/findbugs/findbugs-suppressions.xml | 7 - .../wisefy/BaseAndroidJUnit4TestClass.kt | 4 +- .../com/isupatches/wisefy/GeneratorUtil.kt | 8 +- .../com/isupatches/wisefy/MockNetworkUtil.kt | 2 +- .../com/isupatches/wisefy/NullCallbackUtil.kt | 20 - .../isupatches/wisefy/WiseFyPrechecksTests.kt | 1 - .../wisefy/main/SearchForSSIDsTests.kt | 1 - .../com/isupatches/wisefy/test/WiseFyTests.kt | 13 +- .../java/com/isupatches/wisefy/TestUtils.kt | 1 - .../main/java/com/isupatches/wisefy/WiseFy.kt | 6 +- .../com/isupatches/wisefy/WiseFyConnection.kt | 4 +- .../com/isupatches/wisefy/WiseFyPrechecks.kt | 2 +- .../com/isupatches/wisefy/WiseFySearch.kt | 4 +- .../wisefy/constants/Capabilities.kt | 2 +- .../wisefy/constants/NetworkTypes.kt | 2 +- .../wisefy/constants/WiseFyCodes.kt | 2 +- .../wisefy/main/PublicApiVisibilityTests.kt | 88 +--- 40 files changed, 215 insertions(+), 798 deletions(-) delete mode 100644 gradle/checkstyle.gradle delete mode 100644 gradle/findbugs.gradle create mode 100644 gradle/versions.gradle delete mode 100644 wisefy/config/checkstyle/checkstyle-suppressions.xml delete mode 100644 wisefy/config/checkstyle/checkstyle.xml delete mode 100644 wisefy/config/findbugs/findbugs-suppressions.xml diff --git a/.gitignore b/.gitignore index ecf627d0..8c2981d9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /local.properties /.idea /build +.DS_Store \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index a67e4dd1..d9565959 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,8 @@ jdk: env: global: - - TARGET_SDK=27 - - BUILD_TOOLS_VERSION=27.0.3 + - TARGET_SDK=28 + - BUILD_TOOLS_VERSION=28.0.3 matrix: - EMULATOR_SDK=android-19 ABI=armeabi-v7a - EMULATOR_SDK=android-22 ABI=armeabi-v7a diff --git a/build.gradle b/build.gradle index 72d5051a..f911ad5d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,13 @@ buildscript { project.ext { - agp_version = '3.1.4' + agp_version = '3.4.0' bintray_version = '1.8.4' - cpd_version = '1.1' - dokka_version = '0.9.17' - dexcount_version = '0.8.3' - jacoco_version = '0.8.2' - kotlin_version = "1.2.70" - maven_version = '2.0' + cpd_version = '1.3' + dokka_version = '0.9.18' + dexcount_version = '0.8.5' + jacoco_version = '0.8.3' + kotlin_version = "1.3.30" + maven_version = '2.1' } repositories { @@ -18,24 +18,32 @@ buildscript { dependencies { classpath "com.android.tools.build:gradle:$agp_version" - classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:$dokka_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + + // Static Analysis classpath "com.getkeepsafe.dexcount:dexcount-gradle-plugin:$dexcount_version" - classpath "com.github.dcendents:android-maven-gradle-plugin:$maven_version" - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$bintray_version" classpath "de.aaschmid:gradle-cpd-plugin:$cpd_version" + + + // Code Coverage classpath "org.jacoco:org.jacoco.core:$jacoco_version" classpath "org.jacoco:org.jacoco.agent:$jacoco_version" classpath "org.jacoco:org.jacoco.report:$jacoco_version" + + // Publishing + classpath "com.github.dcendents:android-maven-gradle-plugin:$maven_version" + classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$bintray_version" + classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:$dokka_version" } } plugins { - id "io.gitlab.arturbosch.detekt" version "1.0.0.RC8" - id "org.jlleitschuh.gradle.ktlint" version "5.1.0" + id "io.gitlab.arturbosch.detekt" version "1.0.0-RC14" + id "org.jlleitschuh.gradle.ktlint" version "7.3.0" } -apply from: rootProject.file("$rootProject.projectDir/gradle/detekt.gradle") +apply from: rootProject.file("$rootProject.projectDir/gradle/versions.gradle") + apply from: rootProject.file("$rootProject.projectDir/gradle/ktlint.gradle") apply from: rootProject.file("$rootProject.projectDir/gradle/static-analysis.gradle") @@ -45,12 +53,16 @@ subprojects { apply plugin: 'org.jetbrains.dokka-android' apply plugin: "org.jlleitschuh.gradle.ktlint" - apply from: rootProject.file("$rootProject.projectDir/gradle/dokka.gradle") - + // Static Analysis + apply from: rootProject.file("$rootProject.projectDir/gradle/detekt.gradle") apply from: rootProject.file("$rootProject.projectDir/gradle/cpd.gradle") apply from: rootProject.file("$rootProject.projectDir/gradle/pmd.gradle") + // Code Coverage apply from: rootProject.file("$rootProject.projectDir/gradle/jacoco.gradle") + + // Publishing + apply from: rootProject.file("$rootProject.projectDir/gradle/dokka.gradle") } allprojects { @@ -61,6 +73,8 @@ allprojects { } task clean(type: Delete) { + outputs.upToDateWhen { false } + delete rootProject.buildDir } @@ -114,22 +128,18 @@ ext { POM_DEVELOPER_EMAIL = "isuPatches@yahoo.com" // Common build version details - BUILD_TOOLS_VERSION = '27.0.3' - MAX_SDK_VERSION = 27 + BUILD_TOOLS_VERSION = '28.0.3' + MAX_SDK_VERSION = 28 MIN_SDK_VERSION = 16 VERSION_CODE = 14 - VERSION_NAME = "3.0.1" - - espresso_version = '3.0.2' - junit_version = '4.12' - mockito_version = '2.21.0' - support_libs_version = '27.1.1' - test_runner_version = '1.0.2' + VERSION_NAME = "4.0.0" } task makeGoodChoices { group = "verification" + outputs.upToDateWhen { false } + dependsOn 'staticAnalysisSanityCheck', 'jacocoAllCombinedTests' doLast { println "\n#############################################" + diff --git a/config/checkstyle/import-control.xml b/config/checkstyle/import-control.xml index 0f3ed609..e84397fa 100644 --- a/config/checkstyle/import-control.xml +++ b/config/checkstyle/import-control.xml @@ -11,7 +11,6 @@ - diff --git a/documentation/permissions_example.md b/documentation/permissions_example.md index cbcc98ed..3ab6c73e 100644 --- a/documentation/permissions_example.md +++ b/documentation/permissions_example.md @@ -22,9 +22,9 @@ import android.Manifest.permission.ACCESS_COARSE_LOCATION import android.content.pm.PackageManager import android.net.wifi.ScanResult import android.os.Bundle -import android.support.v4.content.ContextCompat -import android.support.v7.app.AppCompatActivity import android.util.Log +import androidx.core.content.ContextCompat +import androidx.appcompat.app.AppCompatActivity import com.isupatches.wisefy.WiseFy import com.isupatches.wisefy.callbacks.GetNearbyAccessPointsCallbacks @@ -113,16 +113,18 @@ _With Java_ ```java package wisefy_sample.isupatches.com.wisefysample.ui; - import android.content.pm.PackageManager; import android.net.wifi.ScanResult; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + import com.isupatches.wisefy.WiseFy; import com.isupatches.wisefy.callbacks.GetNearbyAccessPointsCallbacks; + import java.util.List; + import wisefy_sample.isupatches.com.wisefysample.R; import wisefy_sample.isupatches.com.wisefysample.constants.Permissions; import wisefy_sample.isupatches.com.wisefysample.util.PermissionUtil; @@ -217,9 +219,9 @@ _With Kotlin_ package com.isupatches.wisefysample.util import android.app.Activity -import android.support.v4.app.ActivityCompat import android.content.pm.PackageManager -import android.support.v4.content.ContextCompat +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat class PermissionUtil private constructor() { @@ -250,8 +252,8 @@ package wisefy_sample.isupatches.com.wisefysample.util; import android.app.Activity; import android.content.pm.PackageManager; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; public class PermissionUtil { diff --git a/gradle.properties b/gradle.properties index df954bab..d11bb024 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,21 +1,7 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# The Gradle daemon aims to improve the startup and execution time of Gradle. -# When set to true the Gradle daemon is to run the build. -org.gradle.daemon=true -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -noverify -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -org.gradle.parallel=true -# Enables new incubating mode that makes Gradle selective when configuring projects. -# Only relevant projects are configured which results in faster builds for large multi-projects. -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand -org.gradle.configureondemand=false \ No newline at end of file +org.gradle.jvmargs=-Xmx1g -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 + +# Android X: https://developer.android.com/topic/libraries/support-library/androidx-rn +android.enableJetifier=true +android.useAndroidX=true + +org.gradle.caching=false diff --git a/gradle/checkstyle.gradle b/gradle/checkstyle.gradle deleted file mode 100644 index 9fc335a6..00000000 --- a/gradle/checkstyle.gradle +++ /dev/null @@ -1,29 +0,0 @@ -apply plugin: 'checkstyle' - -checkstyle { - toolVersion "8.4" - - // use one common config file for all subprojects - configFile = project(':').file('wisefy/config/checkstyle/checkstyle.xml') - configProperties = ['baseDir': "$rootDir"] - configProperties = ["suppressionFile": project(':').file('wisefy/config/checkstyle/checkstyle-suppressions.xml')] -} - -task checkstyle(type: Checkstyle) { - description 'Analyze code style' - group 'verification' - - source 'src' - include '**/*.java' - exclude '**/gen/**' - - classpath = files() - ignoreFailures = false - maxWarnings = 0 - maxErrors = 0 - - reports { - xml.enabled = false - html.enabled = true - } -} \ No newline at end of file diff --git a/gradle/code-coverage.gradle b/gradle/code-coverage.gradle index f1f3858b..b27feead 100644 --- a/gradle/code-coverage.gradle +++ b/gradle/code-coverage.gradle @@ -1,35 +1,35 @@ task jacocoAllCombinedTests { group = "verification" - + outputs.upToDateWhen { false } dependsOn ':wisefy:jacocoDebugCombinedTest' } task jacocoAllCombinedTestReports { group = "verification" - + outputs.upToDateWhen { false } dependsOn ':wisefy:jacocoDebugCombinedTestReport' } task jacocoAllUnitTests { group = "verification" - + outputs.upToDateWhen { false } dependsOn ':wisefy:jacocoDebugUnitTest' } task jacocoAllUnitTestReports { group = "verification" - + outputs.upToDateWhen { false } dependsOn ':wisefy:jacocoDebugUnitTestReport' } task jacocoAllAndroidTests { group = "verification" - + outputs.upToDateWhen { false } dependsOn ':wisefy:jacocoDebugAndroidTest' } task jacocoAllAndroidTestReports { group = "verification" - + outputs.upToDateWhen { false } dependsOn ':wisefy:jacocoDebugAndroidTestReport' } \ No newline at end of file diff --git a/gradle/cpd.gradle b/gradle/cpd.gradle index dc36c010..ca60d758 100644 --- a/gradle/cpd.gradle +++ b/gradle/cpd.gradle @@ -2,12 +2,15 @@ apply plugin: 'cpd' cpd { language = 'java' + toolVersion = '6.8.0' } cpdCheck { + group = "verification" + ignoreFailures false - def classes = fileTree('src/main/java') + def classes = fileTree("$projectDir/src/main/java") classes += fileTree('src/androidTest/java') classes += fileTree('src/commonTest/java') classes += fileTree('src/test/java') diff --git a/gradle/custom-tasks.gradle b/gradle/custom-tasks.gradle index e0b7c16a..a97f0669 100644 --- a/gradle/custom-tasks.gradle +++ b/gradle/custom-tasks.gradle @@ -1,7 +1,9 @@ task makeGoodChoices { group = "verification" - dependsOn 'androidFindbugs', 'pmd', 'lintDebug', 'cpdCheck', 'checkstyle', 'jacocoDebugTestReport' + outputs.upToDateWhen { false } + + dependsOn 'pmd', 'lintDebug', 'cpdCheck', 'checkstyle', 'jacocoDebugTestReport' doLast { println "\n#############################################" + "\n# All checks passed! You are doing so good! #" + @@ -13,7 +15,9 @@ task makeGoodChoices { task staticAnalysisSanityCheck { group = "verification" - dependsOn 'androidFindbugs', 'pmd', 'lintDebug', 'cpdCheck', 'checkstyle' + outputs.upToDateWhen { false } + + dependsOn 'pmd', 'lintDebug', 'cpdCheck', 'checkstyle' doLast { println "\n##################################################" + "\n# Static analysis passed! You are doing so good! #" + diff --git a/gradle/detekt.gradle b/gradle/detekt.gradle index 00be5364..52ecaa24 100644 --- a/gradle/detekt.gradle +++ b/gradle/detekt.gradle @@ -1,14 +1,6 @@ -detekt { - version = "1.0.0.RC8" - - profile("main") { - input = "$projectDir/wisefy/src/" - output = "$projectDir/wisefy/build/reports/detekt" - config = "$projectDir/config/detekt-config.yml" - } +apply plugin: "io.gitlab.arturbosch.detekt" - profile("wisefy") { - input = "$projectDir/wisefy/src/" - output = "$projectDir/wisefy/build/reports/detekt" - } +detekt { + version = "$detekt_version" + config = files("$project.rootDir/config/detekt-config.yml") } \ No newline at end of file diff --git a/gradle/findbugs.gradle b/gradle/findbugs.gradle deleted file mode 100644 index 35c11c42..00000000 --- a/gradle/findbugs.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'findbugs' - -task androidFindbugs(type: FindBugs, overwrite: true) { - description "Analyze code with findbugs" - group 'verification' - - source = fileTree(project.rootDir.absolutePath).include("**/*.java") - classes = files("$project.buildDir.absolutePath/intermediates/classes/debug/") - classpath = files() - - findbugs { - sourceSets = [android.sourceSets] - ignoreFailures = false - reportsDir = file("$project.buildDir/findbugsReports") - effort = "max" - - excludeFilter = file("../wisefy/config/findbugs/findbugs-suppressions.xml") - reports { - xml.enabled = false - html.enabled = true - html.destination new File(project.buildDir, 'reports/findbugs/findbugs.html') - } - } -} - -androidFindbugs.dependsOn(['assembleDebug']) \ No newline at end of file diff --git a/gradle/gradle-bintray-upload.gradle b/gradle/gradle-bintray-upload.gradle index 5a25abdf..92e6fe34 100644 --- a/gradle/gradle-bintray-upload.gradle +++ b/gradle/gradle-bintray-upload.gradle @@ -6,22 +6,25 @@ version = VERSION_NAME if (project.hasProperty("android")) { // Android libraries task sourcesJar(type: Jar) { - classifier = 'sources' + outputs.upToDateWhen { false } + getArchiveClassifier().set('sources') from android.sourceSets.main.java.srcDirs } task javadoc(type: Javadoc, dependsOn: dokka) { - + outputs.upToDateWhen { false } } } else { // Java libraries task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' + outputs.upToDateWhen { false } + getArchiveClassifier().set('sources') from sourceSets.main.allSource } } task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' + outputs.upToDateWhen { false } + getArchiveClassifier().set('javadoc') from javadoc.destinationDir } diff --git a/gradle/jacoco.gradle b/gradle/jacoco.gradle index 906b6ca3..e05f6f65 100644 --- a/gradle/jacoco.gradle +++ b/gradle/jacoco.gradle @@ -29,12 +29,14 @@ project.afterEvaluate { task("jacoco${variant.name.capitalize()}UnitTest", type: JacocoReport, dependsOn: "test${variant.name.capitalize()}UnitTest") { group = "verification" - classDirectories = getClassDirs('debug', 'debug', excludes) - additionalSourceDirs = files(srcDirs) - sourceDirectories = files(srcDirs) - executionData = fileTree(dir: "$project.buildDir/jacoco", includes: [ + outputs.upToDateWhen { false } + + classDirectories.setFrom(getClassDirs('debug', 'debug', excludes)) + additionalSourceDirs.setFrom(files(srcDirs)) + sourceDirectories.setFrom(files(srcDirs)) + executionData.setFrom(fileTree(dir: "$project.buildDir/jacoco", includes: [ "**/*.exec" - ]) + ])) reports { xml.enabled = false @@ -45,12 +47,14 @@ project.afterEvaluate { task("jacoco${variant.name.capitalize()}UnitTestReport", type: JacocoReport) { group = "verification" - classDirectories = getClassDirs('debug', 'debug', excludes) - additionalSourceDirs = files(srcDirs) - sourceDirectories = files(srcDirs) - executionData = fileTree(dir: "$project.buildDir/jacoco", includes: [ + outputs.upToDateWhen { false } + + classDirectories.setFrom(getClassDirs('debug', 'debug', excludes)) + additionalSourceDirs.setFrom(files(srcDirs)) + sourceDirectories.setFrom(files(srcDirs)) + executionData.setFrom(fileTree(dir: "$project.buildDir/jacoco", includes: [ "**/*.exec" - ]) + ])) reports { xml.enabled = false @@ -61,12 +65,14 @@ project.afterEvaluate { task("jacoco${variant.name.capitalize()}AndroidTest", type: JacocoReport, dependsOn: "connected${variant.name.capitalize()}AndroidTest") { group = "verification" - classDirectories = getClassDirs('debug', 'debug', excludes) - additionalSourceDirs = files(srcDirs) - sourceDirectories = files(srcDirs) - executionData = fileTree(dir: "$project.buildDir/outputs/code-coverage/connected", includes: [ + outputs.upToDateWhen { false } + + classDirectories.setFrom(getClassDirs('debug', 'debug', excludes)) + additionalSourceDirs.setFrom(files(srcDirs)) + sourceDirectories.setFrom(files(srcDirs)) + executionData.setFrom(fileTree(dir: "$project.buildDir/outputs", includes: [ '**/*.ec' - ]) + ])) reports { xml.enabled = false @@ -77,12 +83,14 @@ project.afterEvaluate { task("jacoco${variant.name.capitalize()}AndroidTestReport", type: JacocoReport) { group = "verification" - classDirectories = getClassDirs('debug', 'debug', excludes) - additionalSourceDirs = files(srcDirs) - sourceDirectories = files(srcDirs) - executionData = fileTree(dir: "$project.buildDir/outputs/code-coverage/connected", includes: [ + outputs.upToDateWhen { false } + + classDirectories.setFrom(getClassDirs('debug', 'debug', excludes)) + additionalSourceDirs.setFrom(files(srcDirs)) + sourceDirectories.setFrom(files(srcDirs)) + executionData.setFrom(fileTree(dir: "$project.buildDir/outputs", includes: [ '**/*.ec' - ]) + ])) reports { xml.enabled = false @@ -93,13 +101,15 @@ project.afterEvaluate { task("jacoco${variant.name.capitalize()}CombinedTest", type: JacocoReport, dependsOn: ["test${variant.name.capitalize()}UnitTest", "connected${variant.name.capitalize()}AndroidTest"]) { group = "verification" - classDirectories = getClassDirs('debug', 'debug', excludes) - additionalSourceDirs = files(srcDirs) - sourceDirectories = files(srcDirs) - executionData = files([ - fileTree(dir: "$project.buildDir/outputs/code-coverage/connected", include: '**/*.ec'), + outputs.upToDateWhen { false } + + classDirectories.setFrom(getClassDirs('debug', 'debug', excludes)) + additionalSourceDirs.setFrom(files(srcDirs)) + sourceDirectories.setFrom(files(srcDirs)) + executionData.setFrom(files([ + fileTree(dir: "$project.buildDir/outputs", include: '**/*.ec'), fileTree(dir: "$project.buildDir/jacoco", include: '**/*.exec') - ]) + ])) reports { xml.enabled = true // Enabled for CodeCov @@ -110,13 +120,15 @@ project.afterEvaluate { task("jacoco${variant.name.capitalize()}CombinedTestReport", type: JacocoReport) { group = "verification" - classDirectories = getClassDirs('debug', 'debug', excludes) - additionalSourceDirs = files(srcDirs) - sourceDirectories = files(srcDirs) - executionData = files([ - fileTree(dir: "$project.buildDir/outputs/code-coverage/connected", include: '**/*.ec'), + outputs.upToDateWhen { false } + + classDirectories.setFrom(getClassDirs('debug', 'debug', excludes)) + additionalSourceDirs.setFrom(files(srcDirs)) + sourceDirectories.setFrom(files(srcDirs)) + executionData.setFrom(files([ + fileTree(dir: "$project.buildDir/outputs", include: '**/*.ec'), fileTree(dir: "$project.buildDir/jacoco", include: '**/*.exec') - ]) + ])) reports { xml.enabled = false diff --git a/gradle/ktlint.gradle b/gradle/ktlint.gradle index ce5fb0f4..46765a18 100644 --- a/gradle/ktlint.gradle +++ b/gradle/ktlint.gradle @@ -1,5 +1,5 @@ ktlint { - version '0.28.0' + version "$ktlint_version" debug = true verbose = true android = true diff --git a/gradle/pmd.gradle b/gradle/pmd.gradle index ae38b8aa..06116525 100644 --- a/gradle/pmd.gradle +++ b/gradle/pmd.gradle @@ -8,6 +8,8 @@ task pmd(type: Pmd) { source = fileTree('src/main/java') + outputs.upToDateWhen { false } + reports { xml.enabled = false html.enabled = true diff --git a/gradle/static-analysis.gradle b/gradle/static-analysis.gradle index f61c667d..05679452 100644 --- a/gradle/static-analysis.gradle +++ b/gradle/static-analysis.gradle @@ -1,7 +1,9 @@ task staticAnalysisSanityCheck { group = "verification" - dependsOn 'lintAll', 'detektAll', 'ktlintAll', 'cpdAll' + outputs.upToDateWhen { false } + + dependsOn 'checkAll', 'lintAll' doLast { println "\n##################################################" + "\n# Static analysis passed! You are doing so good! #" + @@ -9,47 +11,28 @@ task staticAnalysisSanityCheck { } } -task lintAll { +task checkAll() { group = 'verification' - dependsOn ':wisefy:lintDebug' - doLast { - println "\n##################################################" + - "\n# Linted all the things! Go you! #" + - "\n##################################################" - } -} + outputs.upToDateWhen { false } -task ktlintAll { - group = 'verification' - - dependsOn ':wisefy:ktlintDebugCheck' + dependsOn ':wisefy:check' doLast { println "\n##################################################" + - "\n# KTLinted all the things! Go you! #" + + "\n# Checked all the things! Go you! #" + "\n##################################################" } } -task detektAll { +task lintAll { group = 'verification' - dependsOn 'detektCheck' - doLast { - println "\n##################################################" + - "\n# Detekt'ed all the things! Go you! #" + - "\n##################################################" - } -} + outputs.upToDateWhen { false } -task cpdAll { - group = 'verification' - - dependsOn ':wisefy:cpdCheck' + dependsOn ':wisefy:lintDebug' doLast { println "\n##################################################" + - "\n# Code so DRY, it must have an umbrella! #" + + "\n# Lint error free is the way to be! #" + "\n##################################################" } - -} \ No newline at end of file +} diff --git a/gradle/versions.gradle b/gradle/versions.gradle new file mode 100644 index 00000000..5cc1fc15 --- /dev/null +++ b/gradle/versions.gradle @@ -0,0 +1,11 @@ +ext { + androidx_support_annotations_version = '1.0.0' + androidx_espresso_core_version = '3.1.0' + androidx_test_runner_version = "1.1.0" + + detekt_version = "1.0.0-RC14" + ktlint_version = "0.31.0" + + junit_version = '4.12' + mockito_version = '2.27.0' +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 0d4a9516871afd710a9d84d89e31ba77745607bd..13536770052936a92b204cc34e72284a03a6903c 100644 GIT binary patch delta 49463 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 - - - - - - - - - \ No newline at end of file diff --git a/wisefy/config/checkstyle/checkstyle.xml b/wisefy/config/checkstyle/checkstyle.xml deleted file mode 100644 index b84ab4d6..00000000 --- a/wisefy/config/checkstyle/checkstyle.xml +++ /dev/null @@ -1,421 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wisefy/config/findbugs/findbugs-suppressions.xml b/wisefy/config/findbugs/findbugs-suppressions.xml deleted file mode 100644 index d73f9f9a..00000000 --- a/wisefy/config/findbugs/findbugs-suppressions.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/BaseAndroidJUnit4TestClass.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/BaseAndroidJUnit4TestClass.kt index 88331c00..2e9a93ff 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/BaseAndroidJUnit4TestClass.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/BaseAndroidJUnit4TestClass.kt @@ -3,7 +3,7 @@ package com.isupatches.wisefy import android.net.ConnectivityManager import android.net.wifi.WifiManager import android.os.Build -import android.support.test.InstrumentationRegistry +import androidx.test.platform.app.InstrumentationRegistry import org.junit.After import org.mockito.Mockito import org.mockito.Mockito.mock @@ -41,7 +41,7 @@ internal open class BaseAndroidJUnit4TestClass { mockWifiManager = mock(WifiManager::class.java) mockConnectivityManager = mock(ConnectivityManager::class.java) - wisefy = WiseFy.Brains(InstrumentationRegistry.getTargetContext()) + wisefy = WiseFy.Brains(InstrumentationRegistry.getInstrumentation().targetContext) .customConnectivityManager(mockConnectivityManager) .customWifiManager(mockWifiManager) .customWiseFyConnection(mockWiseFyConnection) diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/GeneratorUtil.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/GeneratorUtil.kt index a2c59e2f..9e7aec7e 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/GeneratorUtil.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/GeneratorUtil.kt @@ -32,8 +32,12 @@ internal fun createMockAccessPointWithCapabilities(capabilities: String?): ScanR * * @see ScanResult */ -internal fun createMockAccessPointList(ssid1: String, rssi1: Int, - ssid2: String, rssi2: Int): List { +internal fun createMockAccessPointList( + ssid1: String, + rssi1: Int, + ssid2: String, + rssi2: Int +): List { val accessPoints = ArrayList() accessPoints.add(createMockAccessPointWithSSIDAndRSSI(ssid1, rssi1)) accessPoints.add(createMockAccessPointWithSSIDAndRSSI(ssid2, rssi2)) diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/MockNetworkUtil.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/MockNetworkUtil.kt index f6e412f6..a5cd0fb5 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/MockNetworkUtil.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/MockNetworkUtil.kt @@ -93,7 +93,7 @@ internal class MockNetworkUtil internal constructor( `when`(mockWifiManager.setWifiEnabled(true)).thenReturn(true) } - internal fun getExpectedNearbyAccessPoint(): ScanResult? = expectedNearbyAccessPoint + internal fun getExpectedNearbyAccessPoint(): ScanResult? = expectedNearbyAccessPoint internal fun getExpectedNearbyAccessPoints(): List? = expectedNearbyAccessPoints internal fun getExpectedSavedNetwork(): WifiConfiguration? = expectedSavedNetwork diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/NullCallbackUtil.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/NullCallbackUtil.kt index 68249f32..24278eb1 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/NullCallbackUtil.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/NullCallbackUtil.kt @@ -24,7 +24,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -39,7 +38,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -54,7 +52,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -70,7 +67,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -84,7 +80,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -98,7 +93,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -112,7 +106,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -126,7 +119,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } fun callGetCurrentNetworkInfo() { @@ -148,7 +140,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -164,7 +155,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -180,7 +170,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -196,7 +185,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -212,7 +200,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -226,7 +213,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -242,7 +228,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -258,7 +243,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -275,7 +259,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -292,7 +275,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -308,7 +290,6 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } /** @@ -324,6 +305,5 @@ internal class NullCallbackUtil internal constructor(private val wisefy: WiseFy) } catch (npe: NullPointerException) { fail() } - } } diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/WiseFyPrechecksTests.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/WiseFyPrechecksTests.kt index b839cb66..4da62b2c 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/WiseFyPrechecksTests.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/WiseFyPrechecksTests.kt @@ -6,7 +6,6 @@ import com.isupatches.wisefy.constants.NETWORK_ALREADY_CONFIGURED import org.junit.Assert.assertEquals - import org.junit.Test /** diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/main/SearchForSSIDsTests.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/main/SearchForSSIDsTests.kt index 88f82176..7a4d5d44 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/main/SearchForSSIDsTests.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/main/SearchForSSIDsTests.kt @@ -55,7 +55,6 @@ internal class SearchForSSIDsTests : BaseAndroidJUnit4TestClass() { verify(mockCallbacks, timeout(VERIFICATION_SUCCESS_TIMEOUT)).noSSIDsFound() } - @Test fun async_failure_nullCallback() { mockWiseFyPrechecksUtil.searchForSSIDs_success() mockWiseFySearchUtil.findSSIDsMatchingRegex_null() diff --git a/wisefy/src/androidTest/java/com/isupatches/wisefy/test/WiseFyTests.kt b/wisefy/src/androidTest/java/com/isupatches/wisefy/test/WiseFyTests.kt index 9aa1c92a..05023cec 100644 --- a/wisefy/src/androidTest/java/com/isupatches/wisefy/test/WiseFyTests.kt +++ b/wisefy/src/androidTest/java/com/isupatches/wisefy/test/WiseFyTests.kt @@ -1,8 +1,6 @@ package com.isupatches.wisefy.test -import android.support.test.InstrumentationRegistry - -import com.google.android.gms.iid.InstanceID +import androidx.test.platform.app.InstrumentationRegistry import com.isupatches.wisefy.BaseAndroidJUnit4TestClass import com.isupatches.wisefy.TEST_NUMBER_OF_BARS @@ -27,12 +25,12 @@ internal class WiseFyTests : BaseAndroidJUnit4TestClass() { } @Test fun brains_loggingFalse() { - val wisefy = WiseFy.Brains(InstrumentationRegistry.getContext()).logging(false).getSmarts() + val wisefy = WiseFy.Brains(InstrumentationRegistry.getInstrumentation().targetContext).logging(false).getSmarts() assertEquals(false, wisefy.isLoggingEnabled()) } @Test fun brains_loggingTrue() { - val wisefy = WiseFy.Brains(InstrumentationRegistry.getContext()).logging(true).getSmarts() + val wisefy = WiseFy.Brains(InstrumentationRegistry.getInstrumentation().targetContext).logging(true).getSmarts() assertEquals(true, wisefy.isLoggingEnabled()) } @@ -49,9 +47,4 @@ internal class WiseFyTests : BaseAndroidJUnit4TestClass() { @Test fun getWiseFyLock() { assertNotNull(wisefy.getWiseFyLock()) } - - @Test fun olderGcm_IllegalAccessError_notThrown() { - val instanceID = InstanceID.getInstance(InstrumentationRegistry.getContext()) - assertNotNull(instanceID) - } } diff --git a/wisefy/src/commonTest/java/com/isupatches/wisefy/TestUtils.kt b/wisefy/src/commonTest/java/com/isupatches/wisefy/TestUtils.kt index 6c887f04..67bd658d 100644 --- a/wisefy/src/commonTest/java/com/isupatches/wisefy/TestUtils.kt +++ b/wisefy/src/commonTest/java/com/isupatches/wisefy/TestUtils.kt @@ -46,7 +46,6 @@ internal val TEST_IP_ADDRESS_INT = getIntVersionOfTestIPAddress() private const val BIT_SHIFT_VALUE = 8 - /** * To convert the TEST_IP_ADDRESS_STRING string into an integer value to be used for Inet and * tests. diff --git a/wisefy/src/main/java/com/isupatches/wisefy/WiseFy.kt b/wisefy/src/main/java/com/isupatches/wisefy/WiseFy.kt index 3e49b7e6..8d3a6c30 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/WiseFy.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/WiseFy.kt @@ -29,8 +29,8 @@ import android.net.wifi.WifiInfo import android.net.wifi.WifiManager import android.os.Build import android.os.Handler -import android.support.annotation.RequiresApi -import android.support.annotation.RequiresPermission +import androidx.annotation.RequiresApi +import androidx.annotation.RequiresPermission import com.isupatches.wisefy.annotations.Async import com.isupatches.wisefy.annotations.CallingThread @@ -85,7 +85,7 @@ import java.net.UnknownHostException * @since 3.0 */ @PublicAPI -@Suppress("LargeClass") +@Suppress("LargeClass, SyntheticAccessor") class WiseFy private constructor( private val connectivityManager: ConnectivityManager, private val wifiManager: WifiManager, diff --git a/wisefy/src/main/java/com/isupatches/wisefy/WiseFyConnection.kt b/wisefy/src/main/java/com/isupatches/wisefy/WiseFyConnection.kt index 69cb7f94..60e17f45 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/WiseFyConnection.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/WiseFyConnection.kt @@ -20,7 +20,7 @@ import android.Manifest.permission.ACCESS_WIFI_STATE import android.net.ConnectivityManager import android.net.NetworkInfo import android.net.wifi.WifiManager -import android.support.annotation.RequiresPermission +import androidx.annotation.RequiresPermission import com.isupatches.wisefy.annotations.WaitsForTimeout import com.isupatches.wisefy.constants.NetworkType @@ -76,7 +76,7 @@ internal class WiseFyConnectionImpl private constructor( connectionInfo?.let { if (!it.ssid.isNullOrEmpty()) { val currentSSID = it.ssid.replace(QUOTE, "") - WiseFyLogger.debug(TAG, "Current SSID: %s, Desired SSID: %s", currentSSID, ssid ?: "") + WiseFyLogger.debug(TAG, "Current SSID: %s, Desired SSID: %s", currentSSID, ssid) if (currentSSID.equals(ssid, ignoreCase = true) && isNetworkConnected(connectivityManager.activeNetworkInfo) ) { diff --git a/wisefy/src/main/java/com/isupatches/wisefy/WiseFyPrechecks.kt b/wisefy/src/main/java/com/isupatches/wisefy/WiseFyPrechecks.kt index b09cad04..15208908 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/WiseFyPrechecks.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/WiseFyPrechecks.kt @@ -16,7 +16,7 @@ package com.isupatches.wisefy import android.Manifest.permission.ACCESS_WIFI_STATE -import android.support.annotation.RequiresPermission +import androidx.annotation.RequiresPermission import com.isupatches.wisefy.constants.DEFAULT_PRECHECK_RETURN_CODE import com.isupatches.wisefy.constants.MISSING_PARAMETER diff --git a/wisefy/src/main/java/com/isupatches/wisefy/WiseFySearch.kt b/wisefy/src/main/java/com/isupatches/wisefy/WiseFySearch.kt index c7faf4ea..0c3de275 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/WiseFySearch.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/WiseFySearch.kt @@ -19,7 +19,7 @@ import android.Manifest.permission.ACCESS_WIFI_STATE import android.net.wifi.ScanResult import android.net.wifi.WifiConfiguration import android.net.wifi.WifiManager -import android.support.annotation.RequiresPermission +import androidx.annotation.RequiresPermission import com.isupatches.wisefy.annotations.WaitsForTimeout import com.isupatches.wisefy.constants.QUOTE @@ -273,7 +273,7 @@ internal class WiseFySearchImpl private constructor( */ @RequiresPermission(ACCESS_WIFI_STATE) override fun isNetworkASavedConfiguration(ssid: String?): Boolean = - !ssid.isNullOrEmpty() && findSavedNetworkByRegex(ssid!!) != null + !ssid.isNullOrEmpty() && findSavedNetworkByRegex(ssid) != null /** * Used internally to build a list of ScanResults (removes duplicates by taking access point with higher RSSI). diff --git a/wisefy/src/main/java/com/isupatches/wisefy/constants/Capabilities.kt b/wisefy/src/main/java/com/isupatches/wisefy/constants/Capabilities.kt index a2b80116..ea1aa69d 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/constants/Capabilities.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/constants/Capabilities.kt @@ -16,7 +16,7 @@ @file:JvmName("Capabilities") package com.isupatches.wisefy.constants -import android.support.annotation.StringDef +import androidx.annotation.StringDef /** * Constant for EAP security capabilities. diff --git a/wisefy/src/main/java/com/isupatches/wisefy/constants/NetworkTypes.kt b/wisefy/src/main/java/com/isupatches/wisefy/constants/NetworkTypes.kt index f995de30..817687ce 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/constants/NetworkTypes.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/constants/NetworkTypes.kt @@ -16,7 +16,7 @@ @file:JvmName("NetworkTypes") package com.isupatches.wisefy.constants -import android.support.annotation.StringDef +import androidx.annotation.StringDef /** * Constant for a mobile network. diff --git a/wisefy/src/main/java/com/isupatches/wisefy/constants/WiseFyCodes.kt b/wisefy/src/main/java/com/isupatches/wisefy/constants/WiseFyCodes.kt index 4f09be0c..d31460e4 100644 --- a/wisefy/src/main/java/com/isupatches/wisefy/constants/WiseFyCodes.kt +++ b/wisefy/src/main/java/com/isupatches/wisefy/constants/WiseFyCodes.kt @@ -16,7 +16,7 @@ @file:JvmName("WiseFyCodes") package com.isupatches.wisefy.constants -import android.support.annotation.IntDef +import androidx.annotation.IntDef /** * A constant that denotes a successful operation within WiseFy. diff --git a/wisefy/src/test/java/com/isupatches/wisefy/main/PublicApiVisibilityTests.kt b/wisefy/src/test/java/com/isupatches/wisefy/main/PublicApiVisibilityTests.kt index eef79203..69a444ac 100644 --- a/wisefy/src/test/java/com/isupatches/wisefy/main/PublicApiVisibilityTests.kt +++ b/wisefy/src/test/java/com/isupatches/wisefy/main/PublicApiVisibilityTests.kt @@ -1,18 +1,9 @@ package com.isupatches.wisefy.main -import com.isupatches.wisefy.WiseFy.Companion.WIFI_MANAGER_FAILURE -import org.junit.Assert.assertEquals - -import org.mockito.ArgumentMatchers.any -import org.mockito.ArgumentMatchers.anyBoolean -import org.mockito.ArgumentMatchers.anyInt -import org.mockito.ArgumentMatchers.anyString -import org.mockito.Mockito.mock -import org.mockito.Mockito.verify - import android.net.wifi.ScanResult import android.net.wifi.WifiConfiguration import android.net.wifi.WifiInfo + import com.isupatches.wisefy.OPEN_NETWORK_SSID import com.isupatches.wisefy.TEST_DELAY import com.isupatches.wisefy.TEST_NUMBER_OF_BARS @@ -24,7 +15,7 @@ import com.isupatches.wisefy.WEP_NETWORK_PASSWORD import com.isupatches.wisefy.WEP_NETWORK_SSID import com.isupatches.wisefy.WPA2_NETWORK_PASSWORD import com.isupatches.wisefy.WPA2_NETWORK_SSID - +import com.isupatches.wisefy.WiseFy.Companion.WIFI_MANAGER_FAILURE import com.isupatches.wisefy.WiseFyPublicApi import com.isupatches.wisefy.callbacks.AddNetworkCallbacks import com.isupatches.wisefy.callbacks.ConnectToNetworkCallbacks @@ -44,14 +35,22 @@ import com.isupatches.wisefy.callbacks.SearchForAccessPointsCallbacks import com.isupatches.wisefy.callbacks.SearchForSSIDCallbacks import com.isupatches.wisefy.callbacks.SearchForSSIDsCallbacks +import org.junit.Assert.assertEquals import org.junit.Test +import org.mockito.ArgumentMatchers.any +import org.mockito.ArgumentMatchers.anyBoolean +import org.mockito.ArgumentMatchers.anyInt +import org.mockito.ArgumentMatchers.anyString +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify + /** * Used to test the visibility of the public API. * * @author Patches */ -@Suppress("LargeClass","UndocumentedPublicFunction") +@Suppress("LargeClass", "UndocumentedPublicFunction") class PublicApiVisibilityTests { private val wisefy = mock(WiseFyPublicApi::class.java) @@ -63,15 +62,12 @@ class PublicApiVisibilityTests { verify(wisefy).addOpenNetwork(anyString()) wisefy.addOpenNetwork(OPEN_NETWORK_SSID, object : AddNetworkCallbacks { override fun failureAddingNetwork(wifiManagerReturn: Int) { - } override fun networkAdded(newNetworkId: Int, networkConfig: WifiConfiguration) { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).addOpenNetwork(anyString(), any(AddNetworkCallbacks::class.java)) @@ -82,15 +78,12 @@ class PublicApiVisibilityTests { verify(wisefy).addWEPNetwork(anyString(), anyString()) wisefy.addWEPNetwork(WEP_NETWORK_SSID, WEP_NETWORK_PASSWORD, object : AddNetworkCallbacks { override fun failureAddingNetwork(wifiManagerReturn: Int) { - } override fun networkAdded(newNetworkId: Int, networkConfig: WifiConfiguration) { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).addWEPNetwork(anyString(), anyString(), any(AddNetworkCallbacks::class.java)) @@ -101,15 +94,12 @@ class PublicApiVisibilityTests { verify(wisefy).addWPA2Network(anyString(), anyString()) wisefy.addWPA2Network(WPA2_NETWORK_SSID, WPA2_NETWORK_PASSWORD, object : AddNetworkCallbacks { override fun failureAddingNetwork(wifiManagerReturn: Int) { - } override fun networkAdded(newNetworkId: Int, networkConfig: WifiConfiguration) { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).addWPA2Network(anyString(), anyString(), any(AddNetworkCallbacks::class.java)) @@ -130,19 +120,15 @@ class PublicApiVisibilityTests { verify(wisefy).connectToNetwork(anyString(), anyInt()) wisefy.connectToNetwork(TEST_SSID, TEST_DELAY, object : ConnectToNetworkCallbacks { override fun connectedToNetwork() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun failureConnectingToNetwork() { - } override fun networkNotFoundToConnectTo() { - } }) verify(wisefy).connectToNetwork(anyString(), anyInt(), any(ConnectToNetworkCallbacks::class.java)) @@ -152,17 +138,13 @@ class PublicApiVisibilityTests { wisefy.disableWifi() verify(wisefy).disableWifi() wisefy.disableWifi(object : DisableWifiCallbacks { - override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun failureDisablingWifi() { - } override fun wifiDisabled() { - } }) verify(wisefy).disableWifi(any(DisableWifiCallbacks::class.java)) @@ -173,15 +155,12 @@ class PublicApiVisibilityTests { verify(wisefy).disconnectFromCurrentNetwork() wisefy.disconnectFromCurrentNetwork(object : DisconnectFromCurrentNetworkCallbacks { override fun disconnectedFromCurrentNetwork() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun failureDisconnectingFromCurrentNetwork() { - } }) verify(wisefy).disconnectFromCurrentNetwork(any(DisconnectFromCurrentNetworkCallbacks::class.java)) @@ -191,17 +170,13 @@ class PublicApiVisibilityTests { wisefy.enableWifi() verify(wisefy).enableWifi() wisefy.enableWifi(object : EnableWifiCallbacks { - override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun failureEnablingWifi() { - } override fun wifiEnabled() { - } }) verify(wisefy).enableWifi(any(EnableWifiCallbacks::class.java)) @@ -211,13 +186,10 @@ class PublicApiVisibilityTests { wisefy.getCurrentNetwork() verify(wisefy).getCurrentNetwork() wisefy.getCurrentNetwork(object : GetCurrentNetworkCallbacks { - override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun retrievedCurrentNetwork(currentNetwork: WifiInfo) { - } }) verify(wisefy).getCurrentNetwork(any(GetCurrentNetworkCallbacks::class.java)) @@ -228,15 +200,12 @@ class PublicApiVisibilityTests { verify(wisefy).getFrequency() wisefy.getFrequency(object : GetFrequencyCallbacks { override fun failureGettingFrequency() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun retrievedFrequency(frequency: Int) { - } }) verify(wisefy).getFrequency(any(GetFrequencyCallbacks::class.java)) @@ -245,15 +214,12 @@ class PublicApiVisibilityTests { verify(wisefy).getFrequency(any(WifiInfo::class.java)) wisefy.getFrequency(mock(WifiInfo::class.java), object : GetFrequencyCallbacks { override fun failureGettingFrequency() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun retrievedFrequency(frequency: Int) { - } }) verify(wisefy).getFrequency(any(WifiInfo::class.java), any(GetFrequencyCallbacks::class.java)) @@ -264,31 +230,25 @@ class PublicApiVisibilityTests { verify(wisefy).getIP() wisefy.getIP(object : GetIPCallbacks { override fun failureRetrievingIP() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun retrievedIP(ip: String) { - } }) verify(wisefy).getIP(any(GetIPCallbacks::class.java)) } - @Test fun getNearbyAccessPoints_apis() { wisefy.getNearbyAccessPoints(true) verify(wisefy).getNearbyAccessPoints(anyBoolean()) wisefy.getNearbyAccessPoints(true, object : GetNearbyAccessPointsCallbacks { override fun retrievedNearbyAccessPoints(nearbyAccessPoints: List) { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).getNearbyAccessPoints(anyBoolean(), any(GetNearbyAccessPointsCallbacks::class.java)) @@ -299,15 +259,12 @@ class PublicApiVisibilityTests { verify(wisefy).getRSSI(anyString(), anyBoolean(), anyInt()) wisefy.getRSSI(TEST_SSID, true, TEST_DELAY, object : GetRSSICallbacks { override fun retrievedRSSI(rssi: Int) { - } override fun networkNotFoundToRetrieveRSSI() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).getRSSI(anyString(), anyBoolean(), anyInt(), any(GetRSSICallbacks::class.java)) @@ -318,15 +275,12 @@ class PublicApiVisibilityTests { verify(wisefy).getSavedNetwork(anyString()) wisefy.getSavedNetwork(TEST_SSID, object : GetSavedNetworkCallbacks { override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun savedNetworkNotFound() { - } override fun retrievedSavedNetwork(savedNetwork: WifiConfiguration) { - } }) verify(wisefy).getSavedNetwork(anyString(), any(GetSavedNetworkCallbacks::class.java)) @@ -434,40 +388,32 @@ class PublicApiVisibilityTests { wisefy.removeNetwork(TEST_SSID, object : RemoveNetworkCallbacks { override fun failureRemovingNetwork() { - } override fun networkNotFoundToRemove() { - } override fun networkRemoved() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).removeNetwork(anyString(), any(RemoveNetworkCallbacks::class.java)) } - @Test fun searchForAccessPoint_api() { wisefy.searchForAccessPoint(TEST_SSID, TEST_DELAY, true) verify(wisefy).searchForAccessPoint(anyString(), anyInt(), anyBoolean()) wisefy.searchForAccessPoint(TEST_SSID, TEST_DELAY, true, object : SearchForAccessPointCallbacks { override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun accessPointFound(accessPoint: ScanResult) { - } override fun accessPointNotFound() { - } }) verify(wisefy).searchForAccessPoint(anyString(), anyInt(), anyBoolean(), any(SearchForAccessPointCallbacks::class.java)) @@ -479,15 +425,12 @@ class PublicApiVisibilityTests { wisefy.searchForAccessPoints(TEST_SSID, true, object : SearchForAccessPointsCallbacks { override fun foundAccessPoints(accessPoints: List) { - } override fun noAccessPointsFound() { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } }) verify(wisefy).searchForAccessPoints(anyString(), anyBoolean(), any(SearchForAccessPointsCallbacks::class.java)) @@ -499,15 +442,12 @@ class PublicApiVisibilityTests { wisefy.searchForSSID(TEST_SSID, TEST_DELAY, object : SearchForSSIDCallbacks { override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun ssidFound(ssid: String) { - } override fun ssidNotFound() { - } }) verify(wisefy).searchForSSID(anyString(), anyInt(), any(SearchForSSIDCallbacks::class.java)) @@ -519,15 +459,12 @@ class PublicApiVisibilityTests { wisefy.searchForSSIDs(TEST_SSID, object : SearchForSSIDsCallbacks { override fun wisefyFailure(wisefyFailureCode: Int) { - } override fun retrievedSSIDs(ssids: List) { - } override fun noSSIDsFound() { - } }) verify(wisefy).searchForSSIDs(anyString(), any(SearchForSSIDsCallbacks::class.java)) @@ -539,15 +476,12 @@ class PublicApiVisibilityTests { private class MyGetSavedNetworksCallbacks : GetSavedNetworksCallbacks { override fun noSavedNetworksFound() { - } override fun retrievedSavedNetworks(savedNetworks: List) { - } override fun wisefyFailure(wisefyFailureCode: Int) { - } } }