VulpesOS/gaia/build/test/integration/build_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

153 lines
5.1 KiB
JavaScript
Executable file

'use strict';
var assert = require('chai').assert;
var fs = require('fs');
var path = require('path');
var AdmZip = require('adm-zip');
var helper = require('./helper');
suite('Integration tests', function() {
suiteSetup(helper.cleanupWorkspace);
teardown(helper.cleanupWorkspace);
function verifyIncludedFilesFromHtml(appName) {
var zipPath = path.join(process.cwd(), 'profile', 'webapps',
appName + '.gaiamobile.org', 'application.zip');
var zip = new AdmZip(zipPath);
var zipEntries = zip.getEntries();
if (zipEntries.length === 0) {
return;
}
for (var f = 0; f < zipEntries.length; f++) {
var fileName = zipEntries[f].entryName;
var extention =
fileName.substr(fileName.lastIndexOf('.') + 1).toLowerCase();
if (extention === 'html') {
extractSharedFile(zip, zipEntries[f], appName);
}
}
function extractSharedFile(zip, file, appName) {
var SHARED_USAGE =
/<(?:script|link).+=['"]\.?\.?\/?(shared\/[^\/]+\/[^''\s]+)["']/g;
var content = zip.readAsText(file);
var matches;
while((matches = SHARED_USAGE.exec(content))!== null) {
var filePathInHtml = matches[1];
var fileInZip = zip.readFile(zip.getEntry(filePathInHtml));
var fileInApps;
if (/\.(png|gif|jpg)$/.test(filePathInHtml)) {
continue;
}
if (filePathInHtml.indexOf('shared/') === 0) {
fileInApps = fs.readFileSync(
path.join(process.cwd(), filePathInHtml));
} else {
fileInApps = fs.readFileSync(path.join(process.cwd(),
'apps', appName, filePathInHtml));
}
assert.deepEqual(fileInZip, fileInApps, filePathInHtml);
}
}
}
function verifyIncludedImagesSize(appName, reso, official) {
var zipPath = path.join(process.cwd(), 'profile', 'webapps',
appName + '.gaiamobile.org', 'application.zip');
var zip = new AdmZip(zipPath);
var zipEntries = zip.getEntries();
if (zipEntries.length === 0) {
return;
}
for (var f = 0; f < zipEntries.length; f++) {
var fileInZip = zipEntries[f];
var fileName = fileInZip.entryName;
if (/\.(png|gif|jpg)$/.test(fileName)) {
// Manually modify the pathname of the browser branding images as
// these are packaged differently than normal images.
if (reso !== 1 &&
fileName.indexOf('shared/resources/branding/browser_') === -1) {
fileName = fileName.replace(
/(.*)(\.(png|gif|jpg))$/, '$1@' + reso + 'x$2');
}
compareWithApps(appName, fileName, fileInZip, reso, official);
}
}
function compareWithApps(appName, filePath, fileEntry, reso, official) {
var fileInApps;
var fileOfZip = zip.readFile(fileEntry);
if (filePath.indexOf('/branding/') !== -1) {
filePath = filePath.replace('/branding/',
official ? '/branding/official/' : '/branding/unofficial/');
}
if (filePath.indexOf('shared/') === 0) {
filePath = path.join(process.cwd(), filePath);
} else {
filePath = path.join(process.cwd(), 'apps', appName, filePath);
}
if (fs.existsSync(filePath)) {
fileInApps = fs.readFileSync(filePath);
} else {
filePath = filePath.replace('@' + reso + 'x', '');
fileInApps = fs.readFileSync(filePath);
}
assert.deepEqual(fileOfZip, fileInApps, filePath + ' no found');
}
}
test('make APP=system, checking all of the files are available',
function(done) {
helper.exec('make APP=system', function(error, stdout, stderr) {
helper.checkError(error, stdout, stderr);
verifyIncludedFilesFromHtml('system');
verifyIncludedImagesSize('system', 1, false);
done();
});
});
test('make with GAIA_DEV_PIXELS_PER_PX=1.5', function(done) {
helper.exec('GAIA_DEV_PIXELS_PER_PX=1.5 APP=system make ',
function(error, stdout, stderr) {
helper.checkError(error, stdout, stderr);
verifyIncludedImagesSize('system', 1.5, false);
done();
}
);
});
test('make app with custom origin', function(done) {
// add custom-origin app to apps list
var appsListPath = path.join('build', 'config', 'phone',
'apps-engineering.list');
fs.renameSync(appsListPath, appsListPath + '.bak');
fs.writeFileSync(appsListPath,
'apps/*\nbuild/test/fixtures/custom-origin\n');
var extConfigPath = path.join('build', 'config',
'additional-extensions.json');
var restoreFunc = helper.emptyJsonFile(extConfigPath);
helper.exec('DEBUG=1 make', function(error, stdout, stderr) {
fs.unlinkSync(appsListPath);
fs.renameSync(appsListPath + '.bak', appsListPath);
helper.checkError(error, stdout, stderr);
var webappsPath = path.join(process.cwd(), 'profile-debug',
'webapps', 'webapps.json');
var webapps = JSON.parse(fs.readFileSync(webappsPath));
assert.isNotNull(webapps['test.mozilla.com']);
assert.equal(
webapps['test.mozilla.com'].origin, 'app://test.mozilla.com');
restoreFunc();
done();
});
});
});