From 60fce196c7f34d751f556485195c3bb1506a1c8b Mon Sep 17 00:00:00 2001
From: Robin Ward
"); - }); - - it("can nest quotes", function() { - expect(formatQuote("[quote=\"eviltrout, post:1, topic:1\"]abc[quote=\"eviltrout, post:2, topic:2\"]nested[/quote][/quote]")). - toBe("
\n"); - }); - - it("can handle more than one quote", function() { - expect(formatQuote("before[quote=\"eviltrout, post:1, topic:1\"]first[/quote]middle[quote=\"eviltrout, post:2, topic:2\"]second[/quote]after")). - toBe("before
first\n
middle
second\n
after"); - }); - - describe("extractQuotes", function() { - - var extractQuotes = Discourse.BBCode.extractQuotes; - - it("returns an object a template renderer", function() { - var q = "[quote=\"eviltrout, post:1, topic:2\"]hello[/quote]"; - var result = extractQuotes(q + " world"); - - expect(result.text).toBe(md5(q) + "\n world"); - expect(result.template).not.toBe(null); - }); - - }); - - describe("buildQuoteBBCode", function() { - - var build = Discourse.BBCode.buildQuoteBBCode; - - var post = Discourse.Post.create({ - cooked: "
lorem ipsum
", - username: "eviltrout", - post_number: 1, - topic_id: 2 - }); - - it("returns an empty string when contents is undefined", function() { - expect(build(post, undefined)).toBe(""); - expect(build(post, null)).toBe(""); - expect(build(post, "")).toBe(""); - }); - - it("returns the quoted contents", function() { - expect(build(post, "lorem")).toBe("[quote=\"eviltrout, post:1, topic:2\"]\nlorem\n[/quote]\n\n"); - }); - - it("trims white spaces before & after the quoted contents", function() { - expect(build(post, " lorem ")).toBe("[quote=\"eviltrout, post:1, topic:2\"]\nlorem\n[/quote]\n\n"); - }); - - it("marks quotes as full when the quote is the full message", function() { - expect(build(post, "lorem ipsum")).toBe("[quote=\"eviltrout, post:1, topic:2, full:true\"]\nlorem ipsum\n[/quote]\n\n"); - }); - - it("keeps BBCode formatting", function() { - expect(build(post, "**lorem** ipsum")).toBe("[quote=\"eviltrout, post:1, topic:2, full:true\"]\n**lorem** ipsum\n[/quote]\n\n"); - }); - - }); - - }); - -}); diff --git a/test/javascripts/components/bbcode_test.js b/test/javascripts/components/bbcode_test.js index e0fef9c33d..ee8253329c 100644 --- a/test/javascripts/components/bbcode_test.js +++ b/test/javascripts/components/bbcode_test.js @@ -1,9 +1,9 @@ -/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */ +/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true present:true md5:true */ module("Discourse.BBCode"); var format = function(input, expected, text) { - equal(Discourse.BBCode.format(input), expected, text); + equal(Discourse.BBCode.format(input, {lookupAvatar: false}), expected, text); } test('basic bbcode', function() { @@ -36,4 +36,74 @@ test('tags with arguments', function() { format("[email=eviltrout@mailinator.com]evil trout[/email]", "evil trout", "supports [email] with a title"); format("[u][i]abc[/i][/u]", "abc", "can nest tags"); format("[b]first[/b] [b]second[/b]", "first second", "can bold two things on the same line"); -}); \ No newline at end of file +}); + + +test("quotes", function() { + + var post = Discourse.Post.create({ + cooked: "lorem ipsum
", + username: "eviltrout", + post_number: 1, + topic_id: 2 + }); + + var formatQuote = function(val, expected, text) { + equal(Discourse.BBCode.buildQuoteBBCode(post, val), expected, text); + } + + formatQuote(undefined, "", "empty string for undefined content"); + formatQuote(null, "", "empty string for null content"); + formatQuote("", "", "empty string for empty string content"); + + formatQuote("lorem", "[quote=\"eviltrout, post:1, topic:2\"]\nlorem\n[/quote]\n\n", "correctly formats quotes"); + + formatQuote(" lorem \t ", + "[quote=\"eviltrout, post:1, topic:2\"]\nlorem\n[/quote]\n\n", + "trims white spaces before & after the quoted contents"); + + formatQuote("lorem ipsum", + "[quote=\"eviltrout, post:1, topic:2, full:true\"]\nlorem ipsum\n[/quote]\n\n", + "marks quotes as full when the quote is the full message"); + + formatQuote("**lorem** ipsum", + "[quote=\"eviltrout, post:1, topic:2, full:true\"]\n**lorem** ipsum\n[/quote]\n\n", + "keeps BBCode formatting"); + +}); + +test("quote formatting", function() { + + // TODO: This HTML matching is quite ugly. + format("[quote=\"eviltrout, post:1, topic:1\"]abc[/quote]", + "abc\n
", + "renders quotes properly"); + + format("[quote=\"eviltrout, post:1, topic:1\"]abc[quote=\"eviltrout, post:2, topic:2\"]nested[/quote][/quote]", + "
abc\n\n \n\n \n \n eviltrout\n said:\n\nnested\n
", + "can nest quotes"); + + format("before[quote=\"eviltrout, post:1, topic:1\"]first[/quote]middle[quote=\"eviltrout, post:2, topic:2\"]second[/quote]after", + "before
first\n
middle
second\n
after",
+ "can handle more than one quote");
+
+});
+
+
+test("extract quotes", function() {
+
+ var q = "[quote=\"eviltrout, post:1, topic:2\"]hello[/quote]";
+ var result = Discourse.BBCode.extractQuotes(q + " world");
+
+ equal(result.text, md5(q) + "\n world");
+ present(result.template);
+
+});
+
diff --git a/test/javascripts/mixins/presence_test.js b/test/javascripts/mixins/presence_test.js
index f6e0816b00..abaf493c0e 100644
--- a/test/javascripts/mixins/presence_test.js
+++ b/test/javascripts/mixins/presence_test.js
@@ -7,7 +7,7 @@ var testObj = Em.Object.createWithMixins(Discourse.Presence, {
nonEmptyString: "Evil Trout",
emptyArray: [],
nonEmptyArray: [1, 2, 3],
- age: 34,
+ age: 34
});
test("present", function() {
@@ -18,7 +18,6 @@ test("present", function() {
ok(testObj.present('age'), "integers are present");
});
-
test("blank", function() {
ok(testObj.blank('emptyString'), "Empty strings are blank");
ok(!testObj.blank('nonEmptyString'), "Non empty strings are not blank");
diff --git a/test/javascripts/mixins/selected_posts_count_test.js b/test/javascripts/mixins/selected_posts_count_test.js
new file mode 100644
index 0000000000..b6450b4ada
--- /dev/null
+++ b/test/javascripts/mixins/selected_posts_count_test.js
@@ -0,0 +1,34 @@
+/*global module:true test:true ok:true visit:true expect:true exists:true count:true equal:true */
+module("Discourse.SelectedPostsCount");
+
+var buildTestObj = function(params, topicParams) {
+ return Ember.Object.createWithMixins(Discourse.SelectedPostsCount, params || {});
+};
+
+test("without selectedPosts", function () {
+ var testObj = buildTestObj();
+
+ equal(testObj.get('selectedPostsCount'), 0, "No posts are selected without a selectedPosts property");
+
+ testObj.set('selectedPosts', []);
+ equal(testObj.get('selectedPostsCount'), 0, "No posts are selected when selectedPosts is an empty array");
+});
+
+test("with some selectedPosts", function() {
+ var testObj = buildTestObj({ selectedPosts: [Discourse.Post.create()] });
+ equal(testObj.get('selectedPostsCount'), 1, "It returns the amount of posts");
+});
+
+test("when all posts are selected and there is a posts_count", function() {
+ var testObj = buildTestObj({ allPostsSelected: true, posts_count: 1024 });
+ equal(testObj.get('selectedPostsCount'), 1024, "It returns the posts_count");
+});
+
+test("when all posts are selected and there is topic with a posts_count", function() {
+ var testObj = buildTestObj({
+ allPostsSelected: true,
+ topic: Discourse.Topic.create({ posts_count: 3456 })
+ });
+
+ equal(testObj.get('selectedPostsCount'), 3456, "It returns the topic's posts_count");
+});
diff --git a/vendor/assets/javascripts/run-qunit.js b/vendor/assets/javascripts/run-qunit.js
new file mode 100644
index 0000000000..469c770591
--- /dev/null
+++ b/vendor/assets/javascripts/run-qunit.js
@@ -0,0 +1,122 @@
+// PhantomJS QUnit Test Runner
+
+/*globals QUnit phantom*/
+
+var args = phantom.args;
+if (args.length < 1 || args.length > 2) {
+ console.log("Usage: " + phantom.scriptName + "