blob: fa0b8a875466add8fb93d7aaaebac7630c95d769 [file] [log] [blame]
var jsonProject = require('./fixtures/full-project')
fullProjectStr = JSON.stringify(jsonProject),
path = require('path'),
pbx = require('../lib/pbxProject'),
pbxFile = require('../lib/pbxFile'),
proj = new pbx('.'),
singleDataModelFilePath = __dirname + '/fixtures/single-data-model.xcdatamodeld',
multipleDataModelFilePath = __dirname + '/fixtures/multiple-data-model.xcdatamodeld';
function cleanHash() {
return JSON.parse(fullProjectStr);
}
exports.setUp = function (callback) {
proj.hash = cleanHash();
callback();
}
exports.dataModelDocument = {
'should return a pbxFile': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath);
test.equal(newFile.constructor, pbxFile);
test.done()
},
'should set a uuid on the pbxFile': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath);
test.ok(newFile.uuid);
test.done()
},
'should set a fileRef on the pbxFile': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath);
test.ok(newFile.fileRef);
test.done()
},
'should set an optional target on the pbxFile': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath, undefined, { target: target }),
target = proj.findTargetKey('TestApp');
test.equal(newFile.target, target);
test.done()
},
'should populate the PBXBuildFile section with 2 fields': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath),
buildFileSection = proj.pbxBuildFileSection(),
bfsLength = Object.keys(buildFileSection).length;
test.equal(59 + 1, bfsLength);
test.ok(buildFileSection[newFile.uuid]);
test.ok(buildFileSection[newFile.uuid + '_comment']);
test.done();
},
'should populate the PBXFileReference section with 2 fields for single model document': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath),
fileRefSection = proj.pbxFileReferenceSection(),
frsLength = Object.keys(fileRefSection).length;
test.equal(66 + 2, frsLength);
test.ok(fileRefSection[newFile.models[0].fileRef]);
test.ok(fileRefSection[newFile.models[0].fileRef + '_comment']);
test.done();
},
'should populate the PBXFileReference section with 2 fields for each model of a model document': function (test) {
var newFile = proj.addDataModelDocument(multipleDataModelFilePath),
fileRefSection = proj.pbxFileReferenceSection(),
frsLength = Object.keys(fileRefSection).length;
test.equal(66 + 2 * 2, frsLength);
test.ok(fileRefSection[newFile.models[0].fileRef]);
test.ok(fileRefSection[newFile.models[0].fileRef + '_comment']);
test.ok(fileRefSection[newFile.models[1].fileRef]);
test.ok(fileRefSection[newFile.models[1].fileRef + '_comment']);
test.done();
},
'should add to resources group by default': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath);
groupChildren = proj.pbxGroupByName('Resources').children,
found = false;
for (var index in groupChildren) {
if (groupChildren[index].comment === 'single-data-model.xcdatamodeld') {
found = true;
break;
}
}
test.ok(found);
test.done();
},
'should add to group specified by key': function (test) {
var group = 'Frameworks',
newFile = proj.addDataModelDocument(singleDataModelFilePath, proj.findPBXGroupKey({ name: group }));
groupChildren = proj.pbxGroupByName(group).children;
var found = false;
for (var index in groupChildren) {
if (groupChildren[index].comment === path.basename(singleDataModelFilePath)) {
found = true;
break;
}
}
test.ok(found);
test.done();
},
'should add to group specified by name': function (test) {
var group = 'Frameworks',
newFile = proj.addDataModelDocument(singleDataModelFilePath, group);
groupChildren = proj.pbxGroupByName(group).children;
var found = false;
for (var index in groupChildren) {
if (groupChildren[index].comment === path.basename(singleDataModelFilePath)) {
found = true;
break;
}
}
test.ok(found);
test.done();
},
'should add to the PBXSourcesBuildPhase': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath),
sources = proj.pbxSourcesBuildPhaseObj();
test.equal(sources.files.length, 2 + 1);
test.done();
},
'should create a XCVersionGroup section': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath),
xcVersionGroupSection = proj.xcVersionGroupSection();
test.ok(xcVersionGroupSection[newFile.fileRef]);
test.done();
},
'should populate the XCVersionGroup comment correctly': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath),
xcVersionGroupSection = proj.xcVersionGroupSection(),
commentKey = newFile.fileRef + '_comment';
test.equal(xcVersionGroupSection[commentKey], path.basename(singleDataModelFilePath));
test.done();
},
'should add the XCVersionGroup object correctly': function (test) {
var newFile = proj.addDataModelDocument(singleDataModelFilePath),
xcVersionGroupSection = proj.xcVersionGroupSection(),
xcVersionGroupEntry = xcVersionGroupSection[newFile.fileRef];
test.equal(xcVersionGroupEntry.isa, 'XCVersionGroup');
test.equal(xcVersionGroupEntry.children[0], newFile.models[0].fileRef);
test.equal(xcVersionGroupEntry.currentVersion, newFile.currentModel.fileRef);
test.equal(xcVersionGroupEntry.name, path.basename(singleDataModelFilePath));
// Need to validate against normalized path, since paths should contain forward slash on OSX
test.equal(xcVersionGroupEntry.path, singleDataModelFilePath.replace(/\\/g, '/'));
test.equal(xcVersionGroupEntry.sourceTree, '"<group>"');
test.equal(xcVersionGroupEntry.versionGroupType, 'wrapper.xcdatamodel');
test.done();
}
}