Quiq/t/bin/Quiq/String.t
#!/usr/bin/env perl
package Quiq::String::Test;
use base qw/Quiq::Test::Class/;
use v5.10;
use strict;
use warnings;
use utf8;
# -----------------------------------------------------------------------------
sub test_loadClass : Init(1) {
shift->useOk('Quiq::String');
}
# -----------------------------------------------------------------------------
sub test_maxLineLength : Test(1) {
my $self = shift;
my $len = Quiq::String->maxLineLength("Dies\nist\nein\nBeispieltext\n!\n");
$self->is($len,12);
}
# -----------------------------------------------------------------------------
sub test_indent : Test(5) {
my $self = shift;
my $str1 = Quiq::String->indent(<<' __TEXT__');
a b
c d
__TEXT__
# mit Whitspace
my $str2 = Quiq::String->indent(<<' __TEXT__');
a b
c d
__TEXT__
# ~ der Sichtbarkeit wegen in Debug-Ausgabe
my $res1 = $str1;
$res1 =~ s/^(.)/~~$1/mg; # nur nicht-Leerzeilen einrücken
my $res2 = $str1;
$res2 =~ s/^/~~/mg; # alle Zeilen einrücken
my $res3 = $res1;
chomp $res3;
my $val = Quiq::String->indent($str1,'~~');
$self->is($val,$res1);
$self->isnt($val,$res2);
$val = Quiq::String->indent($str1,'~~',-indentBlankLines=>1);
$self->is($val,$res2);
$self->isnt($val,$res1);
$val = Quiq::String->indent($str2,'~~',-strip=>1);
$self->is($val,$res3);
}
# -----------------------------------------------------------------------------
my $Ind1Str0 = '';
my $Ind1Str1 = ' ' x 8;
my $Ind1Str2 = <<'__STR__';
Dies
ist
ein
Test
__STR__
sub test_determineIndentation : Test(3) {
my $self = shift;
my $n = Quiq::String->determineIndentation($Ind1Str0);
$self->is($n,0);
$n = Quiq::String->determineIndentation($Ind1Str1);
$self->is($n,8);
$n = Quiq::String->determineIndentation($Ind1Str2);
$self->is($n,4);
}
# -----------------------------------------------------------------------------
my $Ind2Str0 = '';
my $Ind2Str1a = ' x';
my $Ind2Str1b = ' x';
my $Ind2Str2a = <<'__STR__';
Dies
ist
ein
Test
__STR__
my $Ind2Str2b = <<'__STR__';
Dies
ist
ein
Test
__STR__
sub test_reduceIndentation : Test(3) {
my $self = shift;
my $str = Quiq::String->reduceIndentation(2,$Ind2Str0);
$self->is($str,$Ind2Str0);
$str = Quiq::String->reduceIndentation(2,$Ind2Str1a);
$self->is($str,$Ind2Str1b);
$str = Quiq::String->reduceIndentation(2,$Ind2Str2a);
$self->is($str,$Ind2Str2b);
}
# -----------------------------------------------------------------------------
my $IndStr1 = <<'__STR__';
Dies ist
ein Test-
Text.
Nächster
Absatz
__STR__
my $IndStr2 = <<'__STR__';
Dies ist
ein Test-
Text.
Nächster
Absatz
__STR__
chomp $IndStr2;
sub test_removeIndentation : Test(5) {
my $self = shift;
my $val = Quiq::String->removeIndentation($IndStr1);
$self->is($val,$IndStr2,'removeIndentation: String');
my $str = $IndStr1;
$val = Quiq::String->removeIndentation(\$str);
$self->is($str,$IndStr2,'removeIndentation: String-Ref');
$self->is($val,undef,'removeIndentation: String-Ref');
$str = undef;
$val = Quiq::String->removeIndentation(\$str);
$self->is($str,undef,'removeIndentation: undef str');
$self->is($val,undef,'removeIndentation: undef ret');
}
# -----------------------------------------------------------------------------
my $IndStr21 = <<'__STR__';
Dies ist
ein Test-
Text.
Nächster
Absatz
__STR__
my $IndStr22 = <<'__STR__';
Dies ist
ein Test-
Text.
Nächster
Absatz
__STR__
sub test_removeIndentationNl : Test(5) {
my $self = shift;
my $val = Quiq::String->removeIndentationNl($IndStr21);
$self->is($val,$IndStr22);
my $str = $IndStr21;
$val = Quiq::String->removeIndentationNl(\$str);
$self->is($str,$IndStr22);
$self->is($val,undef);
$str = undef;
$val = Quiq::String->removeIndentationNl(\$str);
$self->is($str,undef);
$self->is($val,undef);
}
# -----------------------------------------------------------------------------
my $Code1 = <<'__CODE__';
# Anfangs-
# Kommentar
sub x {
my $self = shift;
my $x = 1; # teilzeiliger Kommentar
# noch
# mehr
# Kommentar
return;
}
# eof
__CODE__
my $Result1 = <<'__CODE__';
sub x {
my $self = shift;
my $x = 1;
return;
}
__CODE__
sub test_removeComments_1 : Test(1) {
my $self = shift;
my $code = Quiq::String->removeComments($Code1,'#');
$self->is($code,$Result1);
}
# -----------------------------------------------------------------------------
my $Code3 = <<'__CODE__';
# Dies ist
# ein Kommentar
sub myMethod {
my $self = shift;
# @_: $arg
if ($x == $y) {
# Dies ist ein Kommentar
$x++;
}
elsif ($x) {
# Dies ist ein Kommentar
$y--;
}
else {
$x--;
# Dies ist ein Kommentar
$y++;
}
return; # Dies ist ein Kommentar
}
__CODE__
my $Result3 = <<'__CODE__';
sub myMethod {
my $self = shift;
if ($x == $y) {
$x++;
}
elsif ($x) {
$y--;
}
else {
$x--;
$y++;
}
return;
}
__CODE__
sub test_removeComments_3 : Test(1) {
my $self = shift;
my $code = Quiq::String->removeComments($Code3,'#');
$self->is($code,$Result3);
}
# -----------------------------------------------------------------------------
my $Code2 = <<'__CODE__';
/*
Setup Text
und Farbe
*/
body {
font-family: sans-serif; /* Font */
font-size: 12px;
/* Schriftfarbe */
color: black; /* Hintergrund
Farbe */
background: white;
}
/* Schluss-
Kommentar */
__CODE__
my $Result2 = <<'__CODE__';
body {
font-family: sans-serif;
font-size: 12px;
color: black;
background: white;
}
__CODE__
sub test_removeComments_2 : Test(1) {
my $self = shift;
my $code = Quiq::String->removeComments($Code2,'/*','*/');
$self->is($code,$Result2);
}
# -----------------------------------------------------------------------------
sub test_quote : Test(2) {
my $self = shift;
my $str = Quiq::String->quote('Eine Zeichenkette');
$self->is($str,"'Eine Zeichenkette'");
$str = Quiq::String->quote("Eine Zeichenkette mit '...' (single quotes)");
$self->is($str,q|'Eine Zeichenkette mit \'...\' (single quotes)'|);
}
# -----------------------------------------------------------------------------
sub test_joinLines : Test(2) {
my $self = shift;
my $text = Quiq::String->joinLines('~',"Dies ist ~\nein Text");
$self->is($text,'Dies ist ein Text');
$text = Quiq::String->joinLines('~',"Dies ist ~~\nein Text");
$self->is($text,"Dies ist ~\nein Text");
}
# -----------------------------------------------------------------------------
sub test_wrap : Test(4) {
my $self = shift;
# Leerer Text
my $txt = Quiq::String->wrap('');
$self->is($txt,'');
# Einfacher Text
my $t1 = "Dies ist ein Test mit einem kurzen Text.";
my $r1 = "Dies ist ein\nTest mit\neinem kurzen\nText.";
$txt = Quiq::String->wrap($t1,-width=>12);
$self->is($txt,$r1);
# Text mit einem langen Wort
my $t2 = "Dies ist ein ganzLangesWort in einem kurzen Text.";
my $r2 = "Dies ist ein\nganzLangesWort\nin einem\nkurzen Text.";
$txt = Quiq::String->wrap($t2,-width=>12);
$self->is($txt,$r2);
# Text mit zusätzlichem Whitespace
my $t3 = " Dies ist ein Test\n\nmit einem\t kurzen Text. ";
my $r3 = "Dies ist ein\nTest mit\neinem kurzen\nText.";
$txt = Quiq::String->wrap($t3,-width=>12);
$self->is($txt,$r3);
}
# -----------------------------------------------------------------------------
package main;
Quiq::String::Test->runTests;
# eof