diff options
Diffstat (limited to 'src/base/test/colour.cpp')
-rw-r--r-- | src/base/test/colour.cpp | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/src/base/test/colour.cpp b/src/base/test/colour.cpp new file mode 100644 index 0000000..3aa7ba2 --- /dev/null +++ b/src/base/test/colour.cpp @@ -0,0 +1,222 @@ +// -*- c-basic-offset: 4 -*- + + +/* + Rosegarden-4 + A sequencer and musical notation editor. + + This program is Copyright 2000-2003 + Guillaume Laurent <[email protected]>, + Chris Cannam <[email protected]>, + Richard Bown <[email protected]> + + This file is Copyright 2003 + Mark Hymers <[email protected]> + + The moral right of the authors to claim authorship of this work + has been asserted. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +/* + If you compile this to a test program + g++ -o colour -I../ ../Colour.C ../ColourMap.C colour.C + + you can then run it like this: + ./colour > temp.output + + and do a diff to check that it worked: + diff -u temp.output colour.output + + If there are any differences, there's a problem + (or colour.output hasn't been updated when colour.C has been changed) +*/ + +#include "Colour.h" +#include "ColourMap.h" +#include <iostream> + + +using namespace Rosegarden; +using std::cout; +using std::string; + +// Some printing routines + +void printRC(Colour const *temp) +{ + cout << "red: " << temp->getRed() << " green: " << temp->getGreen() << " blue: " << temp->getBlue() << "\n"; +} + +void printSRC(const string *s, const Colour *c) +{ + cout << "name: " << *s << " "; + printRC(c); +} + +void printSIRC(const unsigned int *i, const string *s, const Colour *c) +{ + cout << "index: " << *i << " "; + printSRC(s, c); +} + +void printIteratorContents (ColourMap *input) +{ + RCMap::const_iterator iter = input->begin(); + for ( ; !(iter == input->end()) ; ++iter) + printSIRC(&(iter->first), &(iter->second.second), &(iter->second.first)); +} + +// The main test program +int main() +{ + cout << "TEST: Colour.C\n\n"; + cout << "Can we create an Colour with the right default values?\n"; + Colour *red = new Colour; + printRC(red); + + cout << "Can we set values; green here is invalid - it should be set to 0 instead\n"; + red->setRed(210); + red->setGreen(276); + red->setBlue(100); + + cout << "Testing the copy constructor\n"; + Colour *blue = new Colour(*red); + printRC(blue); + + cout << "Check operator= works\n"; + Colour green; + green = *red; + printRC(&green); + + cout << "Check the setColour routine\n"; + green.setColour(1,2,3); + printRC(&green); + + cout << "Check the getColour routine\n"; + unsigned int r, g, b; + green.getColour(r, g, b); + printRC(&green); + + cout << "\nTEST: ColourMap.C\n\n"; + cout << "Can we create a ColourMap with the right default Colour + String\n"; + ColourMap *map = new ColourMap(); + + cout << "Can we get the default colour back out of it?\n"; + string s1 = map->getNameByIndex(0); + green = map->getColourByIndex(0); + printSRC(&s1, &green); + + cout << "Can we create a ColourMap with a specified default Colour?\n"; + ColourMap *map2 = new ColourMap(*red); + + cout << "Can we get the information back out of it?\n"; + s1 = map2->getNameByIndex(0); + green = map2->getColourByIndex(0); + printSRC(&s1, &green); + + cout << "Can we add a Colour\n"; + s1 = "TEST1"; + green.setColour(100, 101, 102); + map2->addItem(green, s1); + + cout << "Can we get the info back out?\n"; + s1 = ""; + s1 = map2->getNameByIndex(1); + green = map2->getColourByIndex(1); + printSRC(&s1, &green); + + cout << "Add a couple more colours\n"; + s1 = "TEST2"; + green.setColour(101, 102, 103); + map2->addItem(green, s1); + s1 = "TEST3"; + green.setColour(102, 103, 104); + map2->addItem(green, s1); + s1 = "TEST4"; + green.setColour(103, 104, 105); + map2->addItem(green, s1); + + // From an iterator: + // iterator->first ==> Index + // iterator->second.first ==> Colour + // iterator->second.second ==> string + // This rather unwieldy notation is because we store a pair in the map which is made up of a pair + // to start with + printIteratorContents(map2); + + cout << "Now try deleting the third item\n"; + map2->deleteItemByIndex(3); + + // Print the map again + printIteratorContents(map2); + + cout << "Make sure we get false when we try and modify item number 3\n"; + s1 = "NO"; + green.setColour(199,199,199); + bool check = map2->modifyColourByIndex(3, green); + if (check) cout << "WARNING: Managed to modify colour which doesn't exist\n"; + check = map2->modifyNameByIndex(3, s1); + if (check) cout << "WARNING: Managed to modify name which doesn't exist\n"; + + cout << "Check we can modify a colour which *is* there\n"; + s1 = "YES"; + green.setColour(233,233,233); + + check = map2->modifyColourByIndex(4, green); + if (!check) cout << "WARNING: Couldn't modify colour which does exist\n"; + + check = map2->modifyNameByIndex(4, s1); + if (!check) cout << "WARNING: Couldn't modify name which does exist\n"; + + // Print the map again + printIteratorContents(map2); + + cout << "Now try adding another item - it should take the place of the one we removed.\n"; + s1 = "NEW"; + green.setColour(211, 212, 213); + map2->addItem(green, s1); + + // Print the map again + printIteratorContents(map2); + + cout << "Try swapping two items:\n"; + check = map2->swapItems(3, 4); + if (!check) cout << "WARNING: Couldn't swap two items which both exist\n"; + + // Print the map again + printIteratorContents(map2); + + cout << "\nTEST: Generic Colour routines\n\n"; + + cout << "Try getting a combination colour:\n"; + Colour blah = map2->getColourByIndex(0); + Colour blah2 = map2->getColourByIndex(1); + cout << "Original colours:\n"; + printRC(&blah); + printRC(&blah2); + cout << "Combination colour:\n"; + blah = getCombinationColour(blah, blah2); + printRC(&blah); + + // Test the XML output + cout << "\nTEST: XML Output\n\n"; + cout << "For a single colour:\n"; + cout << blah.toXmlString(); + + cout << "For a colourmap:\n"; + cout << map2->toXmlString(std::string("segmentmap")); + + + delete map; + delete map2; + delete red; + delete blue; + + return 0; +} |