+BrandParams
+
+
+
CustomCardBrand
The data class definition for represent custom card brand.
@@ -108,6 +112,10 @@
Package com.verygoodsecurity.vgscollect.v
+ChecksumAlgorithm
+
+
+
FieldType
The enum class represents all available type of VGS input fields.
diff --git a/docs/com/verygoodsecurity/vgscollect/view/card/package-tree.html b/docs/com/verygoodsecurity/vgscollect/view/card/package-tree.html
index 5e9967fb5..2d722ae32 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/card/package-tree.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/card/package-tree.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.card Class Hierarchy
-
+
@@ -80,11 +80,13 @@ Hierarchy For Package com.verygoodsecurity.vgscollect.view.car
Class Hierarchy
Enum Hierarchy
diff --git a/docs/com/verygoodsecurity/vgscollect/view/date/DatePickerMode.html b/docs/com/verygoodsecurity/vgscollect/view/date/DatePickerMode.html
index 1e54c786f..632818290 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/date/DatePickerMode.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/date/DatePickerMode.html
@@ -2,10 +2,10 @@
-
+
DatePickerMode
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/date/package-frame.html b/docs/com/verygoodsecurity/vgscollect/view/date/package-frame.html
index 576040f60..4ce324bb1 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/date/package-frame.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/date/package-frame.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.date
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/date/package-summary.html b/docs/com/verygoodsecurity/vgscollect/view/date/package-summary.html
index f9fbeaf1b..115b63cf6 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/date/package-summary.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/date/package-summary.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.date
-
+
@@ -44,7 +44,7 @@
@@ -114,7 +114,7 @@ Package com.verygoodsecurity.vgscollect.v
diff --git a/docs/com/verygoodsecurity/vgscollect/view/date/package-tree.html b/docs/com/verygoodsecurity/vgscollect/view/date/package-tree.html
index 7c85597d5..4fcd89cc7 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/date/package-tree.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/date/package-tree.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.date Class Hierarchy
-
+
@@ -43,7 +43,7 @@
@@ -102,7 +102,7 @@ Enum Hierarchy
diff --git a/docs/com/verygoodsecurity/vgscollect/view/material/TextInputFieldLayout.html b/docs/com/verygoodsecurity/vgscollect/view/material/TextInputFieldLayout.html
index 30d197001..5a4fdf655 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/material/TextInputFieldLayout.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/material/TextInputFieldLayout.html
@@ -2,10 +2,10 @@
-
+
TextInputFieldLayout
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/material/package-frame.html b/docs/com/verygoodsecurity/vgscollect/view/material/package-frame.html
index 425189a08..8da6b39af 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/material/package-frame.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/material/package-frame.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.material
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/material/package-summary.html b/docs/com/verygoodsecurity/vgscollect/view/material/package-summary.html
index 1291cb652..91ea3b39f 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/material/package-summary.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/material/package-summary.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.material
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/material/package-tree.html b/docs/com/verygoodsecurity/vgscollect/view/material/package-tree.html
index 3dd9a2061..ecf08e2af 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/material/package-tree.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/material/package-tree.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view.material Class Hierarchy
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/package-frame.html b/docs/com/verygoodsecurity/vgscollect/view/package-frame.html
index 24e19a2e0..b514281e2 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/package-frame.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/package-frame.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/package-summary.html b/docs/com/verygoodsecurity/vgscollect/view/package-summary.html
index 9d93bbf1d..9ee674711 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/package-summary.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/package-summary.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/view/package-tree.html b/docs/com/verygoodsecurity/vgscollect/view/package-tree.html
index 2bd2db3ae..41e94449b 100644
--- a/docs/com/verygoodsecurity/vgscollect/view/package-tree.html
+++ b/docs/com/verygoodsecurity/vgscollect/view/package-tree.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.view Class Hierarchy
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/CardVerificationCodeEditText.html b/docs/com/verygoodsecurity/vgscollect/widget/CardVerificationCodeEditText.html
index 54a91807c..ef2278a0e 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/CardVerificationCodeEditText.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/CardVerificationCodeEditText.html
@@ -2,11 +2,12 @@
-
+
CardVerificationCodeEditText
-
+
+
@@ -72,13 +73,13 @@
Nested |
Field |
Constr |
-Method
+Method
@@ -158,6 +159,29 @@ CardVerificationCodeEditText
+
+
+
+
+
+Method Detail
+
+
+
+
+
+
@@ -211,13 +235,13 @@ CardVerificationCodeEditText
Nested |
Field |
Constr |
-Method
+Method
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.OnDatePickerVisibilityChangeListener.html b/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.OnDatePickerVisibilityChangeListener.html
index 8c4825fdf..32d3a82ec 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.OnDatePickerVisibilityChangeListener.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.OnDatePickerVisibilityChangeListener.html
@@ -2,10 +2,10 @@
-
+
ExpirationDateEditText.OnDatePickerVisibilityChangeListener
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.html b/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.html
index ccd5881aa..caec90593 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/ExpirationDateEditText.html
@@ -2,10 +2,10 @@
-
+
ExpirationDateEditText
-
+
@@ -14,6 +14,7 @@
+
@@ -271,7 +272,7 @@ showDatePickerDialog
-
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.html b/docs/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.html
index ea2ea90c4..77bccef46 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.html
@@ -2,11 +2,13 @@
-
+
PersonNameEditText
-
+
+
+
@@ -72,13 +74,13 @@
Nested |
Field |
Constr |
-Method
+Method
@@ -158,6 +160,40 @@ PersonNameEditText
+
+
@@ -211,13 +247,13 @@ PersonNameEditText
Nested |
Field |
Constr |
-Method
+Method
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/VGSCardNumberEditText.html b/docs/com/verygoodsecurity/vgscollect/widget/VGSCardNumberEditText.html
index 2e16765aa..e739db690 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/VGSCardNumberEditText.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/VGSCardNumberEditText.html
@@ -2,10 +2,10 @@
-
+
VGSCardNumberEditText
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/VGSEditText.html b/docs/com/verygoodsecurity/vgscollect/widget/VGSEditText.html
index a5fa21545..ff3acaa36 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/VGSEditText.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/VGSEditText.html
@@ -2,12 +2,13 @@
-
+
VGSEditText
-
+
+
@@ -172,7 +173,7 @@ Method Detail
-
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.Companion.html b/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.Companion.html
index 864bea428..d22b3c5f6 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.Companion.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.Companion.html
@@ -2,10 +2,10 @@
-
+
VGSTextInputLayout.Companion
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.html b/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.html
index 093b49abd..d990a92e2 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/VGSTextInputLayout.html
@@ -2,10 +2,10 @@
-
+
VGSTextInputLayout
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/package-frame.html b/docs/com/verygoodsecurity/vgscollect/widget/package-frame.html
index 09e8eca86..043d27206 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/package-frame.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/package-frame.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.widget
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/package-summary.html b/docs/com/verygoodsecurity/vgscollect/widget/package-summary.html
index d12824956..1500d9083 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/package-summary.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/package-summary.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.widget
-
+
diff --git a/docs/com/verygoodsecurity/vgscollect/widget/package-tree.html b/docs/com/verygoodsecurity/vgscollect/widget/package-tree.html
index b36267003..27e981341 100644
--- a/docs/com/verygoodsecurity/vgscollect/widget/package-tree.html
+++ b/docs/com/verygoodsecurity/vgscollect/widget/package-tree.html
@@ -2,10 +2,10 @@
-
+
com.verygoodsecurity.vgscollect.widget Class Hierarchy
-
+
diff --git a/docs/constant-values.html b/docs/constant-values.html
index 2378e204a..32f9ad654 100644
--- a/docs/constant-values.html
+++ b/docs/constant-values.html
@@ -2,10 +2,10 @@
-
+
Constant Field Values
-
+
diff --git a/docs/deprecated-list.html b/docs/deprecated-list.html
index 72e549645..15d8381de 100644
--- a/docs/deprecated-list.html
+++ b/docs/deprecated-list.html
@@ -2,10 +2,10 @@
-
+
Deprecated List
-
+
diff --git a/docs/help-doc.html b/docs/help-doc.html
index 9f5403f5c..7274af6e1 100644
--- a/docs/help-doc.html
+++ b/docs/help-doc.html
@@ -2,10 +2,10 @@
-
+
API Help
-
+
diff --git a/docs/index-all.html b/docs/index-all.html
index 0f8baa926..43c12f38c 100644
--- a/docs/index-all.html
+++ b/docs/index-all.html
@@ -2,10 +2,10 @@
-
+
Index
-
+
@@ -90,6 +90,12 @@ A
Adds a listener to the list of those whose methods are called whenever the VGSCollect receive response from Server.
+addRule(validator) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.CompositeValidator
+
+addRule(rule) - Method in class com.verygoodsecurity.vgscollect.widget.PersonNameEditText
+
+Adds a behaviour rule for the field.
+
addView(child) - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
addView(child, params) - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
@@ -120,6 +126,8 @@ A
Deprecated.
+applyValidationRule(rule) - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
+
asyncSubmit(path, method) - Method in class com.verygoodsecurity.vgscollect.core.VGSCollect
This method executes and send data on VGS Server.
@@ -165,10 +173,20 @@ B
BooleanExtensionKt() - Constructor for class com.verygoodsecurity.vgscollect.util.BooleanExtensionKt
+BrandParams - Class in com.verygoodsecurity.vgscollect.view.card
+
+BrandParams(mask, algorithm, rangeNumber, rangeCVV) - Constructor for class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
+BrandParams() - Constructor for class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
build() - Method in class com.verygoodsecurity.vgscollect.core.model.network.VGSRequest.VGSRequestBuilder
Creates a VGSRequest with the arguments supplied to this.
+build() - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule.ValidationBuilder
+
+Creates a rule.
+
@@ -226,11 +244,15 @@ C
CardVerificationCodeEditText(context) - Constructor for class com.verygoodsecurity.vgscollect.widget.CardVerificationCodeEditText
+ChecksumAlgorithm - Enum in com.verygoodsecurity.vgscollect.view.card
+
clearFocus() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
Called when this view wants to give up focus. If focus is cleared
onFocusChanged(boolean, int, android.graphics.Rect) is called.
+clearRules() - Method in class com.verygoodsecurity.vgscollect.view.card.validation.CompositeValidator
+
com.verygoodsecurity.vgscollect.app - package com.verygoodsecurity.vgscollect.app
com.verygoodsecurity.vgscollect.core - package com.verygoodsecurity.vgscollect.core
@@ -253,6 +275,10 @@ C
com.verygoodsecurity.vgscollect.view.card.icon - package com.verygoodsecurity.vgscollect.view.card.icon
+com.verygoodsecurity.vgscollect.view.card.validation - package com.verygoodsecurity.vgscollect.view.card.validation
+
+com.verygoodsecurity.vgscollect.view.card.validation.payment - package com.verygoodsecurity.vgscollect.view.card.validation.payment
+
com.verygoodsecurity.vgscollect.view.date - package com.verygoodsecurity.vgscollect.view.date
com.verygoodsecurity.vgscollect.view.material - package com.verygoodsecurity.vgscollect.view.material
@@ -275,6 +301,8 @@ C
The size of a file which it takes up on your device
+component1() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
component1() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The regex rules for detection card brand.
@@ -287,6 +315,8 @@ C
The name of the file
+ component2() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
component2() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The name of current card brand.
@@ -299,6 +329,8 @@ C
The MIME type ot the file
+ component3() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
component3() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The drawable resource represents credit card logo.
@@ -311,6 +343,8 @@ C
The text to be used for data transfer to VGS proxy.
+ component4() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
component4() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
component5() - Method in class com.verygoodsecurity.vgscollect.core.model.network.VGSRequest
@@ -321,6 +355,10 @@ C
contains true if need to skip files.
+CompositeValidator - Class in com.verygoodsecurity.vgscollect.view.card.validation
+
+CompositeValidator() - Constructor for class com.verygoodsecurity.vgscollect.view.card.validation.CompositeValidator
+
copy(method, path, customHeader, customData, fieldsIgnore, fileIgnore) - Method in class com.verygoodsecurity.vgscollect.core.model.network.VGSRequest
Class to collect data before submit.
@@ -329,11 +367,17 @@ C
The base class definition for a file presentation state.
- copy(regex, cardBrandName, drawableResId, mask) - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
+copy(mask, algorithm, rangeNumber, rangeCVV) - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
+copy(regex, cardBrandName, drawableResId, params) - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The data class definition for represent custom card brand.
It may be useful to add new brands in addition to already defined brands or override existing ones.
+copy(regex, length) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
+
+This rule provides a simplified mechanism to improve default behavior of field which include person name.
+
CREATOR - Static variable in class com.verygoodsecurity.vgscollect.view.InputFieldView.SavedState
CustomCardBrand - Class in com.verygoodsecurity.vgscollect.view.card
@@ -341,7 +385,7 @@ C
The data class definition for represent custom card brand.
It may be useful to add new brands in addition to already defined brands or override existing ones.
-CustomCardBrand(regex, cardBrandName, drawableResId, mask) - Constructor for class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
+CustomCardBrand(regex, cardBrandName, drawableResId, params) - Constructor for class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The data class definition for represent custom card brand.
It may be useful to add new brands in addition to already defined brands or override existing ones.
@@ -408,11 +452,15 @@ E
equals(other) - Method in class com.verygoodsecurity.vgscollect.core.model.state.FileState
+equals(other) - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
equals(p) - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The data class definition for represent custom card brand.
It may be useful to add new brands in addition to already defined brands or override existing ones.
+equals(other) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
+
ErrorResponse(localizeMessage, errorCode) - Constructor for class com.verygoodsecurity.vgscollect.core.model.network.VGSResponse.ErrorResponse
The class definition for an error response state.
@@ -498,6 +546,10 @@ F
G
+getAlgorithm() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
+getAlgorithm() - Method in enum com.verygoodsecurity.vgscollect.view.card.CardType
+
getAllStates() - Method in class com.verygoodsecurity.vgscollect.core.VGSCollect
Returns the states of all fields bound before to VGSCollect.
@@ -518,6 +570,8 @@ G
The name of current card brand.
+ getCardHolderName() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
+
getCardIconGravity() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
getCardNumberState() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
@@ -544,6 +598,8 @@ G
The headers to save for request.
+getCVCState() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
+
getDateMode() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
getDatePattern() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
@@ -587,6 +643,8 @@ G
The response code from server.
+getExpirationDate() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
+
getFieldName() - Method in class com.verygoodsecurity.vgscollect.core.model.state.FieldState
The text to be used for data transfer to VGS proxy.
@@ -651,6 +709,8 @@
G
Get the type of the Input Method Editor (IME).
+
getInfoState() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
+
getInputType() - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
Get the type of the editable content.
@@ -663,9 +723,9 @@ G
The message of the error.
- getMask() - Method in enum com.verygoodsecurity.vgscollect.view.card.CardType
+
getMask() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
-
getMask() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
+
getMask() - Method in enum com.verygoodsecurity.vgscollect.view.card.CardType
getMask(cardType, name, bin, mask) - Method in class com.verygoodsecurity.vgscollect.view.card.formatter.CardMaskAdapter
@@ -674,6 +734,8 @@ G
getMask() - Method in class com.verygoodsecurity.vgscollect.view.card.formatter.CardNumberFormatter
+
getMask() - Method in interface com.verygoodsecurity.vgscollect.view.card.formatter.Formatter
+
getMaskLength() - Method in class com.verygoodsecurity.vgscollect.view.card.formatter.CardNumberFormatter
getMessageResId() - Method in enum com.verygoodsecurity.vgscollect.core.model.network.VGSError
@@ -759,14 +821,20 @@
G
Returns the top padding of this view.
+
getParams() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
+
getPath() - Method in class com.verygoodsecurity.vgscollect.core.model.network.VGSRequest
path for a request
+
getRangeCVV() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
getRangeCVV() - Method in enum com.verygoodsecurity.vgscollect.view.card.CardType
The length of the card
+
getRangeNumber() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
getRangeNumber() - Method in enum com.verygoodsecurity.vgscollect.view.card.CardType
The length of the card
@@ -803,10 +871,26 @@ G
The size of a file which it takes up on your device
+ getState() - Method in class com.verygoodsecurity.vgscollect.widget.CardVerificationCodeEditText
+
+It return current state of the field.
+
+
getState() - Method in class com.verygoodsecurity.vgscollect.widget.ExpirationDateEditText
+
+It return current state of the field.
+
+
getState() - Method in class com.verygoodsecurity.vgscollect.widget.PersonNameEditText
+
+It return current state of the field.
+
getState() - Method in class com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText
It return current state of the field.
+
getState() - Method in class com.verygoodsecurity.vgscollect.widget.VGSEditText
+
+It return current state of the field.
+
getSuccessCode() - Method in class com.verygoodsecurity.vgscollect.core.model.network.VGSResponse.SuccessResponse
The response code from server.
@@ -835,11 +919,15 @@ H
hashCode() - Method in class com.verygoodsecurity.vgscollect.core.model.state.FileState
+
hashCode() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
hashCode() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The data class definition for represent custom card brand.
It may be useful to add new brands in addition to already defined brands or override existing ones.
+
hashCode() - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
+
HTTPMethod - Enum in com.verygoodsecurity.vgscollect.core
The set of common methods for HTTP.
@@ -902,6 +990,8 @@ I
The state is true if the content inside the input field is valid.
+ isValid(content) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.CompositeValidator
+
@@ -1022,6 +1112,18 @@ P
PersonNameEditText(context) - Constructor for class com.verygoodsecurity.vgscollect.widget.PersonNameEditText
+PersonNameRule - Class in com.verygoodsecurity.vgscollect.view.card.validation.payment
+
+This rule provides a simplified mechanism to improve default behavior of field which include person name.
+
+PersonNameRule(regex, length) - Constructor for class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
+
+This rule provides a simplified mechanism to improve default behavior of field which include person name.
+
+PersonNameRule.ValidationBuilder - Class in com.verygoodsecurity.vgscollect.view.card.validation.payment
+
+This class provides an API for set up rules for validation person name.
+
processItem(rootMap, rootValue, keyList) - Static method in class com.verygoodsecurity.vgscollect.util.MutableMapExtensionKt
processItemAsMap(rootMap, rootValue, keyList) - Static method in class com.verygoodsecurity.vgscollect.util.MutableMapExtensionKt
@@ -1064,6 +1166,14 @@ S
SavedState.Companion - Class in com.verygoodsecurity.vgscollect.view
+setAllowableMaxLength(length) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule.ValidationBuilder
+
+Configure maximum length of the name which will support.
+
+setAllowableMinLength(length) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule.ValidationBuilder
+
+Configure minimum length of the name which will support.
+
setAutofillHints(autofillHints) - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
setAutofillId(id) - Method in class com.verygoodsecurity.vgscollect.view.InputFieldView
@@ -1440,6 +1550,10 @@ S
Set the path using for a request to the server.
+setRegex(regex) - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule.ValidationBuilder
+
+Configure Regex for validation input.
+
setRequired$module(p) - Method in class com.verygoodsecurity.vgscollect.core.model.state.FieldState
The state is true if the input field may be skipped for submitting.
@@ -1591,11 +1705,17 @@ T
The base class definition for a file presentation state.
+ toString() - Method in class com.verygoodsecurity.vgscollect.view.card.BrandParams
+
toString() - Method in class com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
The data class definition for represent custom card brand.
It may be useful to add new brands in addition to already defined brands or override existing ones.
+toString() - Method in class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
+
+This rule provides a simplified mechanism to improve default behavior of field which include person name.
+
@@ -1612,6 +1732,10 @@ U
V
+ValidationBuilder() - Constructor for class com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule.ValidationBuilder
+
+This class provides an API for set up rules for validation person name.
+
VGSCardNumberEditText - Class in com.verygoodsecurity.vgscollect.widget
A user interface element that displays text to the user in card number format.
diff --git a/docs/index.html b/docs/index.html
index d3b89879d..644363415 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -2,7 +2,7 @@
-
+
Generated Documentation (Untitled)
@@ -26,6 +26,8 @@ Packages
com.verygoodsecurity.vgscollect.view.card
com.verygoodsecurity.vgscollect.view.card.formatter
com.verygoodsecurity.vgscollect.view.card.icon
+com.verygoodsecurity.vgscollect.view.card.validation
+com.verygoodsecurity.vgscollect.view.card.validation.payment
com.verygoodsecurity.vgscollect.view.date
com.verygoodsecurity.vgscollect.view.material
com.verygoodsecurity.vgscollect.widget
diff --git a/docs/overview-summary.html b/docs/overview-summary.html
index 2ac1a1abb..dec14cf2a 100644
--- a/docs/overview-summary.html
+++ b/docs/overview-summary.html
@@ -2,10 +2,10 @@
-
+
Overview
-
+
@@ -123,6 +123,14 @@
+com.verygoodsecurity.vgscollect.view.card.validation
+
+
+
+com.verygoodsecurity.vgscollect.view.card.validation.payment
+
+
+
com.verygoodsecurity.vgscollect.view.date
diff --git a/docs/overview-tree.html b/docs/overview-tree.html
index f6405eb26..0f0cb1642 100644
--- a/docs/overview-tree.html
+++ b/docs/overview-tree.html
@@ -2,10 +2,10 @@
-
+
Class Hierarchy
-
+
@@ -84,6 +84,8 @@ Hierarchy For All Packages
com.verygoodsecurity.vgscollect.view.card ,
com.verygoodsecurity.vgscollect.view.card.formatter ,
com.verygoodsecurity.vgscollect.view.card.icon ,
+com.verygoodsecurity.vgscollect.view.card.validation ,
+com.verygoodsecurity.vgscollect.view.card.validation.payment ,
com.verygoodsecurity.vgscollect.view.date ,
com.verygoodsecurity.vgscollect.view.material ,
com.verygoodsecurity.vgscollect.widget
@@ -117,6 +119,7 @@ Class Hierarchy
com.verygoodsecurity.vgscollect.widget.VGSTextInputLayout.Companion
com.verygoodsecurity.vgscollect.view.card.formatter.CardNumberFormatter.Companion
+com.verygoodsecurity.vgscollect.view.card.BrandParams
com.verygoodsecurity.vgscollect.view.card.formatter.CardNumberFormatter (implements com.verygoodsecurity.vgscollect.view.card.formatter.Formatter )
com.verygoodsecurity.vgscollect.view.InputFieldView
@@ -129,11 +132,14 @@ Class Hierarchy
com.verygoodsecurity.vgscollect.util.MapToJsonExtensionKt
com.verygoodsecurity.vgscollect.util.NumberExtensionKt
+com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
com.verygoodsecurity.vgscollect.core.VGSCollect
com.verygoodsecurity.vgscollect.core.model.state.FileState
com.verygoodsecurity.vgscollect.core.model.network.VGSRequest.VGSRequestBuilder
com.verygoodsecurity.vgscollect.util.BooleanExtensionKt
com.verygoodsecurity.vgscollect.util.MutableMapExtensionKt
+com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule.ValidationBuilder
+com.verygoodsecurity.vgscollect.view.card.validation.CompositeValidator
com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
com.verygoodsecurity.vgscollect.util.UriExtensionKt
com.verygoodsecurity.vgscollect.view.InputFieldView.SavedState
@@ -159,6 +165,7 @@ Enum Hierarchy
com.verygoodsecurity.vgscollect.view.card.CardType
com.verygoodsecurity.vgscollect.view.date.DatePickerMode
com.verygoodsecurity.vgscollect.view.card.FieldType
+com.verygoodsecurity.vgscollect.view.card.ChecksumAlgorithm
com.verygoodsecurity.vgscollect.core.model.network.VGSError
com.verygoodsecurity.vgscollect.core.HTTPMethod
diff --git a/docs/package-list b/docs/package-list
index 1783a0e72..a3c7f4c83 100644
--- a/docs/package-list
+++ b/docs/package-list
@@ -9,6 +9,8 @@ com.verygoodsecurity.vgscollect.view
com.verygoodsecurity.vgscollect.view.card
com.verygoodsecurity.vgscollect.view.card.formatter
com.verygoodsecurity.vgscollect.view.card.icon
+com.verygoodsecurity.vgscollect.view.card.validation
+com.verygoodsecurity.vgscollect.view.card.validation.payment
com.verygoodsecurity.vgscollect.view.date
com.verygoodsecurity.vgscollect.view.material
com.verygoodsecurity.vgscollect.widget
diff --git a/vgscollect/gradle.properties b/vgscollect/gradle.properties
index 9ed09a9c8..55c5bb528 100644
--- a/vgscollect/gradle.properties
+++ b/vgscollect/gradle.properties
@@ -3,5 +3,5 @@ POM_DESCRIPTION=VGS Collect - is a product suite that allows customers to collec
POM_BINTRAY_NAME=vgscollect
POM_ARTIFACT_ID=vgscollect
POM_PACKAGING=aar
-POM_VERSION=1.1.15
-CODE_VERSION=1115
\ No newline at end of file
+POM_VERSION=1.1.16
+CODE_VERSION=1116
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/FieldContent.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/FieldContent.kt
index d867a9e82..db6ae1d58 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/FieldContent.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/FieldContent.kt
@@ -14,6 +14,8 @@ sealed class FieldContent {
class CardNumberContent:FieldContent() {
var rawData:String? = null
var cardtype: CardType = CardType.NONE
+ var numberRange: Array = CardType.NONE.rangeNumber
+ var rangeCVV: Array = CardType.NONE.rangeCVV
var iconResId:Int? = 0
internal set
var cardBrandName:String? = null
@@ -42,7 +44,7 @@ sealed class FieldContent {
/** @suppress */
internal fun FieldContent.CreditCardExpDateContent.handleOutputFormat(selectedDate: Calendar, fieldDateFormat: SimpleDateFormat?, fieldDateOutPutFormat: SimpleDateFormat?) {
if(fieldDateFormat != null && fieldDateFormat.toPattern() == fieldDateOutPutFormat?.toPattern()) {
- data = fieldDateFormat?.format(selectedDate.time)
+ data = fieldDateFormat.format(selectedDate.time)
rawData = data
} else {
data = fieldDateFormat?.format(selectedDate.time)
@@ -50,10 +52,6 @@ internal fun FieldContent.CreditCardExpDateContent.handleOutputFormat(selectedDa
}
}
-/** @suppress */
-internal fun FieldContent.CardNumberContent.CVCMaxLength() = cardtype.rangeCVV.last()
-internal fun FieldContent.CardNumberContent.CVCMinLength() = cardtype.rangeCVV[0]
-
/** @suppress */
internal fun FieldContent.CardNumberContent.parseCardBin():String {
return data?.run {
@@ -70,12 +68,18 @@ internal fun FieldContent.CardNumberContent.parseCardBin():String {
internal fun FieldContent.CardNumberContent.parseCardLast4Digits():String {
return data?.run {
val numberSTR = data!!.replace("\\D".toRegex(), "")
- if(numberSTR.length > 10) {
+ if(cardtype == CardType.NONE) {
+ if(numberSTR.length > 12) {
+ val start = numberSTR.length - 4
+ val end = numberSTR.length
+ numberSTR.substring(start, end)
+ } else {
+ ""
+ }
+ } else {
val start = numberSTR.length - 4
val end = numberSTR.length
- numberSTR.substring(start, end)
- } else {
- ""
+ return numberSTR.substring(start, end)
}
}?:""
}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/VGSFieldState.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/VGSFieldState.kt
index a187ba85d..705acdf1a 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/VGSFieldState.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/model/state/VGSFieldState.kt
@@ -36,7 +36,7 @@ internal fun VGSFieldState.mapToFieldState():FieldState {
val content = (content as? FieldContent.CardNumberContent)
if(isValid) {
state.bin = content?.parseCardBin()
- state.last = content?.parseRawCardLastDigits()
+ state.last = content?.parseCardLast4Digits()
}
state.number = content?.parseCardNumber()
state.cardBrand = content?.cardBrandName?:""
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/storage/Notifier.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/storage/Notifier.kt
index 157690157..dc6954c66 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/storage/Notifier.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/core/storage/Notifier.kt
@@ -29,19 +29,13 @@ internal class Notifier: DependencyDispatcher, FieldDependencyObserver {
}
private fun notifyRelatedFields(state: VGSFieldState, onDependencyDetected: (FieldType, Dependency) -> Unit) {
- val range = Pair(getMinCVCLength(state), getMaxCVCLength(state))
- val dependency = Dependency(DependencyType.RANGE, range)
when {
- state.isCardNumberType() -> onDependencyDetected(FieldType.CVC, dependency)
+ state.isCardNumberType() -> {
+ val r:Array = (state.content as? FieldContent.CardNumberContent)?.rangeCVV?.sortedArray()?: arrayOf(3,4)
+ val dependency = Dependency(DependencyType.RANGE, r)
+ onDependencyDetected(FieldType.CVC, dependency)
+ }
}
}
-
- private fun getMinCVCLength(state: VGSFieldState):Int {
- return (state.content as? FieldContent.CardNumberContent)?.CVCMinLength()?:3
- }
-
- private fun getMaxCVCLength(state: VGSFieldState):Int {
- return (state.content as? FieldContent.CardNumberContent)?.CVCMaxLength()?:4
- }
}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/InputFieldView.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/InputFieldView.kt
index 5424b9858..9b6074f81 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/InputFieldView.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/InputFieldView.kt
@@ -29,6 +29,7 @@ import com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
import com.verygoodsecurity.vgscollect.view.card.FieldType
import com.verygoodsecurity.vgscollect.view.card.formatter.CardMaskAdapter
import com.verygoodsecurity.vgscollect.view.card.icon.CardIconAdapter
+import com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
import com.verygoodsecurity.vgscollect.view.date.DatePickerMode
import com.verygoodsecurity.vgscollect.view.material.TextInputFieldLayout
import com.verygoodsecurity.vgscollect.widget.ExpirationDateEditText
@@ -1073,4 +1074,10 @@ abstract class InputFieldView @JvmOverloads constructor(
fun enableValidation(isEnabled:Boolean) {
inputField.enableValidation = isEnabled
}
+
+ protected fun applyValidationRule(rule: PersonNameRule) {
+ if(fieldType == FieldType.CARD_HOLDER_NAME) {
+ (inputField as? PersonNameInputField)?.applyValidationRule(rule)
+ }
+ }
}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/BrandParams.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/BrandParams.kt
new file mode 100644
index 000000000..aabeb9336
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/BrandParams.kt
@@ -0,0 +1,31 @@
+package com.verygoodsecurity.vgscollect.view.card
+
+data class BrandParams(
+ val mask:String = "#### #### #### #### ###",
+ val algorithm:ChecksumAlgorithm = ChecksumAlgorithm.NONE,
+ val rangeNumber:Array = CardType.NONE.rangeNumber,
+ val rangeCVV:Array = CardType.NONE.rangeCVV
+) {
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as BrandParams
+
+ if (mask != other.mask) return false
+ if (algorithm != other.algorithm) return false
+ if (!rangeNumber.contentEquals(other.rangeNumber)) return false
+ if (!rangeCVV.contentEquals(other.rangeCVV)) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = mask.hashCode()
+ result = 31 * result + algorithm.hashCode()
+ result = 31 * result + rangeNumber.contentHashCode()
+ result = 31 * result + rangeCVV.contentHashCode()
+ return result
+ }
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CardType.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CardType.kt
index a94ebb631..f9eb60625 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CardType.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CardType.kt
@@ -15,99 +15,105 @@ import com.verygoodsecurity.vgscollect.R
enum class CardType(val regex:String,
val resId:Int,
val mask:String,
+ val algorithm: ChecksumAlgorithm,
val rangeNumber:Array,
val rangeCVV:Array) {
- /** Validation of this card brand includes the Luhn algorithm. */
ELO(
"^(4011(78|79)|43(1274|8935)|45(1416|7393|763(1|2))|50(4175|6699|67[0-7][0-9]|9000)|627780|63(6297|6368)|650(03([^4])|04([0-9])|05(0|1)|4(0[5-9]|3[0-9]|8[5-9]|9[0-9])|5([0-2][0-9]|3[0-8])|9([2-6][0-9]|7[0-8])|541|700|720|901)|651652|655000|655021)",
R.drawable.ic_elo_dark,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
arrayOf(16),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
+
VISA_ELECTRON(
"^4(026|17500|405|508|844|91[37])",
R.drawable.ic_visa_electron_dark,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
arrayOf(16),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
+
MAESTRO(
"^(5018|5020|5038|6304|6390[0-9]{2}|67[0-9]{4})",
R.drawable.ic_maestro_dark,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
(13..19).toList().toTypedArray(),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
+
FORBRUGSFORENINGEN(
"^600",
R.drawable.ic_forbrugsforeningen_dark,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
arrayOf(16),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
+
DANKORT(
"^5019",
R.drawable.ic_dankort_dark,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
arrayOf(16),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
VISA(
"^4",
R.drawable.ic_visa_dark,
"#### #### #### #### ###",
+ ChecksumAlgorithm.LUHN,
arrayOf(13,16,19),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
MASTERCARD(
"^(5[1-5]|677189)|^(222[1-9]|2[3-6]\\d{2,}|27[0-1]\\d|2720)([0-9]{2,})",
R.drawable.ic_mastercard_dark,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
arrayOf(16),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
AMERICAN_EXPRESS(
"^3[47]",
R.drawable.ic_amex_lite,
"#### ###### #####",
+ ChecksumAlgorithm.LUHN,
arrayOf(15),
arrayOf(4)
),
- /** Validation of this card brand includes the Luhn algorithm. */
+
HIPERCARD(
"^(384100|384140|384160|606282|637095|637568|60(?!11))",
R.drawable.ic_hipercard_dark,
"#### #### #### #### ###",
+ ChecksumAlgorithm.LUHN,
(14..19).toList().toTypedArray(),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
DINCLUB(
"^3(?:[689]|(?:0[059]+))",
R.drawable.ic_diners_dark,
"#### ###### ######",
+ ChecksumAlgorithm.LUHN,
arrayOf(14, 16),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
DISCOVER(
"^(6011|65|64[4-9]|622)",
R.drawable.ic_discover_light,
"#### #### #### ####",
+ ChecksumAlgorithm.LUHN,
arrayOf(16),
arrayOf(3)
),
@@ -115,15 +121,16 @@ enum class CardType(val regex:String,
"^(62)",
R.drawable.ic_union_pay,
"#### #### #### #### ###",
+ ChecksumAlgorithm.NONE,
(16..19).toList().toTypedArray(),
arrayOf(3)
),
- /** Validation of this card brand includes the Luhn algorithm. */
JCB(
"^35",
R.drawable.ic_jcb_light,
"#### #### #### #### ###",
+ ChecksumAlgorithm.LUHN,
(16..19).toList().toTypedArray(),
arrayOf(3)
),
@@ -132,7 +139,8 @@ enum class CardType(val regex:String,
"^\$a",
R.drawable.ic_card_front_preview_dark,
"#### #### #### #### ###",
- (7..19).toList().toTypedArray(),
+ ChecksumAlgorithm.NONE,
+ (13..19).toList().toTypedArray(),
arrayOf(3,4)
);
}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/ChecksumAlgorithm.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/ChecksumAlgorithm.kt
new file mode 100644
index 000000000..4bc0c9954
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/ChecksumAlgorithm.kt
@@ -0,0 +1,6 @@
+package com.verygoodsecurity.vgscollect.view.card
+
+enum class ChecksumAlgorithm {
+ LUHN,
+ NONE
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CustomCardBrand.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CustomCardBrand.kt
index ef85bde78..2406abc90 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CustomCardBrand.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/CustomCardBrand.kt
@@ -17,5 +17,6 @@ data class CustomCardBrand(
/** The drawable resource represents credit card logo. */
val drawableResId:Int = 0,
- val mask:String = "#### #### #### #### ###"
+
+ val params:BrandParams = BrandParams()
)
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/BaseInputConnection.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/BaseInputConnection.kt
similarity index 83%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/BaseInputConnection.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/BaseInputConnection.kt
index 9da36979b..c3bd773be 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/BaseInputConnection.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/BaseInputConnection.kt
@@ -1,9 +1,10 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
-internal abstract class BaseInputConnection: InputRunnable {
+internal abstract class BaseInputConnection:
+ InputRunnable {
private var stateListeners = mutableListOf()
protected fun addNewListener(listener: OnVgsViewStateChangeListener) {
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardCVCConnection.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardCVCConnection.kt
similarity index 96%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardCVCConnection.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardCVCConnection.kt
index 1d143fd6e..b1972ac37 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardCVCConnection.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardCVCConnection.kt
@@ -1,4 +1,4 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardExpDateConnection.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardExpDateConnection.kt
similarity index 96%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardExpDateConnection.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardExpDateConnection.kt
index 7b8cd82e9..41373c970 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardExpDateConnection.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardExpDateConnection.kt
@@ -1,4 +1,4 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardHolderConnection.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardHolderConnection.kt
similarity index 96%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardHolderConnection.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardHolderConnection.kt
index f6b242c98..67598f91c 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardHolderConnection.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardHolderConnection.kt
@@ -1,4 +1,4 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardNumberConnection.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardNumberConnection.kt
similarity index 66%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardNumberConnection.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardNumberConnection.kt
index f56872f62..0b5e26d61 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputCardNumberConnection.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputCardNumberConnection.kt
@@ -1,8 +1,9 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
+import com.verygoodsecurity.vgscollect.view.card.ChecksumAlgorithm
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandPreview
import com.verygoodsecurity.vgscollect.view.card.filter.VGSCardFilter
import com.verygoodsecurity.vgscollect.view.card.validation.MuttableValidator
@@ -17,23 +18,6 @@ internal class InputCardNumberConnection(
private val divider:String? = null
): BaseInputConnection() {
private val cardFilters = mutableListOf()
- private val brandLuhnValidations by lazy {
- val set = HashMap()
- set[CardType.ELO] = EloDelegate()
- set[CardType.DANKORT] = DankortDelegate()
- set[CardType.FORBRUGSFORENINGEN] = ForbrugsforeningenDelegate()
- set[CardType.HIPERCARD] = HipercardDelegate()
- set[CardType.MAESTRO] = MaestroDelegate()
- set[CardType.VISA] = VisaDelegate()
- set[CardType.VISA_ELECTRON] = VisaElectronDelegate()
- set[CardType.MASTERCARD] = MastercardDelegate()
- set[CardType.AMERICAN_EXPRESS] = AmexDelegate()
- set[CardType.DINCLUB] = DinersClubDelegate()
- set[CardType.DISCOVER] = DiscoverDelegate()
- set[CardType.JCB] = JcbDelegate()
-
- set
- }
private var output = VGSFieldState()
@@ -61,18 +45,23 @@ internal class InputCardNumberConnection(
}
override fun run() {
- val card = runFilters()
- mapValue(card)
-
- IcardBrand?.onCardBrandPreview(card)
+ val brand = detectBrand()
+ mapValue(brand)
- applyNewRule(card.regex)
+ IcardBrand?.onCardBrandPreview(brand)
- output.isValid = isRequiredValid() && isContentValid(card)
+ validate(brand)
notifyAllListeners(id, output)
}
+ private fun validate(brand: CardBrandPreview) {
+ val isRequiredRuleValid = isRequiredValid()
+ val isContentRuleValid = isContentValid(brand)
+
+ output.isValid = isRequiredRuleValid && isContentRuleValid
+ }
+
private fun isRequiredValid():Boolean {
return output.isRequired && !output.content?.data.isNullOrEmpty() || !output.isRequired
}
@@ -91,17 +80,34 @@ internal class InputCardNumberConnection(
): Boolean {
val rawStr = output.content?.data?.replace(divider ?: " ", "") ?: ""
val isStrValid = validator?.isValid(rawStr) ?: false
- val isLuhnValid: Boolean = brandLuhnValidations[card.cardType]?.isValid(rawStr) ?: true
+ val isLuhnValid: Boolean = validateCheckSum(card.algorithm, rawStr)
- val isLengthAppropriate = checkLength(card.cardType, rawStr.length)
+ val isLengthAppropriate = checkLength(card.numberLength, rawStr.length)
return isLuhnValid && isStrValid && isLengthAppropriate
}
+ private fun validateCheckSum(
+ algorithm: ChecksumAlgorithm,
+ cardNumber: String
+ ):Boolean {
+ return if(algorithm == ChecksumAlgorithm.LUHN) {
+ CardBrandDelegate().isValid(cardNumber)
+ } else {
+ false // in the future will depends on RULE params
+ }
+// val isLuhnValid: Boolean = brandLuhnValidations[card.cardType]?.isValid(rawStr) ?: true
+ }
+
private fun mapValue(item: CardBrandPreview) {
- val card = (output.content as? FieldContent.CardNumberContent)
- card?.cardtype = item.cardType
- card?.cardBrandName = item.name
- card?.iconResId = item.resId
+ applyNewRule(item.regex)
+
+ with(output.content as? FieldContent.CardNumberContent) {
+ this?.cardtype = item.cardType
+ this?.cardBrandName = item.name
+ this?.iconResId = item.resId
+ this?.numberRange = item.numberLength
+ this?.rangeCVV = item.cvcLength
+ }
}
private fun applyNewRule(regex: String?) {
@@ -112,7 +118,7 @@ internal class InputCardNumberConnection(
}
}
- private fun runFilters(): CardBrandPreview {
+ private fun detectBrand(): CardBrandPreview {
for(i in cardFilters.indices) {
val filter = cardFilters[i]
val brand = filter.detect(output.content?.data)
@@ -124,10 +130,10 @@ internal class InputCardNumberConnection(
}
private fun checkLength(
- cardtype: CardType,
+ rangeNumber: Array,
length: Int?
): Boolean {
- return cardtype.rangeNumber.contains(length)
+ return rangeNumber.contains(length)
}
internal interface IDrawCardBrand {
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputInfoConnection.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputInfoConnection.kt
similarity index 96%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputInfoConnection.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputInfoConnection.kt
index f33fb208a..44a155178 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputInfoConnection.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputInfoConnection.kt
@@ -1,4 +1,4 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputRunnable.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputRunnable.kt
similarity index 87%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputRunnable.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputRunnable.kt
index 7939c9d86..a6f56d65d 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/InputRunnable.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/conection/InputRunnable.kt
@@ -1,4 +1,4 @@
-package com.verygoodsecurity.vgscollect.view.card
+package com.verygoodsecurity.vgscollect.view.card.conection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandFilter.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandFilter.kt
index 6d1e1fe16..a77a0029a 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandFilter.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandFilter.kt
@@ -28,10 +28,14 @@ class CardBrandFilter(
val value = userCustomCardBrands[i]
val m = Pattern.compile(value.regex).matcher(preparedStr)
while (m.find()) {
- return CardBrandPreview(regex = value.regex,
+ return CardBrandPreview(
+ regex = value.regex,
name = value.cardBrandName,
resId = value.drawableResId,
- currentMask = value.mask)
+ currentMask = value.params.mask,
+ algorithm = value.params.algorithm,
+ numberLength = value.params.rangeNumber,
+ cvcLength = value.params.rangeCVV)
}
}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandPreview.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandPreview.kt
index 69d7542ac..c0af1dba1 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandPreview.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/CardBrandPreview.kt
@@ -1,6 +1,7 @@
package com.verygoodsecurity.vgscollect.view.card.filter
import com.verygoodsecurity.vgscollect.view.card.CardType
+import com.verygoodsecurity.vgscollect.view.card.ChecksumAlgorithm
/** @suppress */
data class CardBrandPreview(
@@ -9,5 +10,38 @@ data class CardBrandPreview(
val name:String? = CardType.NONE.name,
val resId:Int = CardType.NONE.resId,
var currentMask:String = CardType.NONE.mask,
- var hasLuhn:Boolean = false
-)
\ No newline at end of file
+ var algorithm: ChecksumAlgorithm = ChecksumAlgorithm.NONE,
+ var numberLength: Array = CardType.NONE.rangeNumber,
+ var cvcLength: Array = CardType.NONE.rangeCVV
+) {
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as CardBrandPreview
+
+ if (cardType != other.cardType) return false
+ if (regex != other.regex) return false
+ if (name != other.name) return false
+ if (resId != other.resId) return false
+ if (currentMask != other.currentMask) return false
+ if (algorithm != other.algorithm) return false
+ if (!numberLength.contentEquals(other.numberLength)) return false
+ if (!cvcLength.contentEquals(other.cvcLength)) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = cardType.hashCode()
+ result = 31 * result + regex.hashCode()
+ result = 31 * result + (name?.hashCode() ?: 0)
+ result = 31 * result + resId
+ result = 31 * result + currentMask.hashCode()
+ result = 31 * result + algorithm.hashCode()
+ result = 31 * result + numberLength.contentHashCode()
+ result = 31 * result + cvcLength.contentHashCode()
+ return result
+ }
+
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/DefaultCardBrandFilter.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/DefaultCardBrandFilter.kt
index f90a53ef5..8b7a07c4e 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/DefaultCardBrandFilter.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/filter/DefaultCardBrandFilter.kt
@@ -21,10 +21,13 @@ class DefaultCardBrandFilter(
val m = Pattern.compile(value.regex).matcher(preparedStr)
while (m.find()) {
return CardBrandPreview(value,
- value.regex,
- value.name,
- value.resId,
- value.mask)
+ value.regex,
+ value.name,
+ value.resId,
+ value.mask,
+ value.algorithm,
+ value.rangeNumber,
+ value.rangeCVV)
}
}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/CardNumberFormatter.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/CardNumberFormatter.kt
index 51fed86af..4124bdd76 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/CardNumberFormatter.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/CardNumberFormatter.kt
@@ -70,8 +70,7 @@ class CardNumberFormatter: TextWatcher, Formatter {
runtimeData = builder.toString()
}
- @VisibleForTesting
- fun getMask():String = mask
+ override fun getMask():String = mask
@VisibleForTesting
fun getMaskLength():Int = maxLength
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/Formatter.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/Formatter.kt
index 34ef3c456..345b738c7 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/Formatter.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/formatter/Formatter.kt
@@ -2,4 +2,5 @@ package com.verygoodsecurity.vgscollect.view.card.formatter
interface Formatter {
fun setMask(mask:String)
+ fun getMask():String
}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardCVCCodeValidator.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardCVCCodeValidator.kt
index e8dc6be31..2614cb6a2 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardCVCCodeValidator.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardCVCCodeValidator.kt
@@ -2,10 +2,10 @@ package com.verygoodsecurity.vgscollect.view.card.validation
/** @suppress */
class CardCVCCodeValidator(
- private val length:Int = 3
+ private val cvcLength:Array = arrayOf(3,4)
):VGSValidator {
override fun isValid(content: String?): Boolean {
val data:Int? = content?.trim()?.toIntOrNull()
- return data != null && content.length >= length
+ return data != null && cvcLength.contains(content.length)
}
}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardHolderValidator.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardHolderValidator.kt
deleted file mode 100644
index 18fc37945..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CardHolderValidator.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation
-
-import java.util.regex.Pattern
-
-/** @suppress */
-class CardHolderValidator:VGSValidator {
- private val m = Pattern.compile("^[a-zA-Z0-9 ,'.-]+\$") //only symbols - "^[\\p{L}\\s'.-]+\$"
-
- override fun isValid(content: String?): Boolean {
- val str = content?.trim()
- return !str.isNullOrEmpty() &&
- m.matcher(str).matches()
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CompositeValidator.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CompositeValidator.kt
new file mode 100644
index 000000000..7e45b7004
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/CompositeValidator.kt
@@ -0,0 +1,25 @@
+package com.verygoodsecurity.vgscollect.view.card.validation
+
+class CompositeValidator : MutableValidator {
+ private val validators = mutableListOf()
+
+ override fun clearRules() {
+ validators.clear()
+ }
+
+ override fun addRule(validator: VGSValidator) {
+ validators.add(validator)
+ }
+
+ override fun isValid(content: String?): Boolean {
+ return if(validators.isEmpty()) {
+ false
+ } else {
+ var isValid = true
+ for (validator in validators) {
+ isValid = isValid && validator.isValid(content)
+ }
+ isValid
+ }
+ }
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/MutableValidator.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/MutableValidator.kt
new file mode 100644
index 000000000..397178b9d
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/MutableValidator.kt
@@ -0,0 +1,7 @@
+package com.verygoodsecurity.vgscollect.view.card.validation
+
+/** @suppress */
+interface MutableValidator:VGSValidator {
+ fun clearRules()
+ fun addRule(validator: VGSValidator)
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/RegexValidator.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/RegexValidator.kt
new file mode 100644
index 000000000..5309d1ce5
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/RegexValidator.kt
@@ -0,0 +1,29 @@
+package com.verygoodsecurity.vgscollect.view.card.validation
+
+import java.util.regex.Pattern
+
+/** @suppress */
+class RegexValidator(
+ regex:String? = null
+):VGSValidator {
+ private var m:Pattern? = null
+
+ init {
+ if(!regex.isNullOrEmpty()) {
+ m = Pattern.compile(regex)
+ }
+ }
+
+ override fun isValid(content: String?): Boolean {
+ return m?.run {
+ val str = content?.trim()
+ val s = !str.isNullOrEmpty() &&
+ m!!.matcher(str).matches()
+ s
+ }?:true
+ }
+
+ internal fun setRegex(regex:String) {
+ m = Pattern.compile(regex)
+ }
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/AmexDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/CardBrandDelegate.kt
similarity index 78%
rename from vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/AmexDelegate.kt
rename to vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/CardBrandDelegate.kt
index 4b8506c50..5116e15f7 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/AmexDelegate.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/CardBrandDelegate.kt
@@ -3,8 +3,8 @@ package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
/** @suppress */
-class AmexDelegate : VGSValidator by DefaultCardValidator("^3[47][0-9]{13}\$") {
+class CardBrandDelegate : VGSValidator by DefaultCardValidator() {
override fun isValid(content: String?): Boolean {
return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
}
-}
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DankortDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DankortDelegate.kt
deleted file mode 100644
index 7c342ed31..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DankortDelegate.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.CardType
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class DankortDelegate : VGSValidator by DefaultCardValidator(CardType.DANKORT.regex) {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DinersClubDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DinersClubDelegate.kt
deleted file mode 100644
index da29cb571..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DinersClubDelegate.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.CardType
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class DinersClubDelegate : VGSValidator by DefaultCardValidator(CardType.DINCLUB.regex) {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DiscoverDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DiscoverDelegate.kt
deleted file mode 100644
index 90d10007b..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/DiscoverDelegate.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class DiscoverDelegate : VGSValidator by DefaultCardValidator("^6(?:011|5[0-9]{2})[0-9]{12}\$") {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/EloDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/EloDelegate.kt
deleted file mode 100644
index c260c8e03..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/EloDelegate.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.CardType
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class EloDelegate : VGSValidator by DefaultCardValidator(CardType.ELO.regex) {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/ForbrugsforeningenDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/ForbrugsforeningenDelegate.kt
deleted file mode 100644
index 92076a850..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/ForbrugsforeningenDelegate.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.CardType
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class ForbrugsforeningenDelegate : VGSValidator by DefaultCardValidator(CardType.FORBRUGSFORENINGEN.regex) {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/HipercardDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/HipercardDelegate.kt
deleted file mode 100644
index edccd290c..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/HipercardDelegate.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.CardType
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class HipercardDelegate : VGSValidator by DefaultCardValidator(CardType.HIPERCARD.regex) {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/JcbDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/JcbDelegate.kt
deleted file mode 100644
index 724c8309c..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/JcbDelegate.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class JcbDelegate : VGSValidator by DefaultCardValidator("^(?:2131|1800|35\\d{3})\\d{11,14}\$") {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/MaestroDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/MaestroDelegate.kt
deleted file mode 100644
index df8a4f189..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/MaestroDelegate.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.CardType
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class MaestroDelegate : VGSValidator by DefaultCardValidator(CardType.MAESTRO.regex) {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/MastercardDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/MastercardDelegate.kt
deleted file mode 100644
index 5f8f3f91c..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/MastercardDelegate.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class MastercardDelegate : VGSValidator by DefaultCardValidator("^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}\$") {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/VisaDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/VisaDelegate.kt
deleted file mode 100644
index c87beb4f5..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/VisaDelegate.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class VisaDelegate : VGSValidator by DefaultCardValidator("^4[0-9]{12}((?:[0-9]{3})?|(?:[0-9]{6})?)\$") {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/VisaElectronDelegate.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/VisaElectronDelegate.kt
deleted file mode 100644
index 2294f42c5..000000000
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/card/brand/VisaElectronDelegate.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.verygoodsecurity.vgscollect.view.card.validation.card.brand
-
-import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
-
-/** @suppress */
-class VisaElectronDelegate : VGSValidator by DefaultCardValidator("^4(026|17500|405|508|844|91[37])") {
- override fun isValid(content: String?): Boolean {
- return !content.isNullOrEmpty() && isLuhnCheckSumValid(content)
- }
-}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/payment/LengthValidator.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/payment/LengthValidator.kt
new file mode 100644
index 000000000..ccb21becb
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/payment/LengthValidator.kt
@@ -0,0 +1,12 @@
+package com.verygoodsecurity.vgscollect.view.card.validation.payment
+
+import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
+
+/** @suppress */
+class LengthValidator(
+ private val length: Array
+) : VGSValidator {
+ override fun isValid(content: String?): Boolean {
+ return !content.isNullOrEmpty() && length.contains(content.length)
+ }
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/payment/PersonNameRule.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/payment/PersonNameRule.kt
new file mode 100644
index 000000000..7b7da4209
--- /dev/null
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/card/validation/payment/PersonNameRule.kt
@@ -0,0 +1,91 @@
+package com.verygoodsecurity.vgscollect.view.card.validation.payment
+
+/**
+ * This rule provides a simplified mechanism to improve default behavior of field which include person name.
+ */
+data class PersonNameRule(
+ internal val regex: String?,
+ internal val length:Array?
+) {
+
+ /**
+ * This class provides an API for set up rules for validation person name.
+ */
+ class ValidationBuilder {
+
+ /** The Regex for validation input. */
+ private var regex: String? = null
+
+ /** The minimum length of the person name which will support. */
+ private var minLength = -1
+
+ /** The maximum length of the person name which will support. */
+ private var maxLength = -1
+
+ /** Configure Regex for validation input. */
+ fun setRegex(regex: String): ValidationBuilder {
+ this.regex = regex
+ return this
+ }
+
+ /** Configure minimum length of the name which will support. */
+ fun setAllowableMinLength(length:Int): ValidationBuilder {
+ if(maxLength == -1) {
+ maxLength = 256
+ }
+ minLength = if(length > maxLength) {
+ maxLength
+ } else {
+ length
+ }
+ return this
+ }
+
+ /** Configure maximum length of the name which will support. */
+ fun setAllowableMaxLength(length:Int): ValidationBuilder {
+ if(minLength == -1) {
+ minLength = 1
+ }
+ if(length < minLength) {
+ minLength = length
+ }
+ maxLength = length
+ return this
+ }
+
+ /** Creates a rule. */
+ fun build(): PersonNameRule {
+ val range = if(minLength != -1 && maxLength != -1) {
+ (minLength..maxLength).toList().toTypedArray()
+ } else {
+ null
+ }
+
+ return PersonNameRule(
+ regex,
+ range
+ )
+ }
+ }
+
+ override fun equals(other: Any?): Boolean {
+ if (this === other) return true
+ if (javaClass != other?.javaClass) return false
+
+ other as PersonNameRule
+
+ if (regex != other.regex) return false
+ if (length != null) {
+ if (other.length == null) return false
+ if (!length.contentEquals(other.length)) return false
+ } else if (other.length != null) return false
+
+ return true
+ }
+
+ override fun hashCode(): Int {
+ var result = regex?.hashCode() ?: 0
+ result = 31 * result + (length?.contentHashCode() ?: 0)
+ return result
+ }
+}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/BaseInputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/BaseInputField.kt
index 2bfe30def..fc703481c 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/BaseInputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/BaseInputField.kt
@@ -22,7 +22,7 @@ import com.verygoodsecurity.vgscollect.core.storage.DependencyType
import com.verygoodsecurity.vgscollect.core.storage.OnFieldStateChangeListener
import com.verygoodsecurity.vgscollect.view.InputFieldView
import com.verygoodsecurity.vgscollect.view.card.FieldType
-import com.verygoodsecurity.vgscollect.view.card.InputRunnable
+import com.verygoodsecurity.vgscollect.view.card.conection.InputRunnable
/** @suppress */
internal abstract class BaseInputField(context: Context) : TextInputEditText(context),
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CVCInputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CVCInputField.kt
index cef55bdf9..16e16b2b5 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CVCInputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CVCInputField.kt
@@ -10,7 +10,7 @@ import com.verygoodsecurity.vgscollect.core.model.state.Dependency
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.storage.DependencyType
import com.verygoodsecurity.vgscollect.view.card.FieldType
-import com.verygoodsecurity.vgscollect.view.card.InputCardCVCConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardCVCConnection
import com.verygoodsecurity.vgscollect.view.card.text.CVCValidateFilter
import com.verygoodsecurity.vgscollect.view.card.validation.CardCVCCodeValidator
@@ -18,10 +18,15 @@ import com.verygoodsecurity.vgscollect.view.card.validation.CardCVCCodeValidator
internal class CVCInputField(context: Context): BaseInputField(context) {
override var fieldType: FieldType = FieldType.CVC
+ private var cvcLength:Array = arrayOf(3,4)
override fun applyFieldType() {
- val validator = CardCVCCodeValidator(minCodeLimit)
- inputConnection = InputCardCVCConnection(id, validator)
+ val validator = CardCVCCodeValidator(cvcLength)
+ inputConnection =
+ InputCardCVCConnection(
+ id,
+ validator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
@@ -67,20 +72,16 @@ internal class CVCInputField(context: Context): BaseInputField(context) {
}
}
- private var maxCodeLimit:Int = 4
- private var minCodeLimit:Int = 3
override fun dispatchDependencySetting(dependency: Dependency) {
if(dependency.dependencyType == DependencyType.RANGE) {
- val range = dependency.value as Pair
-
- if(maxCodeLimit != range.second || minCodeLimit != range.first) {
- minCodeLimit = range.first
- maxCodeLimit = range.second
- val filterLength = InputFilter.LengthFilter(maxCodeLimit)
+ val cvcLength = dependency.value as Array
+ if(!this.cvcLength.contentEquals(cvcLength)) {
+ this.cvcLength = cvcLength
+ val filterLength = InputFilter.LengthFilter(cvcLength.last())
filters = arrayOf(CVCValidateFilter(), filterLength)
(inputConnection as? InputCardCVCConnection)?.runtimeValidator =
- CardCVCCodeValidator(minCodeLimit)
+ CardCVCCodeValidator(this.cvcLength)
text = text
}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CardInputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CardInputField.kt
index 84de5936c..cbc67bc61 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CardInputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/CardInputField.kt
@@ -14,6 +14,7 @@ import com.verygoodsecurity.vgscollect.util.Logger
import com.verygoodsecurity.vgscollect.util.isNumeric
import com.verygoodsecurity.vgscollect.view.InputFieldView
import com.verygoodsecurity.vgscollect.view.card.*
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardNumberConnection
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandFilter
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandPreview
import com.verygoodsecurity.vgscollect.view.card.filter.DefaultCardBrandFilter
@@ -53,7 +54,13 @@ internal class CardInputField(context: Context): BaseInputField(context), InputC
override fun applyFieldType() {
val validator = CardNumberValidator(divider)
- inputConnection = InputCardNumberConnection(id, validator, this, divider)
+ inputConnection =
+ InputCardNumberConnection(
+ id,
+ validator,
+ this,
+ divider
+ )
val defFilter = DefaultCardBrandFilter(CardType.values(), divider)
inputConnection!!.addFilter(defFilter)
@@ -242,7 +249,7 @@ internal class CardInputField(context: Context): BaseInputField(context), InputC
cardNumberMask = with(cardNumberMask) {
this.replace(Regex(MASK_REGEX), divider)
}
- if(!text.isNullOrEmpty() && !cardNumberMask.contains(divider)) {
+ if(!text.isNullOrEmpty() && cardNumberFormatter?.getMask() != cardNumberMask) {
cardNumberFormatter?.setMask(cardNumberMask)
refreshInput()
}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/DateInputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/DateInputField.kt
index c763dc28a..03f577d6c 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/DateInputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/DateInputField.kt
@@ -13,7 +13,7 @@ import android.widget.DatePicker
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.model.state.handleOutputFormat
import com.verygoodsecurity.vgscollect.view.card.FieldType
-import com.verygoodsecurity.vgscollect.view.card.InputCardExpDateConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardExpDateConnection
import com.verygoodsecurity.vgscollect.view.card.text.ExpirationDateTextWatcher
import com.verygoodsecurity.vgscollect.view.date.DatePickerBuilder
import com.verygoodsecurity.vgscollect.view.date.DatePickerMode
@@ -68,7 +68,11 @@ internal class DateInputField(context: Context): BaseInputField(context), View.O
override fun applyFieldType() {
val timeGapsValidator = TimeGapsValidator(datePattern, minDate, maxDate)
- inputConnection = InputCardExpDateConnection(id, timeGapsValidator)
+ inputConnection =
+ InputCardExpDateConnection(
+ id,
+ timeGapsValidator
+ )
val stateContent = FieldContent.CreditCardExpDateContent().apply {
if(!text.isNullOrEmpty() && handleInputMode(text.toString())) {
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InfoInputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InfoInputField.kt
index 3ff1c4876..08979973e 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InfoInputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InfoInputField.kt
@@ -4,7 +4,7 @@ import android.content.Context
import android.text.InputType
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.view.card.FieldType
-import com.verygoodsecurity.vgscollect.view.card.InputInfoConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputInfoConnection
import com.verygoodsecurity.vgscollect.view.card.validation.InfoValidator
/** @suppress */
@@ -14,7 +14,11 @@ internal class InfoInputField(context: Context): BaseInputField(context) {
override fun applyFieldType() {
val validator = InfoValidator()
- inputConnection = InputInfoConnection(id, validator)
+ inputConnection =
+ InputInfoConnection(
+ id,
+ validator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InputField.kt
index dac126632..671adbc77 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/InputField.kt
@@ -13,6 +13,11 @@ import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.storage.DependencyType
import com.verygoodsecurity.vgscollect.view.InputFieldView
import com.verygoodsecurity.vgscollect.view.card.*
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardCVCConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardExpDateConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardHolderConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardNumberConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputInfoConnection
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandFilter
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandPreview
import com.verygoodsecurity.vgscollect.view.card.filter.DefaultCardBrandFilter
@@ -104,7 +109,11 @@ internal class InputField(context: Context): BaseInputField(context),
private fun applyInfoFieldType() {
validator = InfoValidator()
- inputConnection = InputInfoConnection(id, validator)
+ inputConnection =
+ InputInfoConnection(
+ id,
+ validator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
@@ -122,7 +131,11 @@ internal class InputField(context: Context): BaseInputField(context),
private fun applyCardExpDateFieldType() {
validator = CardExpDateValidator()
- inputConnection = InputCardExpDateConnection(id, validator as CardExpDateValidator)
+ inputConnection =
+ InputCardExpDateConnection(
+ id,
+ validator as CardExpDateValidator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
@@ -140,8 +153,12 @@ internal class InputField(context: Context): BaseInputField(context),
}
private fun applyCardHolderFieldType() {
- validator = CardHolderValidator()
- inputConnection = InputCardHolderConnection(id, validator)
+ validator = RegexValidator("^[a-zA-Z0-9 ,'.-]+\$")
+ inputConnection =
+ InputCardHolderConnection(
+ id,
+ validator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
@@ -160,7 +177,11 @@ internal class InputField(context: Context): BaseInputField(context),
private fun applyCardCVCFieldType() {
validator = CardCVCCodeValidator()
- inputConnection = InputCardCVCConnection(id, validator)
+ inputConnection =
+ InputCardCVCConnection(
+ id,
+ validator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
@@ -183,7 +204,13 @@ internal class InputField(context: Context): BaseInputField(context),
validator = CardNumberValidator(divider)
- inputConnection = InputCardNumberConnection(id, validator, this, divider)
+ inputConnection =
+ InputCardNumberConnection(
+ id,
+ validator,
+ this,
+ divider
+ )
val defFilter = DefaultCardBrandFilter(CardType.values(), divider)
inputConnection!!.addFilter(defFilter)
@@ -217,10 +244,10 @@ internal class InputField(context: Context): BaseInputField(context),
}
private fun manageLengthDependency(dependency: Dependency) {
- val value = dependency.value as Pair
- val filterLength = InputFilter.LengthFilter(value.second)
+ val cvcLength = dependency.value as Array
+ val filterLength = InputFilter.LengthFilter(cvcLength.last())
filters = arrayOf(CVCValidateFilter(), filterLength)
- (inputConnection as? InputCardCVCConnection)?.runtimeValidator = CardCVCCodeValidator(value.first)
+ (inputConnection as? InputCardCVCConnection)?.runtimeValidator = CardCVCCodeValidator(cvcLength)
text = text
}
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/PersonNameInputField.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/PersonNameInputField.kt
index d0941385c..0394e2ebc 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/PersonNameInputField.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/view/internal/PersonNameInputField.kt
@@ -5,19 +5,33 @@ import android.os.Build
import android.text.InputFilter
import android.text.InputType
import android.view.View
+import com.verygoodsecurity.vgscollect.R
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.view.card.FieldType
-import com.verygoodsecurity.vgscollect.view.card.InputCardHolderConnection
-import com.verygoodsecurity.vgscollect.view.card.validation.CardHolderValidator
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardHolderConnection
+import com.verygoodsecurity.vgscollect.view.card.validation.RegexValidator
+import com.verygoodsecurity.vgscollect.view.card.validation.CompositeValidator
+import com.verygoodsecurity.vgscollect.view.card.validation.MutableValidator
+import com.verygoodsecurity.vgscollect.view.card.validation.payment.LengthValidator
+import com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
/** @suppress */
internal class PersonNameInputField(context: Context): BaseInputField(context) {
+ private val validator : MutableValidator by lazy {
+ val v = CompositeValidator()
+ v.addRule(RegexValidator(context.getString(R.string.validation_regex_person)))
+ v
+ }
+
override var fieldType: FieldType = FieldType.CARD_HOLDER_NAME
override fun applyFieldType() {
- val validator = CardHolderValidator()
- inputConnection = InputCardHolderConnection(id, validator)
+ inputConnection =
+ InputCardHolderConnection(
+ id,
+ validator
+ )
val str = text.toString()
val stateContent = FieldContent.InfoContent().apply {
@@ -50,4 +64,15 @@ internal class PersonNameInputField(context: Context): BaseInputField(context) {
}
}
+ internal fun applyValidationRule(rule: PersonNameRule) {
+ validator.clearRules()
+ rule.length?.let {
+ validator.addRule(LengthValidator(it))
+ }
+
+ rule.regex?.let {
+ validator.addRule(RegexValidator(it))
+ }
+ }
+
}
\ No newline at end of file
diff --git a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.kt b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.kt
index 5e655ec5f..f298fa4e6 100644
--- a/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.kt
+++ b/vgscollect/src/main/java/com/verygoodsecurity/vgscollect/widget/PersonNameEditText.kt
@@ -9,6 +9,7 @@ import com.verygoodsecurity.vgscollect.core.model.state.FieldState
import com.verygoodsecurity.vgscollect.R
import com.verygoodsecurity.vgscollect.view.InputFieldView
import com.verygoodsecurity.vgscollect.view.card.FieldType
+import com.verygoodsecurity.vgscollect.view.card.validation.payment.PersonNameRule
class PersonNameEditText @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
@@ -76,4 +77,11 @@ class PersonNameEditText @JvmOverloads constructor(
fun getState(): FieldState.CardHolderNameState? {
return getCardHolderName()
}
+
+ /**
+ * Adds a behaviour rule for the field.
+ */
+ fun addRule(rule: PersonNameRule) {
+ applyValidationRule(rule)
+ }
}
\ No newline at end of file
diff --git a/vgscollect/src/main/res/values/strings.xml b/vgscollect/src/main/res/values/strings.xml
index 15a0f98f2..0981fc1b5 100644
--- a/vgscollect/src/main/res/values/strings.xml
+++ b/vgscollect/src/main/res/values/strings.xml
@@ -13,4 +13,5 @@
Divider for card number can\'t a digit. (%1$s)
0123456789
+ ^[a-zA-Z0-9 ,\'.-]+$
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/VGSFieldStateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/VGSFieldStateTest.kt
index 8633e3766..a8d6dbf91 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/VGSFieldStateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/VGSFieldStateTest.kt
@@ -128,7 +128,7 @@ class VGSFieldStateTest {
val c = (newState as FieldState.CardNumberState)
- assertTrue(c.last == "5")
+ assertTrue(c.last == "2345")
}
@Test
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/CustomBrandTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/CustomBrandTest.kt
index c6ceadf8a..848ce2bd4 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/CustomBrandTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/CustomBrandTest.kt
@@ -1,25 +1,52 @@
package com.verygoodsecurity.vgscollect.card
import com.verygoodsecurity.vgscollect.R
+import com.verygoodsecurity.vgscollect.view.card.BrandParams
+import com.verygoodsecurity.vgscollect.view.card.ChecksumAlgorithm
import com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
-import org.junit.Assert
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
import org.junit.Test
class CustomBrandTest {
+ @Test
+ fun test_custom_brand_params_full() {
+ val mask = "### ### ### #####"
+ val alg = ChecksumAlgorithm.LUHN
+ val rangeNumber = arrayOf(14,16,19)
+ val rangeCVC = arrayOf(3,5)
+
+ val params = BrandParams(mask, alg, rangeNumber, rangeCVC)
+
+ assertEquals(alg, params.algorithm)
+ assertEquals(mask, params.mask)
+ assertArrayEquals(rangeNumber, params.rangeNumber)
+ assertArrayEquals(rangeCVC, params.rangeCVV)
+ }
+
@Test
fun test_custom_brand_full() {
+ val mask = "### ### ### #####"
+ val alg = ChecksumAlgorithm.LUHN
+ val rangeNumber = arrayOf(14,16,19)
+ val rangeCVC = arrayOf(3,5)
+ val params = BrandParams(mask, alg, rangeNumber, rangeCVC)
+
val regex = "^12333"
val name = "VG_Search"
val resId = R.drawable.ic_card_front_preview_dark
- val mask = "### ### ### #####"
- val brand = CustomCardBrand(regex, name, resId, mask)
+ val brand = CustomCardBrand(regex, name, resId, params)
- Assert.assertEquals(regex, brand.regex)
- Assert.assertEquals(name, brand.cardBrandName)
- Assert.assertEquals(mask, brand.mask)
- Assert.assertEquals(resId, brand.drawableResId)
+ assertEquals(regex, brand.regex)
+ assertEquals(name, brand.cardBrandName)
+ assertEquals(resId, brand.drawableResId)
+
+ assertEquals(alg, brand.params.algorithm)
+ assertEquals(mask, brand.params.mask)
+ assertArrayEquals(rangeNumber, brand.params.rangeNumber)
+ assertArrayEquals(rangeCVC, brand.params.rangeCVV)
}
@Test
@@ -29,10 +56,10 @@ class CustomBrandTest {
val brand = CustomCardBrand(regex, name)
- Assert.assertEquals(regex, brand.regex)
- Assert.assertEquals(name, brand.cardBrandName)
- Assert.assertEquals("#### #### #### #### ###", brand.mask)
- Assert.assertEquals(0, brand.drawableResId)
+ assertEquals(regex, brand.regex)
+ assertEquals(name, brand.cardBrandName)
+ assertEquals("#### #### #### #### ###", brand.params.mask)
+ assertEquals(0, brand.drawableResId)
}
@Test
@@ -41,12 +68,11 @@ class CustomBrandTest {
val name = "VG_Search"
val mask = "### ### ### #####"
- val brand = CustomCardBrand(regex, name, mask = mask)
+ val brand = CustomCardBrand(regex, name)
- Assert.assertEquals(regex, brand.regex)
- Assert.assertEquals(name, brand.cardBrandName)
- Assert.assertEquals(mask, brand.mask)
- Assert.assertEquals(0, brand.drawableResId)
+ assertEquals(regex, brand.regex)
+ assertEquals(name, brand.cardBrandName)
+ assertEquals(0, brand.drawableResId)
}
@Test
@@ -57,9 +83,9 @@ class CustomBrandTest {
val brand = CustomCardBrand(regex, name, resId)
- Assert.assertEquals(regex, brand.regex)
- Assert.assertEquals(name, brand.cardBrandName)
- Assert.assertEquals("#### #### #### #### ###", brand.mask)
- Assert.assertEquals(resId, brand.drawableResId)
+ assertEquals(regex, brand.regex)
+ assertEquals(name, brand.cardBrandName)
+ assertEquals("#### #### #### #### ###", brand.params.mask)
+ assertEquals(resId, brand.drawableResId)
}
}
\ No newline at end of file
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardCVCConnectionTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardCVCConnectionTest.kt
index ca450b4ec..c7c8407d7 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardCVCConnectionTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardCVCConnectionTest.kt
@@ -3,8 +3,8 @@ package com.verygoodsecurity.vgscollect.card.connection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
-import com.verygoodsecurity.vgscollect.view.card.InputCardCVCConnection
-import com.verygoodsecurity.vgscollect.view.card.InputRunnable
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardCVCConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputRunnable
import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
import org.junit.Test
import org.mockito.Mockito
@@ -14,7 +14,10 @@ class InputCardCVCConnectionTest {
val connection: InputRunnable by lazy {
val client = mock(VGSValidator::class.java)
doReturn(true).`when`(client).isValid(anyString())
- InputCardCVCConnection(0, client)
+ InputCardCVCConnection(
+ 0,
+ client
+ )
}
@Test
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardExpDateConnectionTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardExpDateConnectionTest.kt
index 558845f44..f9a9a4090 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardExpDateConnectionTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardExpDateConnectionTest.kt
@@ -3,8 +3,8 @@ package com.verygoodsecurity.vgscollect.card.connection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
-import com.verygoodsecurity.vgscollect.view.card.InputCardExpDateConnection
-import com.verygoodsecurity.vgscollect.view.card.InputRunnable
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardExpDateConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputRunnable
import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -15,7 +15,10 @@ class InputCardExpDateConnectionTest {
val connection: InputRunnable by lazy {
val client = Mockito.mock(VGSValidator::class.java)
Mockito.doReturn(true).`when`(client).isValid(Mockito.anyString())
- InputCardExpDateConnection(0, client)
+ InputCardExpDateConnection(
+ 0,
+ client
+ )
}
@Test
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardHolderConnectionTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardHolderConnectionTest.kt
index 2d7be4e77..343c62b9d 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardHolderConnectionTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardHolderConnectionTest.kt
@@ -3,8 +3,8 @@ package com.verygoodsecurity.vgscollect.card.connection
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
-import com.verygoodsecurity.vgscollect.view.card.InputCardHolderConnection
-import com.verygoodsecurity.vgscollect.view.card.InputRunnable
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardHolderConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputRunnable
import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
import org.junit.Test
import org.mockito.ArgumentMatchers.anyInt
@@ -14,7 +14,10 @@ class InputCardHolderConnectionTest {
val connection: InputRunnable by lazy {
val client = Mockito.mock(VGSValidator::class.java)
Mockito.doReturn(true).`when`(client).isValid(Mockito.anyString())
- InputCardHolderConnection(0, client)
+ InputCardHolderConnection(
+ 0,
+ client
+ )
}
@Test
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardNumberConnectionTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardNumberConnectionTest.kt
index ac25ae717..40db1b75d 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardNumberConnectionTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/connection/InputCardNumberConnectionTest.kt
@@ -4,8 +4,8 @@ import com.verygoodsecurity.vgscollect.R
import com.verygoodsecurity.vgscollect.core.OnVgsViewStateChangeListener
import com.verygoodsecurity.vgscollect.core.model.state.FieldContent
import com.verygoodsecurity.vgscollect.core.model.state.VGSFieldState
-import com.verygoodsecurity.vgscollect.view.card.InputCardNumberConnection
-import com.verygoodsecurity.vgscollect.view.card.InputRunnable
+import com.verygoodsecurity.vgscollect.view.card.conection.InputCardNumberConnection
+import com.verygoodsecurity.vgscollect.view.card.conection.InputRunnable
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandPreview
import com.verygoodsecurity.vgscollect.view.card.validation.VGSValidator
import com.verygoodsecurity.vgscollect.view.card.CardType
@@ -30,7 +30,13 @@ class InputCardNumberConnectionTest {
val client = getValidator()
iCardBrand = getCardBrandPreviewListener()
- connection = InputCardNumberConnection(0, client, iCardBrand, divider)
+ connection =
+ InputCardNumberConnection(
+ 0,
+ client,
+ iCardBrand,
+ divider
+ )
setupFilter(connection, divider)
setupListener(connection)
@@ -39,7 +45,11 @@ class InputCardNumberConnectionTest {
@Test
fun test_connection() {
val client = getValidator()
- val connection: InputRunnable = InputCardNumberConnection(0, client)
+ val connection: InputRunnable =
+ InputCardNumberConnection(
+ 0,
+ client
+ )
setupFilter(connection, null)
setupListener(connection)
@@ -59,7 +69,12 @@ class InputCardNumberConnectionTest {
val divider = "-"
val client = getValidator()
- val connection: InputRunnable = InputCardNumberConnection(0, client, divider = divider)
+ val connection: InputRunnable =
+ InputCardNumberConnection(
+ 0,
+ client,
+ divider = divider
+ )
setupFilter(connection, divider)
setupListener(connection)
@@ -85,7 +100,15 @@ class InputCardNumberConnectionTest {
connection.run()
- Mockito.verify(iCardBrand).onCardBrandPreview(CardBrandPreview(CardType.VISA, CardType.VISA.regex, CardType.VISA.name, CardType.VISA.resId))
+ val c = CardBrandPreview(CardType.VISA,
+ CardType.VISA.regex,
+ CardType.VISA.name,
+ CardType.VISA.resId,
+ CardType.VISA.mask,
+ CardType.VISA.algorithm,
+ CardType.VISA.rangeNumber,
+ CardType.VISA.rangeCVV)
+ Mockito.verify(iCardBrand).onCardBrandPreview(c)
}
@Test
@@ -113,12 +136,12 @@ class InputCardNumberConnectionTest {
@Test
fun test_custom_filter() {
- val customBrand = CustomCardBrand("^777", "VGS", drawableResId = R.drawable.ic_jcb_light)
+ val customBrand = CustomCardBrand("^777", "VGS", R.drawable.ic_jcb_light)
val preview = CardBrandPreview(CardType.NONE,
customBrand.regex,
customBrand.cardBrandName,
customBrand.drawableResId,
- customBrand.mask)
+ customBrand.params.mask)
val filter = mock(MutableCardFilter::class.java)
Mockito.doReturn(preview).`when`(filter).detect(any())
@@ -137,7 +160,7 @@ class InputCardNumberConnectionTest {
Mockito.verify(stateListener).emit(0, state)
}
- private fun getCardBrandPreviewListener():InputCardNumberConnection.IDrawCardBrand {
+ private fun getCardBrandPreviewListener(): InputCardNumberConnection.IDrawCardBrand {
return mock(InputCardNumberConnection.IDrawCardBrand::class.java)
}
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/filter/CardBrandFilterTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/filter/CardBrandFilterTest.kt
index d37d97c0b..a6e034b9a 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/filter/CardBrandFilterTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/filter/CardBrandFilterTest.kt
@@ -1,6 +1,7 @@
package com.verygoodsecurity.vgscollect.card.filter
import com.verygoodsecurity.vgscollect.R
+import com.verygoodsecurity.vgscollect.view.card.BrandParams
import com.verygoodsecurity.vgscollect.view.card.CardType
import com.verygoodsecurity.vgscollect.view.card.CustomCardBrand
import com.verygoodsecurity.vgscollect.view.card.filter.CardBrandFilter
@@ -48,9 +49,11 @@ class CardBrandFilterTest {
val regex = "^12333"
val name = "VG_Search"
val resId = R.drawable.ic_card_front_preview_dark
+
val mask = "### ### ### #####"
+ val params = BrandParams(mask)
- val c1 = CustomCardBrand(regex, name, resId, mask)
+ val c1 = CustomCardBrand(regex, name, resId, params)
filter.add(c1)
@@ -85,9 +88,11 @@ class CardBrandFilterTest {
val regex = "^12333"
val name = "VG_Search"
val resId = R.drawable.ic_card_front_preview_dark
+
val mask = "### ### ### #####"
+ val params = BrandParams(mask)
- val c1 = CustomCardBrand(regex, name, resId, mask)
+ val c1 = CustomCardBrand(regex, name, resId, params)
filter.add(c1)
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/CardHolderValidatorTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/CardHolderValidatorTest.kt
index 54986d255..ba3b1260d 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/CardHolderValidatorTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/CardHolderValidatorTest.kt
@@ -1,12 +1,18 @@
package com.verygoodsecurity.vgscollect.card.validator
-import com.verygoodsecurity.vgscollect.view.card.validation.CardHolderValidator
+import com.verygoodsecurity.vgscollect.view.card.validation.RegexValidator
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
+import org.junit.Before
import org.junit.Test
class CardHolderValidatorTest {
- private val validator = CardHolderValidator()
+ private lateinit var validator:RegexValidator
+
+ @Before
+ fun setupValidator() {
+ validator = RegexValidator("^[a-zA-Z0-9 ,'.-]+\$")
+ }
@Test
fun name_with_special_symbols() {
@@ -21,6 +27,30 @@ class CardHolderValidatorTest {
@Test
fun name_dafault() {
assertTrue(validator.isValid("abra cadabra"))
+ assertTrue(validator.isValid("abra cadab ra"))
+ }
+
+ @Test
+ fun test_custom_regex() {
+ validator.setRegex("^([a-zA-Z]{2,}\\s[a-zA-z]{1,})\$")
+
+ assertFalse(validator.isValid("abra"))
+ assertTrue(validator.isValid("abra cadabra"))
+ assertFalse(validator.isValid("abra cadab ra"))
+ assertFalse(validator.isValid("qq aa$"))
+ }
+
+ @Test
+ fun testEmptyValidator() {
+ val validator = RegexValidator()
+
+ assertTrue(validator.isValid(""))
+ assertTrue(validator.isValid(null))
+ assertTrue(validator.isValid("abra"))
+ assertTrue(validator.isValid("abra cadabra"))
+ assertTrue(validator.isValid("abra cadab ra"))
+ assertTrue(validator.isValid("qq aa$"))
+ assertTrue(validator.isValid("( * 2q aa$"))
}
}
\ No newline at end of file
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/LengthValidatorTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/LengthValidatorTest.kt
new file mode 100644
index 000000000..50bd26437
--- /dev/null
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/LengthValidatorTest.kt
@@ -0,0 +1,38 @@
+package com.verygoodsecurity.vgscollect.card.validator
+
+import com.verygoodsecurity.vgscollect.view.card.validation.payment.LengthValidator
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Before
+import org.junit.Test
+
+class LengthValidatorTest {
+ private lateinit var validator: LengthValidator
+
+ @Before
+ fun setupValidator() {
+ val array = (7..12).toMutableList().toTypedArray()
+ validator = LengthValidator(array)
+ }
+
+ @Test
+ fun test_less() {
+ assertFalse(validator.isValid("123abc"))
+ assertFalse(validator.isValid("val"))
+ }
+
+ @Test
+ fun test_valid() {
+ assertTrue(validator.isValid("123 890 t"))
+ assertTrue(validator.isValid("123 890 te"))
+ assertTrue(validator.isValid("123 890 tes"))
+ assertTrue(validator.isValid("123 890 test"))
+ }
+
+ @Test
+ fun test_more() {
+ assertFalse(validator.isValid("123 890 test tes"))
+ assertFalse(validator.isValid("123 890 test test"))
+ }
+
+}
\ No newline at end of file
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/AmexDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/AmexDelegateTest.kt
index 8ab221c70..5b1931fb6 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/AmexDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/AmexDelegateTest.kt
@@ -1,14 +1,14 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.AmexDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert.assertTrue
import org.junit.Test
-class AmexDelegateTest {
+class CardBrandDelegateTest {
@Test
fun detectAmex1() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("370000000000002")
@@ -17,7 +17,7 @@ class AmexDelegateTest {
@Test
fun detectAmex2() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("378282246310005")
@@ -26,7 +26,7 @@ class AmexDelegateTest {
@Test
fun detectAmex3() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("371449635398431")
@@ -35,7 +35,7 @@ class AmexDelegateTest {
@Test
fun detectAmex4() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("378734493671000")
@@ -44,7 +44,7 @@ class AmexDelegateTest {
@Test
fun detectAmex5() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("374111111111111")
@@ -53,7 +53,7 @@ class AmexDelegateTest {
@Test
fun detectAmex6() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("373953192351004")
@@ -62,7 +62,7 @@ class AmexDelegateTest {
@Test
fun detectAmex7() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("346018484777573")
@@ -71,7 +71,7 @@ class AmexDelegateTest {
@Test
fun detectAmex8() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("374101000000608")
@@ -80,7 +80,7 @@ class AmexDelegateTest {
@Test
fun detectAmex9() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("376525000000010")
@@ -89,7 +89,7 @@ class AmexDelegateTest {
@Test
fun detectAmex10() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("375425000000907")
@@ -98,7 +98,7 @@ class AmexDelegateTest {
@Test
fun detectAmex11() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("343452000000306")
@@ -107,7 +107,7 @@ class AmexDelegateTest {
@Test
fun detectAmex12() {
- val amex = AmexDelegate()
+ val amex = CardBrandDelegate()
val state = amex.isValid("372349000000852")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DankoftDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DankoftDelegateTest.kt
index 57041a3ab..dae4a7797 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DankoftDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DankoftDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.DankortDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert
import org.junit.Test
@@ -8,7 +8,7 @@ class DankoftDelegateTest {
@Test
fun detectDankoft1() {
- val dank = DankortDelegate()
+ val dank = CardBrandDelegate()
val state = dank.isValid("5019717010103742")
@@ -17,7 +17,7 @@ class DankoftDelegateTest {
@Test
fun detectDankoft2() {
- val dank = DankortDelegate()
+ val dank = CardBrandDelegate()
val state = dank.isValid("4444444444444000")
@@ -26,7 +26,7 @@ class DankoftDelegateTest {
@Test
fun detectDankoft3() {
- val dank = DankortDelegate()
+ val dank = CardBrandDelegate()
val state = dank.isValid("5019555544445555")
@@ -35,7 +35,7 @@ class DankoftDelegateTest {
@Test
fun detectDankoft4() {
- val dank = DankortDelegate()
+ val dank = CardBrandDelegate()
val state = dank.isValid("4571740000000002")
@@ -44,7 +44,7 @@ class DankoftDelegateTest {
@Test
fun detectDankoft5() {
- val dank = DankortDelegate()
+ val dank = CardBrandDelegate()
val state = dank.isValid("5019200000000004")
@@ -53,7 +53,7 @@ class DankoftDelegateTest {
@Test
fun detectDankoft6() {
- val dank = DankortDelegate()
+ val dank = CardBrandDelegate()
val state = dank.isValid("50194500000005")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DinersClubDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DinersClubDelegateTest.kt
index 077aa6de9..e9797e6ee 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DinersClubDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DinersClubDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.DinersClubDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -8,7 +8,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_1() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("30569309025904")
@@ -17,7 +17,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_2() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("38520000023237")
@@ -26,7 +26,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_3() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("38000000000006")
@@ -35,7 +35,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_4() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("36256000000725")
@@ -44,7 +44,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_5() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("36256000000998")
@@ -53,7 +53,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_6() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("36256000000634")
@@ -62,7 +62,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_7() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("38865000000705")
@@ -71,7 +71,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_8() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("30450000000985")
@@ -80,7 +80,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_9() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("36700102000000")
@@ -89,7 +89,7 @@ class DinersClubDelegateTest {
@Test
fun detectDinersClub_10() {
- val dinClub = DinersClubDelegate()
+ val dinClub = CardBrandDelegate()
val state = dinClub.isValid("36148900647913")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DiscoverDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DiscoverDelegateTest.kt
index 613415dc9..0b92ddf5d 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DiscoverDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/DiscoverDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.DiscoverDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -8,7 +8,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover1() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000000004")
@@ -17,7 +17,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover2() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011111111111117")
@@ -26,7 +26,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover3() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000990139424")
@@ -35,7 +35,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover4() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000400000000")
@@ -44,7 +44,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover5() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000000087")
@@ -53,7 +53,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover6() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000001010")
@@ -62,7 +62,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover7() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000001028")
@@ -71,7 +71,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover8() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000001036")
@@ -80,7 +80,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover9() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000002000")
@@ -89,7 +89,7 @@ class DiscoverDelegateTest {
@Test
fun detectDiscover10() {
- val discover = DiscoverDelegate()
+ val discover = CardBrandDelegate()
val state = discover.isValid("6011000000000012")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/EloDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/EloDelegateTest.kt
index ac68191a1..7cb4d26d1 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/EloDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/EloDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.EloDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert
import org.junit.Test
@@ -8,7 +8,7 @@ class EloDelegateTest {
@Test
fun detectElo1() {
- val elo = EloDelegate()
+ val elo = CardBrandDelegate()
val state = elo.isValid("5066991111111118")
@@ -17,7 +17,7 @@ class EloDelegateTest {
@Test
fun detectElo2() {
- val elo = EloDelegate()
+ val elo = CardBrandDelegate()
val state = elo.isValid("6362970000457013")
@@ -26,7 +26,7 @@ class EloDelegateTest {
@Test
fun detectElo3() {
- val elo = EloDelegate()
+ val elo = CardBrandDelegate()
val state = elo.isValid("5067310000000010")
@@ -35,7 +35,7 @@ class EloDelegateTest {
@Test
fun detectElo4() {
- val elo = EloDelegate()
+ val elo = CardBrandDelegate()
val state = elo.isValid("5067312520593847")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/ForbrugsforeningenDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/ForbrugsforeningenDelegateTest.kt
index d0ed7428e..2ec422c08 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/ForbrugsforeningenDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/ForbrugsforeningenDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.ForbrugsforeningenDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert
import org.junit.Test
@@ -8,7 +8,7 @@ class ForbrugsforeningenDelegateTest {
@Test
fun detectForbrugsforeningen1() {
- val forb = ForbrugsforeningenDelegate()
+ val forb = CardBrandDelegate()
val state = forb.isValid("6007220000000004")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/HipercardDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/HipercardDelegateTest.kt
index 1feb8f3a6..3aad39893 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/HipercardDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/HipercardDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.HipercardDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert
import org.junit.Test
@@ -8,7 +8,7 @@ class HipercardDelegateTest {
@Test
fun detectHipercard1() {
- val hipercard = HipercardDelegate()
+ val hipercard = CardBrandDelegate()
val state = hipercard.isValid("6062828888666688")
@@ -17,7 +17,7 @@ class HipercardDelegateTest {
@Test
fun detectHipercard2() {
- val hipercard = HipercardDelegate()
+ val hipercard = CardBrandDelegate()
val state = hipercard.isValid("6062826786276634")
@@ -26,7 +26,7 @@ class HipercardDelegateTest {
@Test
fun detectHipercard3() {
- val hipercard = HipercardDelegate()
+ val hipercard = CardBrandDelegate()
val state = hipercard.isValid("6062826786276634")
@@ -35,7 +35,7 @@ class HipercardDelegateTest {
@Test
fun detectHipercard4() {
- val hipercard = HipercardDelegate()
+ val hipercard = CardBrandDelegate()
val state = hipercard.isValid("6062828888666688")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/JCBDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/JCBDelegateTest.kt
index e9c74d16c..f0c9d8306 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/JCBDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/JCBDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.JcbDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -8,7 +8,7 @@ class JCBDelegateTest {
@Test
fun detectJcb1() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3088000000000017")
@@ -17,7 +17,7 @@ class JCBDelegateTest {
@Test
fun detectJcb2() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3530111333300000")
@@ -26,7 +26,7 @@ class JCBDelegateTest {
@Test
fun detectJcb3() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566002020360505")
@@ -35,7 +35,7 @@ class JCBDelegateTest {
@Test
fun detectJcb4() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("356600202036050013")
@@ -44,7 +44,7 @@ class JCBDelegateTest {
@Test
fun detectJcb5() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566111111111113")
@@ -53,7 +53,7 @@ class JCBDelegateTest {
@Test
fun detectJcb6() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566000000000000")
@@ -62,7 +62,7 @@ class JCBDelegateTest {
@Test
fun detectJcb7() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566000000001016")
@@ -71,7 +71,7 @@ class JCBDelegateTest {
@Test
fun detectJcb8() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566000000001024")
@@ -80,7 +80,7 @@ class JCBDelegateTest {
@Test
fun detectJcb9() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566000000001032")
@@ -89,7 +89,7 @@ class JCBDelegateTest {
@Test
fun detectJcb10() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3566000000002006")
@@ -98,7 +98,7 @@ class JCBDelegateTest {
@Test
fun detectJcb11() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3569990000000009")
@@ -107,7 +107,7 @@ class JCBDelegateTest {
@Test
fun detectJcb12() {
- val jcb16 = JcbDelegate()
+ val jcb16 = CardBrandDelegate()
val state = jcb16.isValid("3528000700000000")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MaestroDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MaestroDelegateTest.kt
index 6bd330e3f..ccba81547 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MaestroDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MaestroDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.MaestroDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert
import org.junit.Test
@@ -8,7 +8,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro1() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("6771798021000008")
@@ -17,7 +17,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro2() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("5000550000000029")
@@ -26,7 +26,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro3() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("6771830999991239")
@@ -35,7 +35,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro4() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("6771830000000000006")
@@ -44,7 +44,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro5() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("6759649826438453")
@@ -53,7 +53,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro6() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("6759000000000000005")
@@ -62,7 +62,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro7() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("6799990100000000019")
@@ -71,7 +71,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro8() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("5001630000000002")
@@ -80,7 +80,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro9() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("5016590000000001")
@@ -89,7 +89,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro10() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("5020620000000000")
@@ -98,7 +98,7 @@ class MaestroDelegateTest {
@Test
fun detectMaestro11() {
- val maestro = MaestroDelegate()
+ val maestro = CardBrandDelegate()
val state = maestro.isValid("5612370000000006")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MastercardDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MastercardDelegateTest.kt
index 1c9d88424..984265c18 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MastercardDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/MastercardDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.MastercardDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -9,7 +9,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard1() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5555555555554444")
@@ -18,7 +18,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard2() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5454545454545454")
@@ -27,7 +27,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard3() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5105105105105100")
@@ -36,7 +36,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard4() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5399999999999999")
@@ -45,7 +45,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard5() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5232569007637831")
@@ -54,7 +54,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard6() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5556011778787485")
@@ -63,7 +63,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard7() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("2720992593319364")
@@ -72,7 +72,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard8() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("2222420000001113")
@@ -81,7 +81,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard9() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("2222630000001125")
@@ -90,7 +90,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard10() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5420923878724339")
@@ -99,7 +99,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard11() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5185540810000019")
@@ -108,7 +108,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard12() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5111010030175156")
@@ -117,7 +117,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard13() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5200828282828210")
@@ -126,7 +126,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard14() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5204230080000017")
@@ -135,7 +135,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard15() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5555555555555000")
@@ -144,7 +144,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard16() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5425230000004415")
@@ -153,7 +153,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard17() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5114610000004778")
@@ -162,7 +162,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard18() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5114630000009791")
@@ -171,7 +171,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard19() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5121220000006921")
@@ -180,7 +180,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard20() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5135020000005871")
@@ -189,7 +189,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard21() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5100000000000131")
@@ -198,7 +198,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard22() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5301250070000050")
@@ -207,7 +207,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard23() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5454609899026213")
@@ -216,7 +216,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard24() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5123456789012346")
@@ -225,7 +225,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard25() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5133333333333338")
@@ -234,7 +234,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard26() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5111111111111118")
@@ -243,7 +243,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard27() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("2223000000000023")
@@ -252,7 +252,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard28() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5413000000000000")
@@ -261,7 +261,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard29() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5404000000000068")
@@ -270,7 +270,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard30() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5404000000000084")
@@ -279,7 +279,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard31() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5404000000000043")
@@ -288,7 +288,7 @@ class MastercardDelegateTest {
@Test
fun detectMastercard32() {
- val mastercard16 = MastercardDelegate()
+ val mastercard16 = CardBrandDelegate()
val state = mastercard16.isValid("5496198584584769")
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaDelegateTest.kt
index b1461599b..ca8a4d006 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.VisaDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert
import org.junit.Test
@@ -8,7 +8,7 @@ class VisaDelegateTest {
@Test
fun detectVisa1() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4111111111111111")
Assert.assertTrue(state)
@@ -16,7 +16,7 @@ class VisaDelegateTest {
@Test
fun detectVisa2() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4007000000027")
Assert.assertTrue(state)
@@ -24,7 +24,7 @@ class VisaDelegateTest {
@Test
fun detectVisa3() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012888818888")
Assert.assertTrue(state)
@@ -32,7 +32,7 @@ class VisaDelegateTest {
@Test
fun detectVisa4() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4005519200000004")
Assert.assertTrue(state)
@@ -40,7 +40,7 @@ class VisaDelegateTest {
@Test
fun detectVisa5() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4009348888881881")
Assert.assertTrue(state)
@@ -48,7 +48,7 @@ class VisaDelegateTest {
@Test
fun detectVisa6() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012000033330026")
Assert.assertTrue(state)
@@ -56,7 +56,7 @@ class VisaDelegateTest {
@Test
fun detectVisa7() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012000077777777")
Assert.assertTrue(state)
@@ -64,7 +64,7 @@ class VisaDelegateTest {
@Test
fun detectVisa8() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012888888881881")
Assert.assertTrue(state)
@@ -72,7 +72,7 @@ class VisaDelegateTest {
@Test
fun detectVisa9() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4217651111111119")
Assert.assertTrue(state)
@@ -80,7 +80,7 @@ class VisaDelegateTest {
@Test
fun detectVisa10() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4500600000000061")
Assert.assertTrue(state)
@@ -88,7 +88,7 @@ class VisaDelegateTest {
@Test
fun detectVisa11() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4444333322221111")
Assert.assertTrue(state)
@@ -96,7 +96,7 @@ class VisaDelegateTest {
@Test
fun detectVisa12() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4119862760338320")
Assert.assertTrue(state)
@@ -104,7 +104,7 @@ class VisaDelegateTest {
@Test
fun detectVisa13() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001038443335")
Assert.assertTrue(state)
@@ -112,7 +112,7 @@ class VisaDelegateTest {
@Test
fun detectVisa14() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4149011500000147")
Assert.assertTrue(state)
@@ -120,7 +120,7 @@ class VisaDelegateTest {
@Test
fun detectVisa15() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4000007000000031")
Assert.assertTrue(state)
@@ -128,7 +128,7 @@ class VisaDelegateTest {
@Test
fun detectVisa16() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4462030000000000")
Assert.assertTrue(state)
@@ -136,7 +136,7 @@ class VisaDelegateTest {
@Test
fun detectVisa17() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4200000000000000")
Assert.assertTrue(state)
@@ -144,7 +144,7 @@ class VisaDelegateTest {
@Test
fun detectVisa18() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4711100000000000")
Assert.assertTrue(state)
@@ -152,7 +152,7 @@ class VisaDelegateTest {
@Test
fun detectVisa19() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001037461114")
Assert.assertTrue(state)
@@ -160,7 +160,7 @@ class VisaDelegateTest {
@Test
fun detectVisa20() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001036853337")
Assert.assertTrue(state)
@@ -168,7 +168,7 @@ class VisaDelegateTest {
@Test
fun detectVisa21() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001037484447")
Assert.assertTrue(state)
@@ -176,7 +176,7 @@ class VisaDelegateTest {
@Test
fun detectVisa22() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001036273338")
Assert.assertTrue(state)
@@ -184,7 +184,7 @@ class VisaDelegateTest {
@Test
fun detectVisa23() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4263970000005262")
Assert.assertTrue(state)
@@ -192,7 +192,7 @@ class VisaDelegateTest {
@Test
fun detectVisa24() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4484070000000000")
Assert.assertTrue(state)
@@ -200,7 +200,7 @@ class VisaDelegateTest {
@Test
fun detectVisa25() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4917610000000000003")
Assert.assertTrue(state)
@@ -208,7 +208,7 @@ class VisaDelegateTest {
@Test
fun detectVisa26() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4911830000000")
Assert.assertTrue(state)
@@ -216,7 +216,7 @@ class VisaDelegateTest {
@Test
fun detectVisa27() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4917610000000000")
Assert.assertTrue(state)
@@ -224,7 +224,7 @@ class VisaDelegateTest {
@Test
fun detectVisa28() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4003830171874018")
Assert.assertTrue(state)
@@ -232,7 +232,7 @@ class VisaDelegateTest {
@Test
fun detectVisa29() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001036983332")
Assert.assertTrue(state)
@@ -240,7 +240,7 @@ class VisaDelegateTest {
@Test
fun detectVisa30() {
- val visa13 = VisaDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4012001038488884")
Assert.assertTrue(state)
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaElectronDelegateTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaElectronDelegateTest.kt
index 8cedd8004..75a340e87 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaElectronDelegateTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/card/validator/luhn/VisaElectronDelegateTest.kt
@@ -1,6 +1,6 @@
package com.verygoodsecurity.vgscollect.card.validator.luhn
-import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.VisaElectronDelegate
+import com.verygoodsecurity.vgscollect.view.card.validation.card.brand.CardBrandDelegate
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -8,7 +8,7 @@ class VisaElectronDelegateTest {
@Test
fun detectVisa1() {
- val visa13 = VisaElectronDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4917300000000008")
assertTrue(state)
@@ -16,7 +16,7 @@ class VisaElectronDelegateTest {
@Test
fun detectVisa2() {
- val visa13 = VisaElectronDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("4917300800000000")
assertTrue(state)
@@ -24,7 +24,7 @@ class VisaElectronDelegateTest {
@Test
fun detectVisa3() {
- val visa13 = VisaElectronDelegate()
+ val visa13 = CardBrandDelegate()
val state = visa13.isValid("3333333333333000")
assertTrue(state)
diff --git a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/storage/NotifierTest.kt b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/storage/NotifierTest.kt
index 974927b99..1d4f47e4b 100644
--- a/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/storage/NotifierTest.kt
+++ b/vgscollect/src/test/java/com/verygoodsecurity/vgscollect/storage/NotifierTest.kt
@@ -9,10 +9,17 @@ import com.verygoodsecurity.vgscollect.core.storage.Notifier
import com.verygoodsecurity.vgscollect.view.InputFieldView
import com.verygoodsecurity.vgscollect.view.card.CardType
import com.verygoodsecurity.vgscollect.view.card.FieldType
+import org.hamcrest.Matchers
+import org.junit.Assert
+import org.junit.Assert.assertArrayEquals
+import org.junit.Assert.assertEquals
import org.junit.Test
+import org.mockito.ArgumentCaptor
import org.mockito.Mockito
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy
+import org.mockito.hamcrest.MockitoHamcrest
+
class NotifierTest {
@@ -44,6 +51,7 @@ class NotifierTest {
Mockito.verify(listener).dispatchDependencySetting(testDependency)
}
+
@Test
fun test_cvc_3_length_detect_after_set_State() {
val notifier = spy(Notifier())
@@ -51,7 +59,16 @@ class NotifierTest {
val state = createMASTERCARD()
notifier.onRefreshState(state)
- Mockito.verify(notifier).onDependencyDetected(FieldType.CVC, Dependency(DependencyType.RANGE, Pair(3,3)))
+ val argument_1: ArgumentCaptor = ArgumentCaptor.forClass(FieldType::class.java)
+ val argument_2: ArgumentCaptor = ArgumentCaptor.forClass(Dependency::class.java)
+ Mockito.verify(notifier).onDependencyDetected(capture(argument_1), capture(argument_2))
+
+ assertEquals(FieldType.CVC, argument_1.value)
+
+ assertEquals(DependencyType.RANGE, argument_2.value.dependencyType)
+
+ val cvcRange = (argument_2.value.value as Array)
+ assertArrayEquals(CardType.MASTERCARD.rangeCVV, cvcRange)
}
@Test
@@ -61,7 +78,16 @@ class NotifierTest {
val state = createAmEx()
notifier.onRefreshState(state)
- Mockito.verify(notifier).onDependencyDetected(FieldType.CVC, Dependency(DependencyType.RANGE, Pair(4,4)))
+ val argument_1: ArgumentCaptor = ArgumentCaptor.forClass(FieldType::class.java)
+ val argument_2: ArgumentCaptor = ArgumentCaptor.forClass(Dependency::class.java)
+ Mockito.verify(notifier).onDependencyDetected(capture(argument_1), capture(argument_2))
+
+ assertEquals(FieldType.CVC, argument_1.value)
+
+ assertEquals(DependencyType.RANGE, argument_2.value.dependencyType)
+
+ val cvcRange = (argument_2.value.value as Array)
+ assertArrayEquals(CardType.AMERICAN_EXPRESS.rangeCVV, cvcRange)
}
@Test
@@ -86,6 +112,7 @@ class NotifierTest {
val state = VGSFieldState(isFocusable = false, type = FieldType.CARD_NUMBER )
val content = FieldContent.CardNumberContent()
content.cardtype = CardType.AMERICAN_EXPRESS
+ content.rangeCVV = CardType.AMERICAN_EXPRESS.rangeCVV
state.content = content
return state
@@ -95,8 +122,12 @@ class NotifierTest {
val state = VGSFieldState(isFocusable = false, type = FieldType.CARD_NUMBER )
val content = FieldContent.CardNumberContent()
content.cardtype = CardType.MASTERCARD
+ content.rangeCVV = CardType.MASTERCARD.rangeCVV
state.content = content
return state
}
+
+ private fun capture(argumentCaptor: ArgumentCaptor): T = argumentCaptor.capture()
+
}
\ No newline at end of file