var common = require("../casper_lib/common.js"); common.start_and_log_in(); casper.then(function () { casper.test.info("Sending messages"); }); // setup environment: several messages to different topics common.then_send_many([ { stream: "Verona", subject: "copy-paste-subject #1", content: "copy paste test A" }, { stream: "Verona", subject: "copy-paste-subject #1", content: "copy paste test B" }, { stream: "Verona", subject: "copy-paste-subject #2", content: "copy paste test C" }, { stream: "Verona", subject: "copy-paste-subject #2", content: "copy paste test D" }, { stream: "Verona", subject: "copy-paste-subject #2", content: "copy paste test E" }, { stream: "Verona", subject: "copy-paste-subject #3", content: "copy paste test F" }, { stream: "Verona", subject: "copy-paste-subject #3", content: "copy paste test G" }, ]); common.wait_for_receive(function () { common.expected_messages("zhome", [ "Verona > copy-paste-subject #1", "Verona > copy-paste-subject #2", "Verona > copy-paste-subject #3", ], [ "
copy paste test A
", "copy paste test B
", "copy paste test C
", "copy paste test D
", "copy paste test E
", "copy paste test F
", "copy paste test G
", ]); }); casper.then(function () { casper.test.info("Messages were sent successfully"); }); function get_message_node(message) { return $('.message_row .message_content:contains("' + message + '")').get(0); } function copy_messages(start_message, end_message) { return casper.evaluate(function (get_message_node, start_message, end_message) { // select messages from start_message to end_message var selectedRange = document.createRange(); selectedRange.setStart(get_message_node(start_message)); selectedRange.setEnd(get_message_node(end_message)); window.getSelection().removeAllRanges(); window.getSelection().addRange(selectedRange); // Remove existing copy/paste divs, which may linger from the previous // example. (The code clears these out with a zero-second timeout, which // is probably sufficient for human users, but which causes problems here.) $("#copytempdiv").remove(); // emulate copy event $("body").trigger($.Event("keydown", { which: 67, ctrlKey: true })); // find temp div with copied text var temp_div = $("#copytempdiv"); return temp_div.children("p").get().map(function (p) { return p.textContent; }); }, { get_message_node: get_message_node, start_message: start_message, end_message: end_message, }); } // test copying first message from topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test C", "copy paste test C"); var expected_copied_lines = []; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by browser"); }); // test copying last message from topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test E", "copy paste test E"); var expected_copied_lines = []; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by browser"); }); // test copying two first messages from topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test C", "copy paste test D"); var expected_copied_lines = ["Iago: copy paste test C", "Iago: copy paste test D"]; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by custom handler"); }); // test copying all messages from topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test C", "copy paste test E"); var expected_copied_lines = ["Iago: copy paste test C", "Iago: copy paste test D", "Iago: copy paste test E"]; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by custom handler"); }); // test copying last message from previous topic and first message from next topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test B", "copy paste test C"); var expected_copied_lines = [ "Verona > copy-paste-subject #1 Today", "Iago: copy paste test B", "Verona > copy-paste-subject #2 Today", "Iago: copy paste test C", ]; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by custom handler"); }); // test copying last message from previous topic and all messages from next topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test B", "copy paste test E"); var expected_copied_lines = [ "Verona > copy-paste-subject #1 Today", "Iago: copy paste test B", "Verona > copy-paste-subject #2 Today", "Iago: copy paste test C", "Iago: copy paste test D", "Iago: copy paste test E", ]; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by custom handler"); }); // test copying all messages from previous topic and first message from next topic casper.then(function () { var actual_copied_lines = copy_messages("copy paste test A", "copy paste test C"); var expected_copied_lines = [ "Verona > copy-paste-subject #1 Today", "Iago: copy paste test A", "Iago: copy paste test B", "Verona > copy-paste-subject #2 Today", "Iago: copy paste test C", ]; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by custom handler"); }); // test copying message from several topics casper.then(function () { var actual_copied_lines = copy_messages("copy paste test B", "copy paste test F"); var expected_copied_lines = [ "Verona > copy-paste-subject #1 Today", "Iago: copy paste test B", "Verona > copy-paste-subject #2 Today", "Iago: copy paste test C", "Iago: copy paste test D", "Iago: copy paste test E", "Verona > copy-paste-subject #3 Today", "Iago: copy paste test F", ]; casper.test.assertEquals(actual_copied_lines, expected_copied_lines, "Copying was handled by custom handler"); }); // Run the above queued actions. casper.run(function () { casper.test.done(); });