Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

Test na null a potenciální fix UTF-8 filtrů #2

Closed
wants to merge 2 commits into from

3 participants

@borekb

Nejsem si úplně jistý, jakou roli plní UTF-8 kódování a dekódování, ale i po odstranění těchto filtrů testy fungují, takže jsem vše hodil do commitu.

borekb added some commits
@borekb borekb Removed UTF-8 encoding/decoding and the letter "Â" from a pattern ins…
…ide removeSoftHyphens(). Not sure why it was there but the tests still pass with this simpler implementation.
c4bccdb
@borekb borekb Can process null input 9579637
@rarous
Owner

Proč by texy měla zpracovávat null? A co undefined? BTW v TDD se řeší hlavně happy day scénáře. Takže řešit null na vstupu v této fázi je premature.

Komentář OK, jen se zeptám: zamítáš tenhle commit, protože je součástí pull requestu, který obsahuje změnu na UTF-16 (kterou chápu, že je potřeba odmítnout), nebo odmítáš přijmout kontrolu na null, i kdyby byla v pull requestu sama?

Owner

Ano, odmítám i tento commit. :) Nepovažuju vracení prázdného stringu na null jako správné chování. Null má svoji semantiku a ta by měla být zachována. Texy.js v tuto chvíli null ani undefined řešit neumí a padá na nich, což je IMO korektní chování.

Pokud by sis rozmyslel, že tento commit odmítáš z principu (Texy.js má spadnout na null), dej vědět, přeimplementoval bych tento commit, aby byl technicky v pořádku.

Owner

Borku, null je něco, co se v JS skoro nevyskytuje. Null musí někdo vytvořit explicitně. Fakt je to case, kterým se nemá cenu zabývat.

Nejde jen o null. Jak jsi třeba psal, je třeba otázka, co má Texy.js udělat s process(0). Právě proto, že se mezními případy nechceš zabývat, ti nabízím, že tu práci udělám. Ale nebudu ji dělat, pokud ji odmítneš, tak proto se ptám. Je to tvoje repo.

Owner

Zatím v tom nevidím žádnou value, až to bude problém při užívání, rád takovou změnu přijmu, do té doby je to zabitej čas, kterej se může věnovat přínosnějším věcem.

@rarous
Owner

Originální implementace Texy! pracuje v UTF8, ECMAScript pracuje v UTF16. Kvůli kompatibilitě a přenositelnosti jsem se rozhodl, že Texy.js bude taky pracovt v UTF8.

@rarous rarous closed this
@stej

Nějako nerozumím, proč je potřeba udržovat tuto kompatibilitu s Texy! Pokud to dobře chápu, je to implementace v PHP. Pokud by někdo použil TexyJs na klientovi a Texy! na serveru, stejně to půjde přes web. Na serveru zřejmě TexyJs a Texy! spolu spouštěny nebudou. Můžeš to nějak vyjasnit?

@rarous
Owner

Jednoduše je to lenost. Chci mít možnost jednoduše překlápět existující patterny. Nevylučuju, že pak konverzi na UTF-8 zrušim a patterny přepíšu, ale to až budu mít pořádnou baterii testů. Dřív ne.

@borekb

Pořádnou baterii testů máš neustále. Ten druhý důvod beru.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Mar 10, 2012
  1. @borekb

    Removed UTF-8 encoding/decoding and the letter "Â" from a pattern ins…

    borekb authored
    …ide removeSoftHyphens(). Not sure why it was there but the tests still pass with this simpler implementation.
  2. @borekb

    Can process null input

    borekb authored
This page is out of date. Refresh to see the latest.
Showing with 12 additions and 21 deletions.
  1. +7 −20 src/texy.js
  2. +5 −1 tests/texyTests.js
View
27 src/texy.js
@@ -1,4 +1,4 @@
-"use strict";
+"use strict";
(function(window, undefined) {
@@ -6,12 +6,11 @@
Texy.prototype.process = function(input) {
return applyFilters(input, [
- Utf8.encode,
+ ensureNotNull,
removeSoftHyphens,
normalize,
parse,
render,
- Utf8.decode
]);
};
@@ -28,8 +27,12 @@
]);
}
+ function ensureNotNull(input) {
+ return input || '';
+ }
+
function removeSoftHyphens(input) {
- return input.replace(/\xC2\xAD/g, '');
+ return input.replace(/\xAD/g, '');
}
function normalizeLineEndings(input) {
@@ -67,22 +70,6 @@
return ['<', node.tag, '>', node.text, '</', node.tag, '>'].join('');
}
- /**
- * @author Jonas Raoni Soares Silva
- * @see http://jsfromhell.com/geral/utf-8
- * @type {Object}
- */
- var Utf8 = {
- encode : function(s) {
- for (var c, i = -1, l = (s = s.split('')).length, o = String.fromCharCode; ++i < l; s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]);
- return s.join('');
- },
- decode : function(s) {
- for (var a, b, i = -1, l = (s = s.split('')).length, o = String.fromCharCode, c = 'charCodeAt'; ++i < l; ((a = s[i][c](0)) & 0x80) && (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ? o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = ''));
- return s.join('');
- }
- };
-
window['Texy'] = Texy;
window['Texy']['normalize'] = normalize;
})(window);
View
6 tests/texyTests.js
@@ -1,4 +1,4 @@
-"use strict";
+"use strict";
(function() {
@@ -6,6 +6,10 @@
var texy = new Texy;
+ it("should process null", function() {
+ expect(texy.process(null)).toBe('')
+ });
+
it("should process empty input", function() {
expect(texy.process('')).toBe('')
});
Something went wrong with that request. Please try again.