X-Git-Url: http://git.maemo.org/git/?p=fillmore;a=blobdiff_plain;f=src%2Ftest%2Fmarina%2FProjectLoading.vala;fp=src%2Ftest%2Fmarina%2FProjectLoading.vala;h=488fac298e3c49d2e8d458d2582c1dbc588c69d7;hp=0000000000000000000000000000000000000000;hb=a712cd772f4f3db8bed7037bb95c4de94767b230;hpb=2f0296582bf5d3f51db40d299f434fc8240ca6a5 diff --git a/src/test/marina/ProjectLoading.vala b/src/test/marina/ProjectLoading.vala new file mode 100644 index 0000000..488fac2 --- /dev/null +++ b/src/test/marina/ProjectLoading.vala @@ -0,0 +1,162 @@ +/* Copyright 2009 Yorba Foundation + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +namespace Model { + +public class ClipFetcher { + public string error_string; + public ClipFile clipfile; + string filename; + + public ClipFetcher(string filename) { + this.filename = filename; + } + public string get_filename() { + return filename; + } + public signal void ready(ClipFetcher fetcher); +} + +public class ClipFile { + public string filename; +} +} + +// Describes an XML Document and if the test should consider it a valid or an invalid document +struct ValidDocument { + public bool valid; + public string document; + public ValidDocument(bool valid, string document) { + this.valid = valid; + this.document = document; + } +} + +ValidDocument[] project_documents; // The set of documents for building the test suite +int current_document; // Index of the document for the test we are currently building + +// StateChangeFixture holds the root of an XML tree describing a project, the TreeBuilder +// and if the XML tree is expected to be valid or not +struct StateChangeFixture { + public Model.XmlElement root; + public Model.ProjectBuilder project_builder; + public bool valid; +} + +void state_change_fixture_buildup(void *fixture) { + StateChangeFixture* state_change_fixture = (StateChangeFixture*)fixture; + Model.XmlTreeLoader tree_loader = new Model.XmlTreeLoader(project_documents[current_document].document); + state_change_fixture->root = tree_loader.root; + state_change_fixture->project_builder = new Model.ProjectBuilder(new Model.LoaderHandler()); + state_change_fixture->valid = project_documents[current_document].valid; + ++current_document; +} + +void state_change_fixture_teardown(void *fixture) { + StateChangeFixture* state_change_fixture = (StateChangeFixture*)fixture; + state_change_fixture->root = null; + state_change_fixture->project_builder = null; +} + +bool document_valid; // if a document is invalid, on_error_occurred will set this variable to false + +void on_error_occurred(string? message) { + Test.message("received error: %s", message); + document_valid = false; +} + +// The actual test code. It builds the given document and then asserts that the result is what +// was expected. +void check_document(void *fixture) { + StateChangeFixture* state_change_fixture = (StateChangeFixture*)fixture; + + Test.message("checking document expecting to be %s", + state_change_fixture->valid ? "valid" : "invalid"); + + Model.XmlElement root = state_change_fixture->root; + Model.ProjectBuilder project_builder = state_change_fixture->project_builder; + + document_valid = true; + project_builder.error_occurred.connect(on_error_occurred); + + // We call check project to check the integrity of the file skeleton. + // If it's good, then we can load all the pieces of the file (library, tracks). + if (project_builder.check_project(root)) + project_builder.build_project(root); + assert(document_valid == state_change_fixture->valid); + Test.message("finished executing check document"); +} + + +class ProjectLoaderSuite : TestSuite { + public ProjectLoaderSuite() { + base("ProjectLoaderSuite"); + + current_document = 0; + project_documents = { + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + +""), + ValidDocument(true, ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(true, "" + + ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, "" + + ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, ""), + ValidDocument(false, "" + + ""), + ValidDocument(false, ""), + ValidDocument(false, "" + +""), + ValidDocument(false, "") + }; + + int length = project_documents.length; + + for (int i = 0; i < length; ++i) { + if (Test.thorough() || project_documents[i].valid) { + add(new TestCase("Document%d".printf(i), state_change_fixture_buildup, + check_document, state_change_fixture_teardown, sizeof(StateChangeFixture))); + } + } + } +} +