Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
153 lines
5.1 KiB
JavaScript
Executable file
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();
|
|
});
|
|
});
|
|
});
|