104 lines
3.3 KiB
Lua
104 lines
3.3 KiB
Lua
local createLibTest = require('/apis/libtest');
|
|
local createVersion = require('/apis/libversion');
|
|
|
|
local testlib = createLibTest({ ... });
|
|
|
|
local counter = 0;
|
|
|
|
local function freshDirs()
|
|
counter = counter + 1;
|
|
local stateDir = '/libversion-test/state-' .. counter;
|
|
local repoRoot = '/libversion-test/repo-' .. counter;
|
|
fs.delete(stateDir);
|
|
fs.delete(repoRoot);
|
|
return stateDir, repoRoot;
|
|
end
|
|
|
|
local function writeJson(path, value)
|
|
local dir = path:match('^(.*)/[^/]+$');
|
|
if dir then fs.makeDir(dir); end
|
|
local f = fs.open(path, 'w');
|
|
f.write(textutils.serializeJSON(value));
|
|
f.close();
|
|
end
|
|
|
|
testlib.test('forFile reads the version from the lock file', function()
|
|
local stateDir, repoRoot = freshDirs();
|
|
writeJson(stateDir .. '/ccpm.lock.json', {
|
|
packages = {
|
|
['trapos-ai'] = {
|
|
version = '0.4.2',
|
|
files = { 'apis/libai.lua', 'programs/ai.lua' },
|
|
},
|
|
['trapos-core'] = {
|
|
version = '0.4.0',
|
|
files = { 'apis/eventloop.lua' },
|
|
},
|
|
},
|
|
});
|
|
local v = createVersion({ stateDir = stateDir, repoRoot = repoRoot });
|
|
testlib.assertEquals(v.forFile('/programs/ai.lua'), '0.4.2');
|
|
testlib.assertEquals(v.forFile('programs/ai.lua'), '0.4.2');
|
|
testlib.assertEquals(v.forFile('/apis/eventloop.lua'), '0.4.0');
|
|
end);
|
|
|
|
testlib.test('forFile falls back to packages/<name>/ccpm.json when no lock entry matches', function()
|
|
local stateDir, repoRoot = freshDirs();
|
|
writeJson(repoRoot .. '/packages/trapos-net/ccpm.json', {
|
|
name = 'trapos-net',
|
|
version = '0.2.1',
|
|
files = { 'apis/net.lua', 'programs/router.lua' },
|
|
});
|
|
writeJson(repoRoot .. '/packages/trapos-ui/ccpm.json', {
|
|
name = 'trapos-ui',
|
|
version = '0.2.2',
|
|
files = { 'apis/libtui.lua' },
|
|
});
|
|
local v = createVersion({ stateDir = stateDir, repoRoot = repoRoot });
|
|
testlib.assertEquals(v.forFile('/programs/router.lua'), '0.2.1');
|
|
testlib.assertEquals(v.forFile('/apis/libtui.lua'), '0.2.2');
|
|
end);
|
|
|
|
testlib.test('forFile prefers the lock entry over the repo descriptor', function()
|
|
local stateDir, repoRoot = freshDirs();
|
|
writeJson(stateDir .. '/ccpm.lock.json', {
|
|
packages = {
|
|
['trapos-net'] = {
|
|
version = '9.9.9',
|
|
files = { 'programs/ping.lua' },
|
|
},
|
|
},
|
|
});
|
|
writeJson(repoRoot .. '/packages/trapos-net/ccpm.json', {
|
|
name = 'trapos-net',
|
|
version = '0.2.1',
|
|
files = { 'programs/ping.lua' },
|
|
});
|
|
local v = createVersion({ stateDir = stateDir, repoRoot = repoRoot });
|
|
testlib.assertEquals(v.forFile('/programs/ping.lua'), '9.9.9');
|
|
end);
|
|
|
|
testlib.test('forFile returns "?" when neither source knows the file', function()
|
|
local stateDir, repoRoot = freshDirs();
|
|
local v = createVersion({ stateDir = stateDir, repoRoot = repoRoot });
|
|
testlib.assertEquals(v.forFile('/programs/ghost.lua'), '?');
|
|
end);
|
|
|
|
testlib.test('forSelf resolves via shell.getRunningProgram', function()
|
|
local stateDir, repoRoot = freshDirs();
|
|
writeJson(stateDir .. '/ccpm.lock.json', {
|
|
packages = {
|
|
['trapos-test'] = {
|
|
version = '0.2.1',
|
|
files = { 'programs/runtest.lua' },
|
|
},
|
|
},
|
|
});
|
|
local fakeShell = { getRunningProgram = function() return 'programs/runtest.lua'; end };
|
|
local v = createVersion({ stateDir = stateDir, repoRoot = repoRoot, shell = fakeShell });
|
|
testlib.assertEquals(v.forSelf(), '0.2.1');
|
|
end);
|
|
|
|
testlib.run();
|
|
|