jquery.rut
Version:
Plugin de jQuery para formateo y validación de RUTs.
292 lines • 12.2 kB
HTML
<html>
<head>
<meta charset="utf-8">
<title>jquery.rut.js test suite</title>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.14.0.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="lib/syn.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="jquery.rut.js"></script>
<script src="http://code.jquery.com/qunit/qunit-1.14.0.js"></script>
<script>
var okOriginal = "145694841";
var okFormateado = "14.569.484-1";
var invalidOriginal = "14569484K";
var invalidFormateado = "14.569.484-K";
/**
* Crear un objeto input
*
* @param {string} val Define el valor dentro del input
* @return {object:input} Contiene un elemento input
*/
var textbox = function(val) {
return $("<input>").attr({
id : 'test',
type : 'text',
placeholder : '14.569.484-1',
value : val.toString()
});
}
/**
* Crea múltiples objetos input sin definir el atributo id
*
* @param {stinng[]} val Contiene el valor del objecto
* @return {object:input} Contiene el elemento input
*/
var textboxs = function(val) {
var rt = [];
for (var i = 0; i < val.length; i++) {
rt.push($("<input>").attr({
type : 'text',
placeholder : '14.569.484-1',
value : val[i]
}));
};
return rt;
}
module("pre");
test( "plugin loading", function() {
ok($, "Existe jquery" );
ok(Syn, "Existe Syn" );
ok($.isFunction($("#format-blur").rut), "Existe la función $('...').rut()" );
ok($.isFunction($.formatRut), "Existe la función jQuery.formatRut()" );
ok($.isFunction($.validateRut), "Existe la función jQuery.validateRut()" );
});
module("static");
test( "format", function() {
equal(okFormateado, $.formatRut(okOriginal), "rut válido, formateado correctamente");
equal(okFormateado, $.formatRut(okFormateado), "rut válido y formateado, formateado correctamente");
equal(invalidFormateado, $.formatRut(invalidOriginal), "rut inválido, formateado correctamente");
equal(invalidFormateado, $.formatRut(invalidFormateado), "rut inválido y formateado, formateado correctamente");
});
asyncTest( "validate", function() {
var calledOnInvalid = false;
ok($.validateRut(okOriginal), "rut válido identificado como tal");
ok(!$.validateRut(invalidOriginal), "rut inválido identificado como tal");
$.validateRut(okOriginal, function(rut, dv) {
equal(14569484, rut, "RUT dividido correctamente");
equal(1, dv, "DV dividido correctamente");
});
$.validateRut(invalidOriginal, function(rut, dv) {
calledOnInvalid = true;
});
equal(calledOnInvalid, false, "No se invocó el callback con un RUT inválido");
start();
});
module("blur");
test( "format-triggered-onValid", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textbox(okOriginal));
equal($("input", fxtr).val(), okOriginal, "El valor es el original");
$("input", fxtr).rut();
equal($("input", fxtr).val(), okOriginal, "El valor no se formatea automáticamente");
$("input", fxtr).triggerHandler("blur");
equal($("input", fxtr).val(), okFormateado, "El valor fue formateado en blur");
});
/////////////////////////////
// Para múltiples objectos //
/////////////////////////////
test( "format-triggered-onValid-multiple", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textboxs([okOriginal,okOriginal]));
for (var i = 0; i < 2; i++) {
equal($($("input", fxtr)[i]).val(), okOriginal, "El valor "+i+" es el original");
};
$("input", fxtr).rut();
for (var i = 0; i < 2; i++) {
equal($($("input", fxtr)[i]).val(), okOriginal, "El valor "+i+" no se formatea automáticamente");
}
for (var i = 0; i < 2; i++) {
$($("input", fxtr)[i]).triggerHandler("blur");
equal($($("input", fxtr)[i]).val(), okFormateado, "El valor "+i+" fue formateado en blur");
}
});
test( "format-triggered-onInalid", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textbox(invalidOriginal));
equal($("input", fxtr).val(), invalidOriginal, "El valor es el original");
$("input", fxtr).rut();
equal($("input", fxtr).val(), invalidOriginal, "El valor no se formatea automáticamente");
$("input", fxtr).triggerHandler("blur");
equal($("input", fxtr).val(), invalidFormateado, "El valor fue formateado en blur");
});
/////////////////////////////
// Para múltiples objectos //
/////////////////////////////
test( "format-triggered-onInalid-multiple", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textboxs([invalidOriginal,invalidOriginal]));
for (var i = 0; i < 2; i++) {
equal($($("input", fxtr)[i]).val(), invalidOriginal, "El valor "+i+" es el original");
};
$("input", fxtr).rut();
for (var i = 0; i < 2; i++) {
equal($($("input", fxtr)[i]).val(), invalidOriginal, "El valor "+i+" no se formatea automáticamente");
}
for (var i = 0; i < 2; i++) {
$($("input", fxtr)[i]).triggerHandler("blur");
equal($($("input", fxtr)[i]).val(), invalidFormateado, "El valor "+i+" fue formateado en blur");
}
});
asyncTest( "validate-triggered-onValid", 2, function() {
var fxtr = $("#qunit-fixture");
var valid = false;
var invalid = false;
fxtr.append(textbox(okOriginal));
$("input", fxtr).rut();
$("input", fxtr).on("rutValido", function() {
valid = true;
});
$("input", fxtr).on("rutInvalido", function() {
invalid = true;
});
$("input", fxtr).triggerHandler("blur");
start();
ok(valid, "evento rutValido gatillado");
ok(invalid == false, "evento rutInvalido no fue gatillado");
});
/////////////////////////////
// Para múltiples objectos //
/////////////////////////////
asyncTest( "validate-triggered-onValid-multiple", 2, function() {
var fxtr = $("#qunit-fixture");
var valid = false;
var invalid = false;
fxtr.append(textboxs([okOriginal,okOriginal]));
$("input", fxtr).rut();
$("input", fxtr).on("rutValido", function() {
valid = true;
});
$("input", fxtr).on("rutInvalido", function() {
invalid = true;
});
for (var i = 0; i < 2; i++) {
$($("input", fxtr)[i]).triggerHandler("blur");
}
start();
ok(valid, "evento rutValido gatillado en múltiples textbox");
ok(invalid == false, "evento rutInvalido no fue gatillado en múltiples textbox");
});
asyncTest( "validate-triggered-onInvalid", 2, function() {
var fxtr = $("#qunit-fixture");
var valid = false;
var invalid = false;
fxtr.append(textbox(invalidOriginal));
$("input", fxtr).rut();
$("input", fxtr).on("rutValido", function() {
valid = true;
});
$("input", fxtr).on("rutInvalido", function() {
invalid = true;
});
$("input", fxtr).triggerHandler("blur");
start();
ok(valid == false, "evento rutValido no fue gatillado");
ok(invalid, "evento rutInvalido gatillado");
});
/////////////////////////////
// Para múltiples objectos //
/////////////////////////////
asyncTest( "validate-triggered-onInvalid-multiple", 2, function() {
var fxtr = $("#qunit-fixture");
var valid = false;
var invalid = false;
fxtr.append(textboxs([invalidOriginal,invalidOriginal]));
$("input", fxtr).rut();
$("input", fxtr).on("rutValido", function() {
valid = true;
});
$("input", fxtr).on("rutInvalido", function() {
invalid = true;
});
for (var i = 0; i < 2; i++) {
$($("input", fxtr)[i]).triggerHandler("blur");
};
start();
ok(valid == false, "evento rutValido no fue gatillado en múltiples textbox");
ok(invalid, "evento rutInvalido gatillado en múltiples textbox");
});
test( "validate-correct-args-onValid", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textbox(okOriginal));
$("input", fxtr).rut();
$("input", fxtr).on("rutValido", function(e, rut, dv) {
ok(e, "El evento fue retornado");
equal(rut, 14569484, "El rut fue retornado");
equal(dv, "1", "El dv fue retornado");
});
$("input", fxtr).triggerHandler("blur");
});
/////////////////////////////
// Para múltiples objectos //
/////////////////////////////
test( "validate-correct-args-onValid-multiple", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textboxs([okOriginal,okOriginal]));
$("input", fxtr).rut();
$("input", fxtr).on("rutValido", function(e, rut, dv) {
ok(e, "El evento fue retornado");
equal(rut, 14569484, "El rut fue retornado");
equal(dv, "1", "El dv fue retornado");
});
for (var i = 0; i < 2; i++) {
$($("input", fxtr)[i]).triggerHandler("blur");
ok(true,"blur ok para objeto "+i);
};
});
module("keyup");
asyncTest( "format-invalid", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textbox(""));
var formatsIncluded = [];
var formats = ["", "1", "1-4", "14-5", "145-6"];
$("input", fxtr).rut({formatOn: 'keyup'}).on("keydown", function(e){
formatsIncluded.push($(this).val());
ok(formats.indexOf($(this).val()) >= 0, "Tecla [" + (e.keyCode >= 48 && e.keyCode <= 57 ? e.keyCode-48 : e.keyCode) + "]; formato anterior ['" + $(this).val() + "'] (remaining " + formats + ")");
formats.splice(formats.indexOf($(this).val()), 1);
if(formats.length == 0) {
start();
equal(0, formats.length, "RUT formateado correctamente para: " + formatsIncluded);
}
});
Syn.type("14569", 'test');
});
asyncTest( "format-valid", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textbox(""));
var formatsIncluded = [];
var formats = ["", "1", "1-5", "15-7", "157-7"];
$("input", fxtr).rut({formatOn: 'keyup'}).on("keydown", function(e){
formatsIncluded.push($(this).val());
ok(formats.indexOf($(this).val()) >= 0, "Tecla [" + (e.keyCode >= 48 && e.keyCode <= 57 ? e.keyCode-48 : e.keyCode) + "]; formato anterior ['" + $(this).val() + "'] (remaining " + formats + ")");
formats.splice(formats.indexOf($(this).val()), 1);
if(formats.length == 0) {
start();
equal(0, formats.length, "RUT formateado correctamente para: " + formatsIncluded);
}
});
Syn.type("15776", 'test');
});
asyncTest("format-control-keys-ignored", function() {
var fxtr = $("#qunit-fixture");
fxtr.append(textbox(""));
var formatsIncluded = [];
var formats = ["", "1", "1-5", "15-7", "157-a", "1.57a-6", "1.57a-6", "1.57a-6", "1.57-6"];
$("input", fxtr).rut({formatOn: 'keyup'}).on("keydown", function(e){
formatsIncluded.push($(this).val());
ok(formats.indexOf($(this).val()) >= 0, "Tecla [" + (e.keyCode >= 48 && e.keyCode <= 57 ? e.keyCode-48 : e.keyCode) + "]; formato anterior ['" + $(this).val() + "'] (remaining " + formats + ")");
formats.splice(formats.indexOf($(this).val()), 1);
if(formats.length == 0) {
start();
equal(0, formats.length, "RUT formateado correctamente para: " + formatsIncluded);
}
});
Syn.type("157a6[left][left][backspace]7", 'test');
});
</script>
</body>
</html>