diff --git a/src/Task.cpp b/src/Task.cpp index e763da500..983d56b72 100644 --- a/src/Task.cpp +++ b/src/Task.cpp @@ -133,7 +133,7 @@ Task& Task::operator= (const Task& other) { std::map ::operator= (other); id = other.id; -#ifdef PRODUCT_TASKWARIROR +#ifdef PRODUCT_TASKWARRIOR urgency_value = other.urgency_value; recalc_urgency = other.recalc_urgency; is_blocked = other.is_blocked; diff --git a/src/commands/CmdImport.cpp b/src/commands/CmdImport.cpp index f53947f0f..268264f0e 100644 --- a/src/commands/CmdImport.cpp +++ b/src/commands/CmdImport.cpp @@ -98,121 +98,15 @@ int CmdImport::execute (std::string& output) continue; // Parse the whole thing. - json::value* root = json::parse (object); - if (root->type () == json::j_object) - { - json::object* root_obj = (json::object*)root; - Task task; + Task task (object); - // For each object element... - json_object_iter i; - for (i = root_obj->_data.begin (); - i != root_obj->_data.end (); - ++i) - { - // If the attribute is a recognized column. - Column* col = context.columns[i->first]; - if (col) - { - // Any specified id is ignored. - if (i->first == "id") - ; - - // Urgency, if present, is ignored. - else if (i->first == "urgency") - ; - - // Dates are converted from ISO to epoch. - else if (col->type () == "date") - { - Date d (unquoteText (i->second->dump ())); - task.set (i->first, d.toEpochString ()); - } - - // Tags are an array of JSON strings. - else if (i->first == "tags") - { - json::array* tags = (json::array*)i->second; - json_array_iter t; - for (t = tags->_data.begin (); - t != tags->_data.end (); - ++t) - { - json::string* tag = (json::string*)*t; - task.addTag (tag->_data); - } - } - - // Other types are simply added. - else - task.set (i->first, unquoteText (i->second->dump ())); - } - - // Several attributes do not have columns. - // mask - // imask - // parent - // UDA orphans - else - { - // Annotations are an array of JSON objects with 'entry' and - // 'description' values and must be converted. - if (i->first == "annotations") - { - std::map annos; - - json::array* atts = (json::array*)i->second; - json_array_iter annotations; - for (annotations = atts->_data.begin (); - annotations != atts->_data.end (); - ++annotations) - { - json::object* annotation = (json::object*)*annotations; - json::string* when = (json::string*)annotation->_data["entry"]; - json::string* what = (json::string*)annotation->_data["description"]; - - if (! when) - throw format (STRING_TASK_NO_ENTRY, *line); - - if (! what) - throw format (STRING_TASK_NO_DESC, *line); - - std::string name = "annotation_" + Date (when->_data).toEpochString (); - - annos.insert (std::make_pair (name, what->_data)); - } - - task.setAnnotations (annos); - } - - // Attributes without columns are simply added. - else if (i->first == "parent" || - i->first == "mask" || - i->first == "imask") - { - task.set (i->first, unquoteText (i->second->dump ())); - } - - // UDA Orphan - must be preserved. - else - { - task.set (i->first, unquoteText (i->second->dump ())); - } - } - } - - context.tdb2.add (task); - ++count; - std::cout << " " - << task.get ("uuid") - << " " - << task.get ("description") - << "\n"; - } - else - throw format (STRING_CMD_IMPORT_NOT_JSON, *line); - - delete root; + context.tdb2.add (task); + ++count; + std::cout << " " + << task.get ("uuid") + << " " + << task.get ("description") + << "\n"; } } diff --git a/test/.gitignore b/test/.gitignore index 1ab56e411..f7817e62c 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -19,6 +19,7 @@ path.t rx.t t.t t2.t +t3.t taskmod.t tdb2.t text.t diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 3950a31d9..ce25cbe97 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -8,8 +8,8 @@ include_directories (${CMAKE_SOURCE_DIR} set (test_SRCS autocomplete.t color.t config.t date.t directory.t dom.t duration.t file.t i18n.t json.t list.t msg.t nibbler.t path.t - rx.t t.t t2.t taskmod.t tdb2.t text.t uri.t utf8.t util.t view.t - width.t json_test) + rx.t t.t t2.t t3.t taskmod.t tdb2.t text.t uri.t utf8.t util.t + view.t width.t json_test) message ("-- Configuring run_all") if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) diff --git a/test/t3.t.cpp b/test/t3.t.cpp new file mode 100644 index 000000000..6f680deea --- /dev/null +++ b/test/t3.t.cpp @@ -0,0 +1,48 @@ +//////////////////////////////////////////////////////////////////////////////// +// taskwarrior - a command line task list manager. +// +// Copyright 2006-2013, Paul Beckingham, Federico Hernandez. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +// http://www.opensource.org/licenses/mit-license.php +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include + +Context context; + +//////////////////////////////////////////////////////////////////////////////// +int main (int argc, char** argv) +{ + UnitTest t (1); + + bool good = true; + try {Task t_ff1 ("{}");} + catch (const std::string& e){t.diag (e); good = false;} + t.ok (good, "Task::Task ('{}')"); + + return 0; +} + +////////////////////////////////////////////////////////////////////////////////