dev

This module contains testcases for its parent module, Base64.

See also


local base64 = require('Module:Base64')
local suite = require('Module:ScribuntoUnit'):new()

----------------------
------- encode -------
----------------------

function suite:testEncoder()
	-- Empty string
	self:assertEquals('', base64.encoder(''), 'Incorrect value')
	-- ASCII
	self:assertEquals('SGVsbG8gd29ybGQh', base64.encoder('Hello world!'), 'Incorrect value')
	self:assertEquals('SGVsbG8sIHdvcmxkIQ==', base64.encoder('Hello, world!'), 'Incorrect value')
	-- UTF-8
	self:assertEquals('UMWZw61sacWhIMW+bHXFpW91xI1rw70ga8WvxYggw7pwxJtsIMSPw6FiZWxza8OpIMOzZHk=', base64.encoder('Příliš žluťoučký kůň úpěl ďábelské ódy'), 'Incorrect value')
	self:assertEquals('0KHRitC10YjRjCDQtdGJ0ZEg0Y3RgtC40YUg0LzRj9Cz0LrQuNGFINGE0YDQsNC90YbRg9C30YHQutC40YUg0LHRg9C70L7Quiwg0LTQsCDQstGL0L/QtdC5INC20LUg0YfQsNGO', base64.encoder('Съешь ещё этих мягких французских булок, да выпей же чаю'), 'Incorrect value')
	self:assertEquals('55yf5piv6Zq+5Lul572u5L+h77yB', base64.encoder('真是难以置信!'), 'Incorrect value')
	-- Binary data
	self:assertEquals('AH+A/w==', base64.encoder(string.char(0, 127, 128, 255)), 'Incorrect value')
end

----------------------
------- decode -------
----------------------
function suite:testDecoder()
	-- Empty string
	self:assertEquals('', base64.decoder(''), 'Incorrect value')
	-- ASCII
	self:assertEquals('Hello world!', base64.decoder('SGVsbG8gd29ybGQh'), 'Incorrect value')
	self:assertEquals('Hello, world!', base64.decoder('SGVsbG8sIHdvcmxkIQ=='), 'Incorrect value')
	-- Strings that should be trimmed
	self:assertEquals('Hello world!', base64.decoder(' SGVsbG8gd29ybGQh'), 'Incorrect value')
	self:assertEquals('Hello, world!', base64.decoder('     	SGVsbG8sIHdvcmxkIQ==	 '), 'Incorrect value')
	-- Missing padding
	self:assertEquals('Hello, world!', base64.decoder('SGVsbG8sIHdvcmxkIQ'), 'Incorrect value')
	
	-- UTF-8
	self:assertEquals('Příliš žluťoučký kůň úpěl ďábelské ódy', base64.decoder('UMWZw61sacWhIMW+bHXFpW91xI1rw70ga8WvxYggw7pwxJtsIMSPw6FiZWxza8OpIMOzZHk='), 'Incorrect value')
	self:assertEquals('Съешь ещё этих мягких французских булок, да выпей же чаю', base64.decoder('0KHRitC10YjRjCDQtdGJ0ZEg0Y3RgtC40YUg0LzRj9Cz0LrQuNGFINGE0YDQsNC90YbRg9C30YHQutC40YUg0LHRg9C70L7Quiwg0LTQsCDQstGL0L/QtdC5INC20LUg0YfQsNGO'), 'Incorrect value')
	self:assertEquals('真是难以置信!', base64.decoder('55yf5piv6Zq+5Lul572u5L+h77yB'), 'Incorrect value')
	-- Binary data
	self:assertEquals(string.char(0, 127, 128, 255), base64.decoder('AH+A/w=='), 'Incorrect value')
end

function suite:testDecoderErrors()
	local noError, result
	-- Non-ASCII characters in the string
	noError, result = pcall(base64.decoder, 'ЯSGVsbG8gd29ybGQh')
	result = noError and result or nil
	self:assertEquals(nil, result, 'Incorrect value')
	noError, result = pcall(base64.decoder, '真SGVsbG8gd信29ybGQh')
	result = noError and result or nil
	self:assertEquals(nil, result, 'Incorrect value')
	
	-- Incorrect string length
	noError, result = pcall(base64.decoder, 'SGVsbG8sIHdvcmxkI')
	result = noError and result or nil
	self:assertEquals(nil, result, 'Incorrect value')
end

return suite