diff --git a/README.md b/README.md index 467cc7d..3bc6bd2 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ #### 1. Add gradle dependency ```groovy -compile 'com.mlykotom:valifi:1.1.7' +compile 'com.mlykotom:valifi:1.2.0' ``` #### 2. Setup project with data binding ``` groovy diff --git a/example-android/build.gradle b/example-android/build.gradle index f777226..14f1d80 100644 --- a/example-android/build.gradle +++ b/example-android/build.gradle @@ -32,6 +32,6 @@ dependencies { if(isLocalBuild) { implementation project(':valifi') } else { - implementation 'com.mlykotom:valifi:1.1.7' + implementation 'com.mlykotom:valifi:1.2.0' } } diff --git a/example-viewmodel/build.gradle b/example-viewmodel/build.gradle index e5d75a8..46f7cc2 100644 --- a/example-viewmodel/build.gradle +++ b/example-viewmodel/build.gradle @@ -28,6 +28,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:27.0.2' + implementation 'com.android.support:design:27.0.2' implementation 'eu.inloop:androidviewmodel:1.3.3' debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4' @@ -37,6 +38,6 @@ dependencies { if(isLocalBuild) { implementation project(':valifi') } else { - implementation 'com.mlykotom:valifi:1.1.7' + implementation 'com.mlykotom:valifi:1.2.0' } } \ No newline at end of file diff --git a/valifi/build.gradle b/valifi/build.gradle index 4320627..6fadeb7 100644 --- a/valifi/build.gradle +++ b/valifi/build.gradle @@ -1,6 +1,6 @@ final VERSION_MAJOR = 1 // max two digits -final VERSION_MINOR = 1 // max two digits -final VERSION_PATCH = 7 // max two digits +final VERSION_MINOR = 2 // max two digits +final VERSION_PATCH = 0 // max two digits final VERSION_BUILD = 0 // max three digits apply plugin: 'com.android.library' @@ -69,9 +69,9 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:design:27.0.2' - testCompile 'junit:junit:4.12' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:design:27.0.2' + testImplementation 'junit:junit:4.12' } if(isLocalBuild) { @@ -88,7 +88,7 @@ if(isLocalBuild) { def compilePath = project.ext.publishedGroupId + ":" + project.ext.bintrayName + ":" // Task for updating readme file for new version of library - task updateReadmeFile << { + task updateReadmeFile { def readme = file('../README.md') def updatedReadmeText = readme.text.replaceFirst("compile '" + compilePath + "[^']+'", "compile '" + compilePath + version + "'") @@ -96,7 +96,7 @@ if(isLocalBuild) { } // task for updating example gradle scripts so that it matches the latest version of library - task updateExamplesLibraryVersion << { + task updateExamplesLibraryVersion { ['example-android', 'example-viewmodel'].each { def gradleScript = file("../${it}/build.gradle") def updatedGradleText = gradleScript.text.replaceAll("compile '" + compilePath + "[^']+'", "compile '" + compilePath + version + "'") diff --git a/valifi/src/main/java/com/mlykotom/valifi/ValiFi.java b/valifi/src/main/java/com/mlykotom/valifi/ValiFi.java index 581d200..bfb4bac 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/ValiFi.java +++ b/valifi/src/main/java/com/mlykotom/valifi/ValiFi.java @@ -30,7 +30,11 @@ public class ValiFi { private final Context mAppContext; - private ValiFi(Context appContext, @NonNull ValiFiConfig config) { + /** + * @param appContext nullable for tests + * @param config configuration of valifi (patterns, errors) + */ + private ValiFi(@Nullable Context appContext, @NonNull ValiFiConfig config) { mAppContext = appContext; mParameters = config; } @@ -118,6 +122,15 @@ static long getAsyncValidationDelay() { } + static ValiFi getInstance() { + if(ourInstance == null) { + throw new ValiFiException("ValiFi must be installed in Application.onCreate()!"); + } + + return ourInstance; + } + + static Context getContext() { if(getInstance().mAppContext == null) { throw new ValiFiException("ValiFi was installed without Context!"); @@ -126,12 +139,13 @@ static Context getContext() { } - static ValiFi getInstance() { - if(ourInstance == null) { - throw new ValiFiException("ValiFi must be installed in Application.onCreate()!"); + static String getString(@StringRes int stringRes, Object... formatArgs) { + @Nullable Context context = getInstance().mAppContext; + if(context == null) { + // tests may be initialized without context, so will use placeholder string + return "string-" + stringRes; } - - return ourInstance; + return context.getString(stringRes, formatArgs); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/ValiFieldBase.java b/valifi/src/main/java/com/mlykotom/valifi/ValiFieldBase.java index 43262b4..cbbb198 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/ValiFieldBase.java +++ b/valifi/src/main/java/com/mlykotom/valifi/ValiFieldBase.java @@ -1,6 +1,5 @@ package com.mlykotom.valifi; -import android.content.Context; import android.databinding.BaseObservable; import android.databinding.Bindable; import android.databinding.BindingAdapter; @@ -410,7 +409,7 @@ public String getError() { * @see #addVerifyFieldValidator(String, ValiFieldBase) */ public ValiFieldBase addVerifyFieldValidator(@StringRes int errorResource, final ValiFieldBase targetField) { - String errorMessage = getAppContext().getString(errorResource); + String errorMessage = getString(errorResource); return addVerifyFieldValidator(errorMessage, targetField); } @@ -459,7 +458,7 @@ public ValiFieldBase addCustomValidator(PropertyValidator * @see #addCustomValidator(String, PropertyValidator) */ public ValiFieldBase addCustomValidator(@StringRes int errorResource, PropertyValidator validator) { - String errorMessage = getAppContext().getString(errorResource); + String errorMessage = getString(errorResource); return addCustomValidator(errorMessage, validator); } @@ -513,7 +512,7 @@ public ValiFieldBase addCustomAsyncValidator(AsyncPropertyValidator addCustomAsyncValidator(@StringRes int errorResource, AsyncPropertyValidator validator) { - String errorMessage = getAppContext().getString(errorResource); + String errorMessage = getString(errorResource); return addCustomAsyncValidator(errorMessage, validator); } @@ -585,8 +584,15 @@ protected Pattern getPattern(@ValiFi.Builder.ValiFiPattern int field) { } - protected Context getAppContext() { - return ValiFi.getContext(); + /** + * Serves for getting strings in fields + * + * @param stringRes R.string.* + * @param formatArgs the same as in context.getString() + * @return formatted String | in case of tests, returns "string-*" + */ + protected String getString(@StringRes int stringRes, Object... formatArgs) { + return ValiFi.getString(stringRes, formatArgs); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldCard.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldCard.java index 9896b81..20cf7d4 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldCard.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldCard.java @@ -22,7 +22,7 @@ public ValiFieldCard() { public ValiFieldCard(@Nullable Long defaultValue) { super(defaultValue); - addSpecifiedValidator(getAppContext().getString(getErrorRes(ValiFi.Builder.ERROR_RES_CREDIT_CARD))); + addSpecifiedValidator(getString(getErrorRes(ValiFi.Builder.ERROR_RES_CREDIT_CARD))); } @@ -33,7 +33,7 @@ public ValiFieldCard(@StringRes int errorResource) { public ValiFieldCard(@Nullable Long defaultValue, @StringRes int errorResource) { super(defaultValue); - addNotEmptyValidator(getAppContext().getString(errorResource)); + addNotEmptyValidator(getString(errorResource)); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldDate.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldDate.java index 476ec3b..0dd3112 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldDate.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldDate.java @@ -65,7 +65,7 @@ public ValiFieldDate addOlderThanYearsValidator(int amount) { public ValiFieldDate addOlderThanValidator(@StringRes int errorResource, int calendarField, int amount) { - String errorMessage = getAppContext().getString(errorResource, amount); + String errorMessage = getString(errorResource, amount); return addOlderThanValidator(errorMessage, calendarField, amount); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldEmail.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldEmail.java index e3d1416..608e12a 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldEmail.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldEmail.java @@ -15,7 +15,7 @@ public ValiFieldEmail() { public ValiFieldEmail(@Nullable String defaultValue) { super(defaultValue); - addEmailValidator(getAppContext().getString(getErrorRes(ValiFi.Builder.ERROR_RES_EMAIL))); + addEmailValidator(getString(getErrorRes(ValiFi.Builder.ERROR_RES_EMAIL))); } @@ -26,7 +26,7 @@ public ValiFieldEmail(@StringRes int errorResource) { public ValiFieldEmail(@Nullable String defaultValue, @StringRes int errorResource) { super(defaultValue); - addEmailValidator(getAppContext().getString(errorResource)); + addEmailValidator(getString(errorResource)); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPassword.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPassword.java index 781eb58..4b7701a 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPassword.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPassword.java @@ -14,7 +14,7 @@ public ValiFieldPassword() { public ValiFieldPassword(@Nullable String defaultValue) { super(defaultValue); - addPasswordValidator(getAppContext().getString(getErrorRes(ValiFi.Builder.ERROR_RES_PASSWORD))); + addPasswordValidator(getString(getErrorRes(ValiFi.Builder.ERROR_RES_PASSWORD))); } @@ -25,7 +25,7 @@ public ValiFieldPassword(@StringRes int errorResource) { public ValiFieldPassword(@Nullable String defaultValue, @StringRes int errorResource) { super(defaultValue); - addPasswordValidator(getAppContext().getString(errorResource)); + addPasswordValidator(getString(errorResource)); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPhone.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPhone.java index 233cb43..1ea25b1 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPhone.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldPhone.java @@ -14,7 +14,7 @@ public ValiFieldPhone() { public ValiFieldPhone(@Nullable String defaultValue) { super(defaultValue); - addPhoneValidator(getAppContext().getString(getErrorRes(ValiFi.Builder.ERROR_RES_PHONE))); + addPhoneValidator(getString(getErrorRes(ValiFi.Builder.ERROR_RES_PHONE))); } @@ -25,7 +25,7 @@ public ValiFieldPhone(@StringRes int errorResource) { public ValiFieldPhone(@Nullable String defaultValue, @StringRes int errorResource) { super(defaultValue); - addPhoneValidator(getAppContext().getString(errorResource)); + addPhoneValidator(getString(errorResource)); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldText.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldText.java index 4b96522..1a624fe 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldText.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldText.java @@ -81,7 +81,7 @@ public ValiFieldText setEmptyAllowed(boolean isEmptyAllowed) { * @see #addPatternValidator(String, Pattern) */ public ValiFieldText addPatternValidator(@StringRes int errorResource, final Pattern pattern) { - String errorMessage = getAppContext().getString(errorResource); + String errorMessage = getString(errorResource); return addPatternValidator(errorMessage, pattern); } @@ -118,7 +118,7 @@ public ValiFieldText addNotEmptyValidator() { public ValiFieldText addNotEmptyValidator(@StringRes int errorResource) { - String errorMessage = getAppContext().getString(errorResource); + String errorMessage = getString(errorResource); return addNotEmptyValidator(errorMessage); } @@ -147,7 +147,7 @@ public ValiFieldText addMinLengthValidator(int minLength) { public ValiFieldText addMinLengthValidator(@StringRes int errorResource, int minLength) { - String errorMessage = getAppContext().getString(errorResource, minLength); + String errorMessage = getString(errorResource, minLength); return addMinLengthValidator(errorMessage, minLength); } @@ -171,7 +171,7 @@ public ValiFieldText addExactLengthValidator(int exactLength) { public ValiFieldText addExactLengthValidator(@StringRes int errorResource, int exactLength) { - String errorMessage = getAppContext().getString(errorResource, exactLength); + String errorMessage = getString(errorResource, exactLength); return addExactLengthValidator(errorMessage, exactLength); } @@ -190,7 +190,7 @@ public ValiFieldText addMaxLengthValidator(int maxLength) { public ValiFieldText addMaxLengthValidator(@StringRes int errorResource, int maxLength) { - String errorMessage = getAppContext().getString(errorResource, maxLength); + String errorMessage = getString(errorResource, maxLength); return addMaxLengthValidator(errorMessage, maxLength); } @@ -209,7 +209,7 @@ public ValiFieldText addRangeLengthValidator(int minLength, int maxLength) { public ValiFieldText addRangeLengthValidator(@StringRes int errorResource, int minLength, int maxLength) { - String errorMessage = getAppContext().getString(errorResource, minLength, maxLength); + String errorMessage = getString(errorResource, minLength, maxLength); return addRangeLengthValidator(errorMessage, minLength, maxLength); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldUsername.java b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldUsername.java index 4d26d3c..404523a 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldUsername.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/ValiFieldUsername.java @@ -14,7 +14,7 @@ public ValiFieldUsername() { public ValiFieldUsername(@Nullable String defaultValue) { super(defaultValue); - addUsernameValidator(getAppContext().getString(getErrorRes(ValiFi.Builder.ERROR_RES_USERNAME))); + addUsernameValidator(getString(getErrorRes(ValiFi.Builder.ERROR_RES_USERNAME))); } @@ -25,7 +25,7 @@ public ValiFieldUsername(@StringRes int errorResource) { public ValiFieldUsername(@Nullable String defaultValue, @StringRes int errorResource) { super(defaultValue); - addUsernameValidator(getAppContext().getString(errorResource)); + addUsernameValidator(getString(errorResource)); } diff --git a/valifi/src/main/java/com/mlykotom/valifi/fields/number/ValiFieldNumber.java b/valifi/src/main/java/com/mlykotom/valifi/fields/number/ValiFieldNumber.java index 18b45d3..9fe2c0d 100644 --- a/valifi/src/main/java/com/mlykotom/valifi/fields/number/ValiFieldNumber.java +++ b/valifi/src/main/java/com/mlykotom/valifi/fields/number/ValiFieldNumber.java @@ -74,7 +74,7 @@ public ValiFieldNumber addNumberValidator(@Nullable NumberValidator< public ValiFieldNumber addNumberValidator(@StringRes int errorResource, @Nullable NumberValidator validator) { - String errorMessage = getAppContext().getString(errorResource); + String errorMessage = getString(errorResource); return addNumberValidator(errorMessage, validator); } diff --git a/valifi/src/test/java/com/mlykotom/valifi/ValiFiTest.java b/valifi/src/test/java/com/mlykotom/valifi/ValiFiTest.java index 167c21e..168d5f6 100644 --- a/valifi/src/test/java/com/mlykotom/valifi/ValiFiTest.java +++ b/valifi/src/test/java/com/mlykotom/valifi/ValiFiTest.java @@ -9,6 +9,7 @@ import org.junit.Test; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; @@ -32,13 +33,13 @@ public void prepareField() { } - @Test(expected = ValiFiException.class) + @Test public void checkLibraryInstalled() { - mField.getAppContext(); + assertThat(ValiFi.getInstance(), notNullValue()); } - @Test(expected = ValiFiException.class) + @Test public void checkLibraryInstalledByAddingValidator() { mField.addCustomValidator(R.string.validation_error_email, new ValiFieldBase.PropertyValidator() { @Override diff --git a/valifi/src/test/java/com/mlykotom/valifi/fields/ValiFieldPasswordTest.java b/valifi/src/test/java/com/mlykotom/valifi/fields/ValiFieldPasswordTest.java index 9cabd43..f907169 100644 --- a/valifi/src/test/java/com/mlykotom/valifi/fields/ValiFieldPasswordTest.java +++ b/valifi/src/test/java/com/mlykotom/valifi/fields/ValiFieldPasswordTest.java @@ -1,4 +1,27 @@ package com.mlykotom.valifi.fields; +import com.mlykotom.valifi.ValiFiTest; + +import org.junit.Before; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; + + public class ValiFieldPasswordTest { + ValiFieldPassword field; + + + @Before + public void setup() { + ValiFiTest.installWithoutContext(); + field = new ValiFieldPassword(); + } + + + @Test + public void initializationSucces() { + assertThat(field.isValid(), not(true)); + } }