Skip to content

Add RangeAdapter tests and fix cast min/max attributes #97

New issue

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

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

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 31, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions blackbox-test/src/test/java/example/avaje/range/ARange.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package example.avaje.range;

import io.avaje.validation.constraints.Length;
import io.avaje.validation.constraints.Range;
import jakarta.validation.Valid;

@Valid
public record ARange(
@Range(min = 1, max = 3)
int anIntVal,
@Range(min = 1, max = 3)
long aLongVal
) {
}
63 changes: 63 additions & 0 deletions blackbox-test/src/test/java/example/avaje/range/ARangeTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package example.avaje.range;

import io.avaje.validation.ConstraintViolation;
import io.avaje.validation.ConstraintViolationException;
import io.avaje.validation.Validator;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Locale;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;

class ARangeTest {

final Validator validator = Validator.builder().addLocales(Locale.GERMAN).build();

@Test
void valid() {
var value = new ARange(1, 3L);
validator.validate(value);
}

@Test
void min() {
var violation = one(new ARange(0, 3L));
assertThat(violation.message()).isEqualTo("must be between 1 and 3");
}

@Test
void minDE() {
var violation = one(new ARange(0, 3L), Locale.GERMAN);
assertThat(violation.message()).isEqualTo("muss zwischen 1 und 3 sein");
}

@Test
void max() {
var violation = one(new ARange(1, 4L));
assertThat(violation.message()).isEqualTo("must be between 1 and 3");
}

@Test
void maxDE() {
var violation = one(new ARange(4, 1L), Locale.GERMAN);
assertThat(violation.message()).isEqualTo("muss zwischen 1 und 3 sein");
}

ConstraintViolation one(Object any) {
return one(any, Locale.ENGLISH);
}

ConstraintViolation one(Object any, Locale locale) {
try {
validator.validate(any, locale);
fail("not expected");
return null;
} catch (ConstraintViolationException e) {
var violations = new ArrayList<>(e.violations());
assertThat(violations).hasSize(1);
return violations.get(0);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,8 @@ private static final class RangeAdapter extends AbstractConstraintAdapter<Object
RangeAdapter(AdapterCreateRequest request) {
super(request);
final var attributes = request.attributes();
final var min = (int) attributes.get("min");
final var max = (int) attributes.get("max");
final var min = (long) attributes.get("min");
final var max = (long) attributes.get("max");
this.maxAdapter = new MaxAdapter(request, max);
this.minAdapter = new MinAdapter(request, min);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ avaje.ext.Mod10Check.message = the check digit for {validatedValue}
avaje.ext.Mod11Check.message = the check digit for {validatedValue} is invalid, Modulo 11 checksum failed
avaje.ext.ModCheck.message = the check digit for {validatedValue} is invalid, {modType} checksum failed
avaje.ext.Normalized.message = must be normalized
avaje.ext.Range.message = must be between {min} and {max}
avaje.Range.message = must be between {min} and {max}
avaje.ext.UniqueElements.message = must only contain unique elements
avaje.ext.URL.message = must be a valid URL
avaje.ext.UUID.message = must be a valid UUID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ avaje.ext.LuhnCheck.message = die Pr\u00fcfziffer f\u00fcr {valida
avaje.ext.Mod10Check.message = die Pr\u00fcfziffer f\u00fcr {validatedValue} ist ung\u00fcltig, Modulo 10-Kontrollsumme ist fehlgeschlagen
avaje.ext.Mod11Check.message = die Pr\u00fcfziffer f\u00fcr {validatedValue} ist ung\u00fcltig, Modulo 11-Kontrollsumme ist fehlgeschlagen
avaje.ext.ModCheck.message = die Pr\u00fcfziffer f\u00fcr {validatedValue} ist ung\u00fcltig, {modType}-Kontrollsumme ist fehlgeschlagen
avaje.ext.Range.message = muss zwischen {min} und {max} sein
avaje.Range.message = muss zwischen {min} und {max} sein
avaje.ext.UniqueElements.message = darf nur eindeutige Elemente enthalten
avaje.ext.URL.message = muss eine g\u00fcltige URL sein
avaje.ext.UUID.message = muss eine g\u00fcltige UUID sein
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = el d\u00edgito de comprobaci\u00f3n
avaje.ext.Mod10Check.message = el d\u00edgito de comprobaci\u00f3n para ${validatedValue} no es v\u00e1lido, ha fallado la suma de comprobaci\u00f3n de Modulo 10
avaje.ext.Mod11Check.message = el d\u00edgito de comprobaci\u00f3n para ${validatedValue} no es v\u00e1lido, ha fallado la suma de comprobaci\u00f3n de Modulo 11
avaje.ext.ModCheck.message = el d\u00edgito de comprobaci\u00f3n para ${validatedValue} no es v\u00e1lido, ha fallado la suma de comprobaci\u00f3n {modType}
avaje.ext.Range.message = debe estar entre {min} y {max}
avaje.Range.message = debe estar entre {min} y {max}
avaje.ext.UniqueElements.message = solo debe contener elementos exclusivos
avaje.ext.URL.message = debe ser un URL v\u00e1lido
avaje.ext.UUID.message = debe ser un UUID v\u00e1lido
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,5 @@ avaje.ext.LuhnCheck.message = \u0645\u0642\u062F\u0627\u0631 ${val
avaje.ext.Mod10Check.message = \u0645\u0642\u062F\u0627\u0631 ${validatedValue} \u0628\u0627 Modulo 10 \u0647\u0645\u062E\u0648\u0627\u0646\u06CC \u0646\u062F\u0627\u0631\u062F
avaje.ext.Mod11Check.message = \u0645\u0642\u062F\u0627\u0631 ${validatedValue} \u0628\u0627 Modulo 11 \u0647\u0645\u062E\u0648\u0627\u0646\u06CC \u0646\u062F\u0627\u0631\u062F
avaje.ext.ModCheck.message = \u0645\u0642\u062F\u0627\u0631 ${validatedValue} \u0628\u0627 {modType} \u0647\u0645\u062E\u0648\u0627\u0646\u06CC \u0646\u062F\u0627\u0631\u062F
avaje.ext.Range.message = \u0645\u0642\u062F\u0627\u0631 \u0628\u0627\u06CC\u062F \u0628\u06CC\u0646 {min} \u0648 {max} \u0628\u0627\u0634\u062F
avaje.Range.message = \u0645\u0642\u062F\u0627\u0631 \u0628\u0627\u06CC\u062F \u0628\u06CC\u0646 {min} \u0648 {max} \u0628\u0627\u0634\u062F
avaje.ext.URL.message = \u0645\u0642\u062F\u0627\u0631 URL \u062F\u0631\u0633\u062A \u0646\u0645\u06CC\u0628\u0627\u0634\u062F
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = la cl\u00e9 de contr\u00f4le pour ${
avaje.ext.Mod10Check.message = la cl\u00e9 de contr\u00f4le pour ${validatedValue} n'est pas valide ; la somme de contr\u00f4le de l'algorithme modulo 10 a \u00e9chou\u00e9
avaje.ext.Mod11Check.message = la cl\u00e9 de contr\u00f4le pour ${validatedValue} n'est pas valide ; la somme de contr\u00f4le de l'algorithme modulo 11 a \u00e9chou\u00e9
avaje.ext.ModCheck.message = la cl\u00e9 de contr\u00f4le pour ${validatedValue} n'est pas valide ; la somme de contr\u00f4le de l'algorithme {modType} a \u00e9chou\u00e9
avaje.ext.Range.message = doit \u00eatre compris entre {min} et {max}
avaje.Range.message = doit \u00eatre compris entre {min} et {max}
avaje.ext.UniqueElements.message = ne doit contenir que des \u00e9l\u00e9ments uniques
avaje.ext.URL.message = doit \u00eatre une URL valide
avaje.ext.UUID.message = doit \u00eatre une UUID valide
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = a(z) ${validatedValue} ellen\u0151rz
avaje.ext.Mod10Check.message = a(z) ${validatedValue} ellen\u0151rz\u0151 sz\u00e1mjegye \u00e9rv\u00e9nytelen, a Modulo 10 ellen\u0151rz\u0151\u00f6sszeg meghi\u00fasult
avaje.ext.Mod11Check.message = a(z) ${validatedValue} ellen\u0151rz\u0151 sz\u00e1mjegye \u00e9rv\u00e9nytelen, a Modulo 11 ellen\u0151rz\u0151\u00f6sszeg meghi\u00fasult
avaje.ext.ModCheck.message = a(z) ${validatedValue} ellen\u0151rz\u0151 sz\u00e1mjegye \u00e9rv\u00e9nytelen, a(z) {modType} ellen\u0151rz\u0151\u00f6sszeg meghi\u00fasult
avaje.ext.Range.message = a(z) {min} \u00e9s {max} \u00e9rt\u00e9kek k\u00f6z\u00f6tt kell lennie
avaje.Range.message = a(z) {min} \u00e9s {max} \u00e9rt\u00e9kek k\u00f6z\u00f6tt kell lennie
avaje.ext.UniqueElements.message = csak egyedi elemeket tartalmazhat
avaje.ext.URL.message = egy \u00e9rv\u00e9nyes URL c\u00edmnek kell lennie
avaje.ext.UUID.message = egy \u00e9rv\u00e9nyes UUID c\u00edmnek kell lennie
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = la cifra di controllo per ${validate
avaje.ext.Mod10Check.message = la cifra di controllo per ${validatedValue} non \u00e8 valida, checksum Modulo 10 non riuscito
avaje.ext.Mod11Check.message = la cifra di controllo per ${validatedValue} non \u00e8 valida, checksum Modulo 11 non riuscito
avaje.ext.ModCheck.message = la cifra di controllo per ${validatedValue} non \u00e8 valida, checksum {modType} non riuscito
avaje.ext.Range.message = deve essere compresa tra {min} e {max}
avaje.Range.message = deve essere compresa tra {min} e {max}
avaje.ext.UniqueElements.message = deve contenere solo elementi univoci
avaje.ext.URL.message = deve essere un URL valido
avaje.ext.UUID.message = deve essere un UUID valido
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = ${validatedValue} \u306e\u30c1\u30a7
avaje.ext.Mod10Check.message = ${validatedValue} \u306e\u30c1\u30a7\u30c3\u30af\u30c7\u30b8\u30c3\u30c8\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 (\u30e2\u30c7\u30e5\u30e9\u30b910)
avaje.ext.Mod11Check.message = ${validatedValue} \u306e\u30c1\u30a7\u30c3\u30af\u30c7\u30b8\u30c3\u30c8\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 (\u30e2\u30c7\u30e5\u30e9\u30b911)
avaje.ext.ModCheck.message = ${validatedValue} \u306e\u30c1\u30a7\u30c3\u30af\u30c7\u30b8\u30c3\u30c8\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 ({modType} \u306e\u30c1\u30a7\u30c3\u30af\u30b5\u30e0\u304c\u5931\u6557\u3057\u307e\u3057\u305f)
avaje.ext.Range.message = {min} \u304b\u3089 {max} \u306e\u9593\u306b\u3057\u3066\u304f\u3060\u3055\u3044
avaje.Range.message = {min} \u304b\u3089 {max} \u306e\u9593\u306b\u3057\u3066\u304f\u3060\u3055\u3044
avaje.ext.UniqueElements.message = \u8981\u7d20\u306f\u5168\u3066\u30e6\u30cb\u30fc\u30af\u306b\u3057\u3066\u304f\u3060\u3055\u3044
avaje.ext.URL.message = URL \u3068\u3057\u3066\u6b63\u3057\u3044\u5f62\u5f0f\u306b\u3057\u3066\u304f\u3060\u3055\u3044

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ avaje.ext.LuhnCheck.message = ${validatedValue}\uc758 \uccb4\ud06c
avaje.ext.Mod10Check.message = ${validatedValue}\uc758 \uccb4\ud06c \ub514\uc9c0\ud2b8\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Modulo 10 \uccb4\ud06c\uc12c\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4
avaje.ext.Mod11Check.message = ${validatedValue}\uc758 \uccb4\ud06c \ub514\uc9c0\ud2b8\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Modulo 11 \uccb4\ud06c\uc12c\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4
avaje.ext.ModCheck.message = ${validatedValue}\uc758 \uccb4\ud06c \ub514\uc9c0\ud2b8\uac00 \uc62c\ubc14\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. {modType} \uccb4\ud06c\uc12c\uc774 \uc2e4\ud328\ud588\uc2b5\ub2c8\ub2e4
avaje.ext.Range.message = {min}\uc5d0\uc11c {max} \uc0ac\uc774\uc5ec\uc57c \ud569\ub2c8\ub2e4
avaje.Range.message = {min}\uc5d0\uc11c {max} \uc0ac\uc774\uc5ec\uc57c \ud569\ub2c8\ub2e4
avaje.ext.UniqueElements.message = \uace0\uc720 \uc694\uc18c\ub9cc \ud3ec\ud568\ud574\uc57c \ud569\ub2c8\ub2e4
avaje.ext.URL.message = \uc62c\ubc14\ub978 URL\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = het controlecijfer voor ${validatedV
avaje.ext.Mod10Check.message = het controlecijfer voor ${validatedValue} is ongeldig, Modulo 10 checksum mislukt
avaje.ext.Mod11Check.message = het controlecijfer voor ${validatedValue} is ongeldig, Modulo 11 checksum mislukt
avaje.ext.ModCheck.message = het controlecijfer voor ${validatedValue} is ongeldig, {modType} checksum mislukt
avaje.ext.Range.message = moet tussen {min} en {max} zijn
avaje.Range.message = moet tussen {min} en {max} zijn
avaje.ext.UniqueElements.message = mag geen duplicaten bevatten
avaje.ext.URL.message = moet een geldige URL zijn
avaje.ext.UUID.message = moet een geldige UUID zijn
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = cyfra kontrolna dla warto\u015bci ${
avaje.ext.Mod10Check.message = cyfra kontrolna dla warto\u015bci ${validatedValue} jest niepoprawna, sprawdzenie sumy kontrolnej za pomoc\u0105 algorytmu Modulo 10 nie powiod\u0142o si\u0119
avaje.ext.Mod11Check.message = cyfra kontrolna dla warto\u015bci ${validatedValue} jest niepoprawna, sprawdzenie sumy kontrolnej za pomoc\u0105 algorytmu Modulo 11 nie powiod\u0142o si\u0119
avaje.ext.ModCheck.message = cyfra kontrolna dla warto\u015bci ${validatedValue} jest niepoprawna, sprawdzenie sumy kontrolnej za pomoc\u0105 algorytmu {modType} nie powiod\u0142o si\u0119
avaje.ext.Range.message = musi nale\u017ce\u0107 do zakresu od {min} do {max}
avaje.Range.message = musi nale\u017ce\u0107 do zakresu od {min} do {max}
avaje.ext.UniqueElements.message = musi zawiera\u0107 tylko unikalne elementy
avaje.ext.URL.message = musi by\u0107 poprawnym adresem URL
avaje.ext.UUID.message = musi by\u0107 poprawnym UUID
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = o d\u00edgito de verifica\u00e7\u00e
avaje.ext.Mod10Check.message = o d\u00edgito de verifica\u00e7\u00e3o para ${validatedValue} \u00e9 inv\u00e1lido, soma de verifica\u00e7\u00e3o Modulo 10 com falha
avaje.ext.Mod11Check.message = o d\u00edgito de verifica\u00e7\u00e3o para ${validatedValue} \u00e9 inv\u00e1lido, soma de verifica\u00e7\u00e3o Modulo 11 com falha
avaje.ext.ModCheck.message = o d\u00edgito de verifica\u00e7\u00e3o para ${validatedValue} \u00e9 inv\u00e1lido, soma de verifica\u00e7\u00e3o {modType} com falha
avaje.ext.Range.message = deve estar entre {min} e {max}
avaje.Range.message = deve estar entre {min} e {max}
avaje.ext.UniqueElements.message = deve conter apenas elementos exclusivos
avaje.ext.URL.message = deve ser uma URL v\u00e1lida
avaje.ext.UUID.message = deve ser uma UUID v\u00e1lida
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = cifra de verificare pentru ${validat
avaje.ext.Mod10Check.message = cifra de verificare pentru ${validatedValue} este invalid\u0103, suma de control Modulo 10 a e\u015fuat
avaje.ext.Mod11Check.message = cifra de verificare pentru ${validatedValue} este invalid\u0103, suma de control Modulo 11 a e\u015fuat
avaje.ext.ModCheck.message = cifra de verificare pentru ${validatedValue} este invalid\u0103, suma de control {modType} a e\u015fuat
avaje.ext.Range.message = trebuie s\u0103 fie \u00eentre {min} \u015fi {max}
avaje.Range.message = trebuie s\u0103 fie \u00eentre {min} \u015fi {max}
avaje.ext.UniqueElements.message = trebuie s\u0103 con\u0163in\u0103 numai elemente unice
avaje.ext.URL.message = trebuie s\u0103 fie un URL valid
avaje.ext.UUID.message = trebuie s\u0103 fie un UUID valid
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ avaje.ext.LuhnCheck.message = kontroln\u00e1 \u010d\u00edslica pre
avaje.ext.Mod10Check.message = kontroln\u00e1 \u010d\u00edslica pre ${validatedValue} nie je spr\u00e1vna, kontroln\u00fd s\u00fa\u010det Modulo 10 zlyhal
avaje.ext.Mod11Check.message = kontroln\u00e1 \u010d\u00edslica pre ${validatedValue} nie je spr\u00e1vna, kontroln\u00fd s\u00fa\u010det Modulo 11 zlyhal
avaje.ext.ModCheck.message = kontroln\u00e1 \u010d\u00edslica pre ${validatedValue} nie je spr\u00e1vna, kontroln\u00fd s\u00fa\u010det {modType} zlyhal
avaje.ext.Range.message = mus\u00ed by\u0165 medzi {min} a {max}
avaje.Range.message = mus\u00ed by\u0165 medzi {min} a {max}
avaje.ext.URL.message = mus\u00ed b\u00fdt platn\u00e1 URL
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ avaje.Size.message = boyut '{min}' ile '{max}' aras\u0131nda olmal\u0131

avaje.Length.message = uzunluk '{min}' ile '{max}' aras\u0131nda olmal\u0131
avaje.ext.CodePointLength.message = uzunluk '{min}' ile '{max}' aras\u0131nda olmal\u0131
avaje.ext.Range.message = {min} ve {max} aras\u0131nda olmal\u0131d\u0131r!
avaje.Range.message = {min} ve {max} aras\u0131nda olmal\u0131d\u0131r!
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ avaje.ext.LuhnCheck.message = \u043d\u0435\u043f\u0440\u0430\u0432
avaje.ext.Mod10Check.message = \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430 \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f ${validatedValue}, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0437\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c Mod10 \u0437\u0430\u043a\u0456\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0437 \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u044e
avaje.ext.Mod11Check.message = \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430 \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f ${validatedValue}, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0437\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c Mod11 \u0437\u0430\u043a\u0456\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0437 \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u044e
avaje.ext.ModCheck.message = \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430 \u0446\u0438\u0444\u0440\u0430 \u0434\u043b\u044f ${validatedValue}, \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0437\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c {modType} \u0437\u0430\u043a\u0456\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u0437 \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u044e
avaje.ext.Range.message = \u043c\u0430\u0454 \u0431\u0443\u0442\u0438 \u043c\u0456\u0436 {min} \u0442\u0430 {max}
avaje.Range.message = \u043c\u0430\u0454 \u0431\u0443\u0442\u0438 \u043c\u0456\u0436 {min} \u0442\u0430 {max}
avaje.ext.UniqueElements.message = \u043f\u043e\u0432\u0438\u043d\u043d\u043e \u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043b\u0438\u0448\u0435 \u0443\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438
avaje.ext.URL.message = \u043c\u0430\u0454 \u0431\u0443\u0442\u0438 \u0434\u0456\u0439\u0441\u043d\u0438\u043c URL

Loading