Webtesting mit SimpleTest – Selenium light

SimpleTest führt neben dem übermächtigen PHPUnit ein Schattendasein in der PHP-Community. Vielleicht nicht ganz zu Unrecht, schließlich kommt es mit deutlich weniger Features daher. Eher durch Zufall entdeckte ich beim Durchstöbern der Dokumentation das verdammt coole Webtesting Feature – zwar nicht so mächtig wie Selenium (das ja u.a. einen echten Browser fernsteuern kann), aber für kleine Checks durchaus gut zu gebrauchen. Aber der Reihe nach.

SimpleTest installieren

Die aktuelle Alpha-Version 1.1 herunterladen. Zusätzlich noch das File arguments.php direkt aus dem SVN herunterladen und ins simpletest-Verzeichnis stecken. Das wurde anscheinend in der alpha vergessen und führt sonst zu einem Fehler.

Test anlegen

Auf der selben Ebene des simpletest-Ordners erstellen wir eine Datei:

require_once 'simpletest/autorun.php';
Den ganzen Post lesen
Veröffentlicht unter php, Quicktips, webdev | 2 Kommentare

Best-of-the-Web 7

Und erneut gibt es Link-Spaß für die ganze Familie.

Den ganzen Post lesen
Veröffentlicht unter php, Javascript, Software Engineering, Best of the Web, webdev | Hinterlasse einen Kommentar

Javascript: Arrays kopieren

Banale Aufgabe: Erstelle eine unabhängige Kopie von einem Javascript-Array. Was erstmal billig klingt entpuppt sich für unwissende, PHP verwöhnte Entwickler doch als tricky.

var colors = ["red", "blue", "green"];
var copied = colors;

copied[0] = "magenta";

console.log(colors); //["magenta", "blue", "green"]
console.log(copied); //["magenta", "blue", "green"]

In diesem Beispiel sehen wir also, dass die vermeintliche Kopie eigentlich das gleiche Element ist. Gleiches gilt entsprechend für das Übergeben eines Arrays als Parmeter an eine Funktion.

var colors = ["red", "blue", "green"];

test(colors);
console.log(colors); //["magenta", "blue", "green"]

function test(arr)
{
	arr[0] = "magenta";
}

Offensichtlich nicht wie von PHP gewohnt By Value sondern By Reference.… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev | 7 Kommentare

Reingefallen: Wie man sich auf Facebook „Likes“ erschleicht

Ich dachte eigentlich, immun gegen so billige Spielchen zu sein. Aus dem „Ich weiß schon, wo ich hinklicke“-Grund hatte ich auch lange Zeit keinen Virenscanner drauf und fuhr eigentlich immer gut. Gestern hat michs jedoch erwischt – auf Facebook. Also jetzt nicht so richtig erwischt, aber ich habe ein Video geliked, ohne es zu wollen. Erbost ging ich der Sache auf den Grund und war ziemlich schockiert über diese miese Praktik. Aber der Reihe nach.

Es handelt sich „http://ksmp3.de/Guten-Morgen-Schatz-geht-daneben/„. Bitte erstmal nix klicken. Facebook packt den Like-Button sinnvollerweise in ein IFrame, weil man so mit Javascript keinen Klick auslösen kann (Cross Domain Policy).… Den ganzen Post lesen

Veröffentlicht unter Javascript, misc IT, Persönlich | 83 Kommentare

Dealing with Trusted Timestamps in PHP (RFC 3161)

This article won’t be pariculary interesting for the most readers. My aim is to help the billions of developers that are confused about dealing with trusted timestamping. If you don’t know what Trusted Timestamps are, carry on.

Explanation of the concept behind Trusted Timestamps

I can’t put it better as Wikipedia (Trusted timestamping) does:

Trusted timestamping is the process of securely keeping track of the creation and modification time of a document. Security here means that no one — not even the owner of the document — should be able to change it once it has been recorded provided that the timestamper’s integrity is never compromised.

Den ganzen Post lesen
Veröffentlicht unter php, Security, webdev | 16 Kommentare

PHP WTF #5

…oder: Bei magischen Funktionen gut aufpassen.

class TestingEmpty
{
	public function __get($var)
	{
		if ($var == "test_empty")
			return "Hi there!";
	}
}

$t = new TestingEmpty();
echo $t->test_empty; //Hi there! 
var_dump(strlen($t->test_empty)); //int(9)
var_dump(empty($t->test_empty)); //bool(true)
$externalvar = $t->test_empty;
var_dump(empty($externalvar)); //bool(false)

Aha, also empty, aber mit String-Length von 9 Zeichen. Nach dem Zuweisen zu einer „wirklichen“ Variable dann auch nicht mehr empty.

Zur Abwechslung wollen wir aber nicht nur meckern, sondern noch konstruktiv zeigen, wie man diesen WTF (der vielleicht garkeiner ist?) behebt:

class TestingEmpty
{
	public function __get($var)
	{
		if ($var == "test_empty")
			return "Hi there!";
	}
	
	public function __isset($var)
	{
		echo "__isset triggered";
		
		if ($var == "test_empty")
			return true;
		
		return false;
	}
}

$t = new TestingEmpty();
echo $t->test_empty; //Hi there!
Den ganzen Post lesen
Veröffentlicht unter php, PHP-WTF, webdev | 9 Kommentare

Zip-Archive entpacken mit Javascript

Unzippen mit Javascript? Wer sollte sowas wollen? Egal! Es geht, reicht das als Begründung? Und das garnicht mal so schlecht. Wie üblich schmeiße ich gleich mit Code um mich:

<script src="ZipFile.complete.js"></script>
<script>
var zipFile = new ZipFile("zipfile.zip", readingDoneCallback);

function readingDoneCallback(zip)
{
	console.log("Zipfile reading finished! " + zip.entries.length + " files found in zip");
	
	for (var i = 0; i < zip.entries.length; i++)
	{
		zip.entries[i].extract(extractCallback);
	}
};

function extractCallback(entry, entryContent) 
{
	var filename = entry.name,
		csize = entry.compressedSize,
		ucsize = entry.uncompressedSize;
	
	console.log("File " + filename + " - comp.: " + csize + ", uncomp.: " + ucsize + "byte");
	console.log("File-Content: " + entryContent);
}
</script>

Simpler Aufbau, logische Implementierung.… Den ganzen Post lesen

Veröffentlicht unter Javascript, Quicktips, webdev | 7 Kommentare

Testen mal anders: phpt

phpt ist ein schmuckes, kleines Testframework, welches u.a. auch zur PHP Quality Assurance verwendet wird, um damit PHP-eigene Funktionen in PHP zu testen. Wir beginnen mit einem Beispiel:

--TEST--
My first cool test!
--FILE--
<?php 
class Foobar
{
	public function __construct()
	{
		for ($i = 0; $i < 6; $i++)
		{
			if ($i % 2 != 0)
				echo $i;
		}
	}
}

new Foobar();
?>
--EXPECT--
135

Und das Beste: Mit PEAR kommt der Spaß gleich mit:

Das ists aber lang noch nicht gewesen. Man führe sich folgenden Test zu Gemüte:

--TEST--
Second example: errortesting
--FILE--
<?php 
$foo = array(1, 3) * array(2, 6);
?>
Den ganzen Post lesen
Veröffentlicht unter php, Software Engineering, webdev | 3 Kommentare

Systemaufrufe, Linux, Windows, Rückgabewerte und der Errorstream

Heute folgendes Problem gehabt: Es soll ein Systemaufruf an openssl ts zur Signierung von Timestamps (siehe hier) erfolgen. Das an sich ist ja erst mal noch kein Problem. Allerdings soll die geschriebene Klasse gleichermaßen unter Linux und Windows mit möglichst aussagekräftigen Fehlermeldungen zum Einsatz kommen. Jetzt ist die pikante Sache daran, dass der ts-Parameter von openssl erst ab Version 0.99 mit dabei ist, die standardmäßig unter Debian Lenny nicht mit installiert ist. Jetzt erzeugt netterweise ein Aufruf von openssl ts einen Returnwert von 0 (= alles okay), obwohl openssl den ts-Befehl in der installierten Version garnicht kennt – wir haben also keine Möglichkeit über eine Prüfung des Returnwertes alleine über Erfolg oder Misserfolg der Funktion zu entscheiden:

Als Waffe der Wahl haben wir uns nun also für exec entschieden, da shell_exec keinen Returnwert zurückliefert und system / passthru den Programmoutput einfach rausfeueren und nicht returnen.… Den ganzen Post lesen

Veröffentlicht unter php, Quicktips, webdev, Linux | 1 Kommentar

Java Applet Tutorial: Applet erstellen, einbinden und mit Javascript ansprechen

Wenn ich an Java Applets denke, ist damit immer ein verstaubtes Web 1.0 – Bild assoziiert, gepaart mit animierten gifs und anderen Schandtaten. Heutzutage haben die Applets ihre Nische gefunden und werden vor allem da benutzt, wo Javascript noch zu langsam / umständlich ist, bspw. mathematische Zwecke. Wir widmen uns dem Thema mal ganz von vorne. Selbst wenn keine Javakenntnisse bestehen, soll man also noch gut folgen können. Soweit der Plan.

Was am Ende bei rumkommen wird

Wir werden ein Java-Applet bauen, das den Inhalt von Ordnern auf dem PC des Users in einer Liste anzeigt. Auch das Löschen von Dateien ist möglich.… Den ganzen Post lesen

Veröffentlicht unter Javascript, webdev, Java | 15 Kommentare