blob: d0cf31fb00ce4677eac3367d84ff72c31e2c369b [file] [log] [blame]
var android_parser = require('../../src/metadata/android_parser'),
config_parser = require('../../src/config_parser'),
util = require('../../src/util'),
path = require('path'),
shell = require('shelljs'),
fs = require('fs'),
et = require('elementtree'),
tempDir = path.join(__dirname, '..', '..', 'temp'),
cordova = require('../../cordova');
cfg_path = path.join(__dirname, '..', 'fixtures', 'projects', 'test', 'www', 'config.xml'),
android_path = path.join(__dirname, '..', 'fixtures', 'projects', 'native', 'android_fixture'),
create = path.join(__dirname, '..', '..', 'lib', 'android', 'bin', 'create');
var cwd = process.cwd();
var android_strings = path.join(android_path, 'res', 'values', 'strings.xml');
var android_manifest = path.join(android_path, 'AndroidManifest.xml');
var android_config = path.join(android_path, 'res', 'xml', 'config.xml');
var original_strings = fs.readFileSync(android_strings, 'utf-8');
var original_manifest = fs.readFileSync(android_manifest, 'utf-8');
var original_config = fs.readFileSync(cfg_path, 'utf-8');
var original_android_config = fs.readFileSync(android_config, 'utf-8');
describe('android project parser', function() {
it('should throw an exception with a path that is not a native android project', function() {
expect(function() {
var project = new android_parser(cwd);
}).toThrow();
});
it('should accept a proper native android project path as construction parameter', function() {
var project;
expect(function() {
project = new android_parser(android_path);
}).not.toThrow();
expect(project).toBeDefined();
});
describe('update_from_config method', function() {
var project, config;
beforeEach(function() {
project = new android_parser(android_path);
config = new config_parser(cfg_path);
});
afterEach(function() {
fs.writeFileSync(android_strings, original_strings, 'utf-8');
fs.writeFileSync(android_manifest, original_manifest, 'utf-8');
fs.writeFileSync(cfg_path, original_config, 'utf-8');
fs.writeFileSync(android_config, original_android_config, 'utf-8');
});
it('should throw an exception if a non config_parser object is passed into it', function() {
expect(function() {
project.update_from_config({});
}).toThrow();
});
it('should update the application name properly', function() {
config.name('bond. james bond.');
project.update_from_config(config);
var strings = new et.ElementTree(et.XML(fs.readFileSync(android_strings, 'utf-8')));
var app_name = strings.find('string[@name="app_name"]').text;
expect(app_name).toBe('bond. james bond.');
});
it('should update the application package name properly', function() {
var javs = path.join(android_path, 'src', 'ca', 'filmaj', 'dewd', 'cordovaExample.java');
var orig_javs = path.join(android_path, 'src', 'io', 'cordova', 'hellocordova', 'cordovaExample.java');
var orig_contents = fs.readFileSync(orig_javs, 'utf-8');
this.after(function() {
fs.writeFileSync(orig_javs, orig_contents, 'utf-8');
shell.rm('-rf', path.join(android_path, 'src', 'ca'));
});
config.packageName('ca.filmaj.dewd');
project.update_from_config(config);
var manifest = new et.ElementTree(et.XML(fs.readFileSync(android_manifest, 'utf-8')));
expect(manifest.getroot().attrib.package).toEqual('ca.filmaj.dewd');
expect(fs.existsSync(javs)).toBe(true);
expect(fs.readFileSync(javs, 'utf-8')).toMatch(/package ca.filmaj.dewd/i);
});
it('should update the whitelist properly', function() {
config.access.remove('*');
config.access.add('http://apache.org');
config.access.add('http://github.com');
project.update_from_config(config);
var native_config = new et.ElementTree(et.XML(fs.readFileSync(android_config, 'utf-8')));
var as = native_config.findall('access');
expect(as.length).toEqual(2);
expect(as[0].attrib.origin).toEqual('http://apache.org');
expect(as[1].attrib.origin).toEqual('http://github.com');
});
});
describe('update_www method', function() {
var parser, android_platform;
beforeEach(function() {
shell.rm('-rf', tempDir);
cordova.create(tempDir);
process.chdir(tempDir);
cordova.platform('add', 'android');
android_platform = path.join(tempDir, 'platforms', 'android');
parser = new android_parser(android_platform);
});
afterEach(function() {
process.chdir(cwd);
});
it('should update all www assets', function() {
var newFile = path.join(tempDir, 'www', 'somescript.js');
fs.writeFileSync(newFile, 'alert("sup");', 'utf-8');
parser.update_www();
expect(fs.existsSync(path.join(android_platform, 'assets', 'www', 'somescript.js'))).toBe(true);
});
it('should write out android js to cordova.js', function() {
parser.update_www();
expect(fs.readFileSync(path.join(android_platform, 'assets', 'www', 'cordova.js'),'utf-8')).toBe(fs.readFileSync(path.join(util.libDirectory, 'cordova-android', 'framework', 'assets', 'js', 'cordova.android.js'), 'utf-8'));
});
});
describe('update_project method', function() {
var parser, android_platform, cfg;
beforeEach(function() {
shell.rm('-rf', tempDir);
cordova.create(tempDir);
process.chdir(tempDir);
cordova.platform('add', 'android');
android_platform = path.join(tempDir, 'platforms', 'android');
parser = new android_parser(android_platform);
cfg = new config_parser(cfg_path);
});
afterEach(function() {
process.chdir(cwd);
});
it('should invoke update_www', function() {
var spyWww = spyOn(parser, 'update_www');
parser.update_project(cfg);
expect(spyWww).toHaveBeenCalled();
});
it('should invoke update_from_config', function() {
var spyConfig = spyOn(parser, 'update_from_config');
parser.update_project(cfg);
expect(spyConfig).toHaveBeenCalled();
});
});
});