Source

resimar / test.py

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
# -*- coding: utf-8 -*-
import sys
sys.path.insert(1, '.')
from resimar import resimar 
# from BeautifulSoup import BeautifulSoup
import unittest


def nl(string):
	"""normalize"""
	output = string.strip(' \n\r')
	output = string.replace('\n', '')
	return output

def ct(string, tag):
	"""count tag"""
	count = 0
	count += string.count('<%s>' % tag)
	count += string.count('</%s>' % tag)
	return count


class SMTestCase(unittest.TestCase):
	
	# =================
	# = general tests =
	# =================
	
	def test_none(self):
		self.failUnlessEqual(resimar(None), u'')

	
	def test_unicode(self):
		self.failUnlessEqual(nl(resimar('äöü')), u'<p>äöü</p>')
		self.failUnlessEqual(nl(resimar(u'äöü')), u'<p>äöü</p>')

	
	def test_blocksplitting(self):
		"""
		tests if blocksplitting does what its intended to do
		"""
		pairs = (
			(u"""Nulla sed eros id neque dictum fringilla.\n\nMorbi eros felis, congue nec, pharetra nec, cursus a, odio.\n\nUt pharetra tincidunt eros.""", 6),
			(u"para1\n\npara2\n\npara3", 6),
			(u"para10\r\n\r\npara20\r\n\r\npara30\r\n\r\n", 6),
			(u'nulla  \n\n  blublu \n\n blarg', 6)
		)
		for s, c in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(ct(output, 'p'), c, output)
			output = resimar(s)
			self.failUnlessEqual(ct(output, 'p'), c)


	# ================
	# = markup tests =
	# ================

	def test_bold_double(self):
		pairs = (
			(u'**ich bün fetter Text**', 2),
			(u'**das üst ebenfalls** fötter text', 2),
			(u'das is **aüch fetter text**', 2),
			(u'auch **däs ist ziemlich** fätter text', 2),
			(u"""
			**wow**

			**wow äöü**
			""", 4),
			("""
			**wow

			**wow**
			""", 2)
		)
		for s, c in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(ct(output, 'b'), c)
			output = resimar(s)
			self.failUnlessEqual(ct(output, 'b'), c)


	def test_delete_double(self):
		pairs = (
			(u'--ich bün fetter Text--', 2),
			(u'--das üst ebenfalls-- fötter text', 2),
			(u'das is --aüch fetter text--', 2),
			(u'auch --däs ist ziemlich-- fätter text', 2),
			(u"""
			--wow--

			--wow äöü--
			""", 4),
			("""
			--wow

			--wow--
			""", 2)
		)
		for s, c in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(ct(output, 'del'), c)
			output = resimar(s)
			self.failUnlessEqual(ct(output, 'del'), c)


	def test_italic_double(self):
		pairs = (
			(u'//ich bün fetter Text//', 2),
			(u'//das üst ebenfalls// fötter text', 2),
			(u'das is //aüch fetter text//', 2),
			(u'auch //däs ist ziemlich// fätter text', 2),
			(u"""
			//wow//

			//wow äöü//
			""", 4),
			("""
			//wow

			//wow//
			""", 2)
		)
		for s, c in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(ct(output, 'i'), c)
			output = resimar(s)
			self.failUnlessEqual(ct(output, 'i'), c)


	def test_underline_double(self):
		pairs = (
			(u'__ich bün fetter Text__', 2),
			(u'__das üst ebenfalls__ fötter text', 2),
			(u'das is __aüch fetter text__', 2),
			(u'auch __däs ist ziemlich__ fätter text', 2),
			(u"""
			__wow__

			__wow äöü__
			""", 4),
			("""
			__wow

			__wow__
			""", 2)
		)
		for s, c in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(ct(output, 'u'), c)
			output = resimar(s)
			self.failUnlessEqual(ct(output, 'u'), c)


	# =================
	# = linkish tests =
	# =================

	def test_urlprase(self):
		"""
		tests to check parsing of urls
		"""
		pairs = (
			(u'"Marketing.pdf"',
				u'<p>"Marketing.pdf"</p>'
			),
			(u'http://www.mediamanual.at/mediamanual/workshop/kommunikation/bedeutung/icon01.php',
				u'<p><a href="http://www.mediamanual.at/mediamanual/workshop/kommunikation/bedeutung/icon01.php">http://www.mediamanual.at/mediamanual/workshop/kom[...]</a></p>'
			),
			(u'http://regexlib.com/REDetails.aspx?regexp_id=1004',
				u'<p><a href="http://regexlib.com/REDetails.aspx?regexp_id=1004">http://regexlib.com/REDetails.aspx?regexp_id=1004</a></p>'
			),
			(u'http://doodle.ch/8fea8hz9ptz47hwk',
				u'<p><a href="http://doodle.ch/8fea8hz9ptz47hwk">http://doodle.ch/8fea8hz9ptz47hwk</a></p>'
			),
			(u'http://forums.mozillazine.org/viewtopic.php?f=23&t=640174&st=0&sk=t&sd=a&start=285',
				u'<p><a href="http://forums.mozillazine.org/viewtopic.php?f=23&t=640174&st=0&sk=t&sd=a&start=285">http://forums.mozillazine.org/viewtopic.php?f=23&t[...]</a></p>'
			),
			(u'http://www.our-picks.com/archives/2007/01/30/google-search-urls-revealed-or-how-to-create-your-own-search-url/',
				u'<p><a href="http://www.our-picks.com/archives/2007/01/30/google-search-urls-revealed-or-how-to-create-your-own-search-url/">http://www.our-picks.com/archives/2007/01/30/googl[...]</a></p>'
			),
			(u'http://doodle.ch/8fea8hz9ptz47hwk',
				u'<p><a href="http://doodle.ch/8fea8hz9ptz47hwk">http://doodle.ch/8fea8hz9ptz47hwk</a></p>'
			),
			(u'http://doodle.ch/8fea8hz9ptz47hwk',
				u'<p><a href="http://doodle.ch/8fea8hz9ptz47hwk">http://doodle.ch/8fea8hz9ptz47hwk</a></p>'
			),
			(u'http://doodle.ch/8fea8hz9ptz47hwk',
				u'<p><a href="http://doodle.ch/8fea8hz9ptz47hwk">http://doodle.ch/8fea8hz9ptz47hwk</a></p>'
			),
		)
		for s, o in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(nl(output), o)
			output = resimar(s)
			self.failUnlessEqual(nl(output), o)


	def test_emailparse(self):
		"""
		tests to check email parsing
		"""
		pairs = (
			(u'doerthe-beckert@gmx.de', u'<p><a href="mailto:doerthe-beckert@gmx.de">doerthe-beckert@gmx.de</a></p>'),
			(u'andrea.broenner(at)gmx.de', u'<p>andrea.broenner(at)gmx.de</p>'),
			(u'(mbierhahn@fh-hof.de)', u'<p>(<a href="mailto:mbierhahn@fh-hof.de">mbierhahn@fh-hof.de</a>)</p>')
		)
		for s, o in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(nl(output), o)
			output = resimar(s)
			self.failUnlessEqual(nl(output), o)
		

	# ==============
	# = list tests =
	# ==============

	def test_olist(self):
		pairs = (
			(u'# sdfsdf', 2, 2),
			(u"""# sdfol\n# sdfol\n# sdfol\n""", 2, 6),
			(u"""#  sdfol\n  # sdfol\n  #   sdfol\n""", 2, 6),
		)
		for s, c, cc in pairs:
			output = resimar(s, tidy=False)
			self.failUnlessEqual(ct(output, 'ol'), c)
			self.failUnlessEqual(ct(output, 'li'), cc)
			# print output
			output = resimar(s)
			self.failUnlessEqual(ct(output, 'ol'), c)
			self.failUnlessEqual(ct(output, 'li'), cc, output)


	def test_ulist(self):
		pairs = (
			(u'- blub', 2, 2),
			(u"""* sdf\n* sdf\n* sdf""", 2, 6),
			(u"""\n- sdfsdf\n- sdfsdf\n- sdfsdf\n""", 2, 6),
			(u"""Systemvoraussetzungen

			 * Windows 98SE/ME/2000 und XP
			""", 2, 2),
			(u'  * Intuos3 A5 Stifttablett\n    * Intuos3 Grip Pen\n    * Intuos3 5-Tasten-Maus', 2, 6),
			(u'''* Intuos3 A5 Stifttablett
    * Intuos3 Grip Pen''', 2, 4),
		)
		for s, c, cc in pairs:
			output = resimar(s, tidy=False)
			# print output
			self.failUnlessEqual(ct(output, 'ul'), c)
			self.failUnlessEqual(ct(output, 'li'), cc)
			output = resimar(s)
			# print output
			self.failUnlessEqual(ct(output, 'ul'), c)
			self.failUnlessEqual(ct(output, 'li'), cc)

	
	def test_list_markup(self):
		output = resimar(u'- **bold**', tidy=False)
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'b'), 2)
		output = resimar(u'- **bold**')
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'b'), 2)

		output = resimar(u'- //emphasized//', tidy=False)
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'i'), 2)
		output = resimar(u'- //emphasized//')
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'i'), 2)

		output = resimar(u'- --strikethrough--', tidy=False)
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'del'), 2)
		output = resimar(u'- --strikethrough--')
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'del'), 2)

		output = resimar(u'- __underline__', tidy=False)
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'u'), 2)
		output = resimar(u'- __underline__')
		self.failUnlessEqual(ct(output, 'ul'), 2)
		self.failUnlessEqual(ct(output, 'li'), 2)
		self.failUnlessEqual(ct(output, 'u'), 2)
		

	# =======================
	# = special block tests =
	# =======================

	def test_single_code(self):
		pairs = (
			(u"""
			code:c
			def test_blockspliting(self):
				pairs = (
					(bs_s1, bs_r1),
					(bs_s2, bs_r2),
					(bs_s3, bs_r3),
				)
				for s, r in pairs:
					self.failUnlessEqual(resimar(s), r)
			:code
			""", 1, 2),
			(u'code:\ndef blockstring(self):\n:code', 0, 2),
		)
		for s, c, cc in pairs:
			output = resimar(s, tidy=False)
			print output
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'code'), cc)
			# print 'dbg', output.split('\n')[-3:-2], u':code'
			self.failIf(output.count(u':code') > 0)
			# output = resimar(s)
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'code'), cc)
			self.failIf(output.count(u':code') > 0)
			

	def test_multi_code(self):
		self.fail('this test doesnt work yet')
		pairs = (
			(u'code:c\nline1\nline2\n\nline3\nline4\n:code', 1, 2),
		)
		for s, c, cc in pairs:
			output = resimar(s, tidy=False)
			print output
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'code'), cc)
			print 'dbg', output.split('\n')[-3:-2]
			self.failIf(output.count(u':code') > 0)
			# output = resimar(s)
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'code'), cc)
			self.failIf(output.count(u':code') > 0)

		
	def test_single_quote(self):
		pairs = (
			(u"""
			quote:
			this be quotetext
			""", 0, 2, 2),
			(u"""
			quote:
			this be quotetext
			:quote
			""", 0, 2, 2),
			(u'quote:\nblargh\n:quote', 0, 2, 2),
			(u'quote:blubber\nbleargh\n', 1, 2, 2),
			(u'quote: blubber\nbleargh\n', 1, 2, 2),
		)
		for s, c, cc, ccc in pairs:
			output = resimar(s, tidy=False)
			print output
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'blockquote'), cc)
			self.failUnlessEqual(ct(output, u'p'), ccc)
			self.failIf(output.count(u':quote') > 0)
			output = resimar(s)
			print output
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'blockquote'), cc)
			self.failUnlessEqual(ct(output, u'p'), ccc)
			self.failIf(output.count(u':quote') > 0)
			

	def test_multi_quote(self):
		self.fail('this test doesnt work yet')
		pairs = (
			(u'code:c\nline1\nline2\n\nline3\nline4\n:code', 1, 2),
		)
		for s, c, cc in pairs:
			output = resimar(s, tidy=False)
			print output
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'code'), cc)
			print 'dbg', output.split('\n')[-3:-2]
			self.failIf(output.count(u':quote') > 0)
			# output = resimar(s)
			self.failUnlessEqual(ct(output, u'div'), c)
			self.failUnlessEqual(ct(output, u'code'), cc)
			self.failIf(output.count(u':quote') > 0)


# ================================
# = long texts for manual review =
# ================================

text1 = u"""
ich bin __lustiger blabla__ text__ der=-- zum --testen gut is.
ich hab **auch //mehere** zeilen//.

am ende is _fett_

ich kann auch /einfache/ _formats_ auf einzelne wörter machen
aber/ich/kann/nicht/sowas/machen

quote:
blub die bla

quote:"blub"
blargh
:quote

code:c
int a = 1;
int b = 2;
if a > b:
<script>
:code



code:java
blargh

quote:jo dude
ich war ärster
und zweiter auch
:quote

* blargh die blub
hahah blub

* sdfsdf
sdfsfsdf
sdfsdf
* sdfsdfsdf
* sdfsdfsdf
sdfsdf

das is //auch// zum testen gut.
<script type="javascript"></script>

sdfsdsdf http://google.com

http://google.com

http://hh-1hallo.msn.blabla.com:80800/test/test/test.aspx?dd=dd&id=dki

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss
"""
text2 = u"""
Hallo zusammen,

also habe mir vor 3Monaten das von Herrn Schwarzenbach
gepriesene Graphik Tablett von Wacom zugelegt,
da er es als sehr sinnvoll für die Photoshop Übungen hält.

Nachdem ich das Semester allerdings nun beendet habe
und keine Photoshop "Vorlesungen" mehr habe, ist es für
meinen unregelmäßigen Gebrauch einfach schon zu schade.
Aus diesem Grund suche ich nun einen Nachbesitzer für dieses
Schmuckstück.

Nachfolgend findet ihr die Eckdaten des Produkts,
es ist wie gesagt noch in Top Zustand durch den relativ
kurzen Zeitraum in dem ich es erst besitze.
Die Quittung von Herr Schwarzenbach ist natürlich dann
beiligend für eventuelle spätere Garantieansprüche.

Bei Interesse einfach in diesem Thread posten und dann 
finden wir bestimmt eine Einigung.

PS: Ich habe durch Herr Schwarzenbach das Tablett für den vergünstigten Einkaufspreis von 290€ bekommen. Klar dass ich 
dann diesen Preis nicht vollständig wiederbekommen werde.

Zum Vergleich mal Preise von Onlineshops derzeit:
[url]
http://www.rockbottom.de/Preisvergleich/Computer/Komponenten/Eingabeger%C3%A4te/Grafiktabletts/Wacom/Wacom_INTUOS3_A5_USB.html
[/url]


Bei einem Arbeitsbereich von 203 x 152 mm passt das neue Intuos3 A5 problemlos auf jeden Schreibtisch oder in Ihre Aktentasche – damit wird es zum perfekten Begleiter für Nutzer von Notebook-Computern. Es hat damit die perfekte Größe für alle, deren Ideen größer sind als ihre Schreibtische.

Wie alle Intuos3-Stifttabletts enthält das Intuos3 A5 einen Intuos3 Grip Pen (inclusive der Stroke-Pen- und Felt-Pen-Spitze, die Intuos3 5-Tasten-Maus sowie die ExpressKeys und die Touch Strips auf beiden Seiten des Tabletts.
	
Funktionen
	
Druckempfindlich mit 1024 Stufen
Erzeugen Sie natürlich wirkende Stift-, Pinsel- und Radierstriche.

Neigungsempfindlichkeit
Neigen Sie Ihr Eingabegerät in eine beliebige Richtung, und erzeugen Sie damit natürlich wirkende Stift-, Pinsel- und Radierstriche.

Rotationserkennung
Einige Eingabegeräte lassen sich um die Achse drehen: Mit Hilfe der Rotationserkennung kann das Intuos3 diese Drehung wahrnehmen und in entsprechenden Programmen wie z.B. Painter 9 als rotierenden Pinselstrich umsetzen.

Tool ID
Mit Tool ID kann jedes Intuos3-Eingabegerät für jede Software individuell programmiert und konfiguriert werden. Die gespeicherten Einstellung werden automatisch aktiviert, sobald die Software gestartet wird.

ExpressKeys
Die ExpressKeys sind eine Reihe von Tasten die links und rechts von der aktiven Fläche angeordnet sind. Weisen Sie Ihre bevorzugen Tastenkürzel oder Makros diesen Tasten zu und vergessen Sie danach Ihre Tastatur.

Touch Strip
Mit dem neu entwickelten Touch Strip können Sie Ihre Finger direkt auf dem Tablett benutzen – ähnlich einem Touchpad eines Notebook-Computers. Zoomen Sie mit Adobe Photoshop in Ihre Bilder hinein und heraus durch einen einfachen Wisch mit Ihrem Finger. Und falls Sie lieber mit dem Stift arbeiten – auch den können sie auf dem Touch Strip benutzen.

Absolute Positionierung
Das Ende eines Mauspads wird Sie nie wieder aufhalten – die Wacom-Stifttabletts arbeiten mit absoluter Positionierung, wobei die aktive Fläche Ihren kompletten Bildschirm repräsentiert

Radierer
Korrigieren Sie Fehler ganz einfach: Sie müssen nur den Stift umdrehen!

Ohne Kabel und Batterie
Alle Eingabegeräte kommen ohne Kabel und Batterie aus – das Tablett versorgt die Eingabegeräte mit der nötigen Energie.

Plug & Play-Installation
Das Intuos3-Stifttablett-System lässt sich schnell und unkompliziert installieren und ist mit all Ihrer Software kompatibel

Wacom Stifttechnologie
Die von Wacom patentierte kabel- und batterielose Stifttechnologie bietet Ihnen ein hochwertiges, zuverlässiges Produkt mit einem Minimum an Pflegeaufwand. Diese Technologie gewährleistet die hohe Produktqualität vom Weltmarktführer für stiftbasierte Eingabelösungen.
	
Packungsinhalt

    * Intuos3 A5 Stifttablett
    * Intuos3 Grip Pen
    * Intuos3 5-Tasten-Maus
    * Standard-Stiftspitzen (3x)
    * Stroke-Pen-Stiftspitze (1x)
    * Felt-Pen-Stiftspitze (1x)
    * Stifthalter
    * Treiber-CD-ROM (Treiber, Handbuch in englisch, deutsch, französisch, italienisch, spanisch und niederländisch)
    * Corel Painter Essentials2 CD-ROM (in englisch, deutsch, französisch)
    * Kurzinstallationsanleitung

	
Systemvoraussetzungen

    * Windows 98SE/ME/2000 und XP
    * MacOS X 10.2.6 oder höher
    * CD-ROM-Laufwerk
    * Aktiver USB-Anschluss

	
Technische Daten

    * Abmessungen (H x T x B): 345 mm x 262 mm x 13 mm
    * Gewicht: 1,0 kg
    * Schnittstelle: USB
    * Technologie: Elektromagnetische Resonanztechnologie
    * Auflösung (pro Punkt): 0,005 mm (5.080 Linien pro Zoll)
    * Neigungssensitivität: ± 60°
    * Maximale Erkennungshöhe (Stift): 6 mm
    * Tablet Keys / ExpressKeys: 8, 4 auf beiden Seiten des Tabletts
    * Touch-Strip-Regler: 2, auf beiden Seiten des Tabletts
"""
text3 = u"""
Projektname: Theater-Theater\r
Author: Andrea Heinze\r
\r
* Theaterfestpieltag in der FH-Hof\r
* sozialkritische, kurze Stücke\r
* Akteure sind die Studenten PM 2 und freiwillige\r
* Zusammenarbeit mit Theater Hof\r
* Mitte der Veranstaltung ein Buffet\r
"""
text4 = u"""
Projektname: Theater-Theater
Author: Andrea Heinze

* Theaterfestpieltag in der FH-Hof
* sozialkritische, kurze Stücke
* Akteure sind die Studenten PM 2 und freiwillige
* Zusammenarbeit mit Theater Hof
* Mitte der Veranstaltung ein Buffet

- Theaterfestpieltag in der FH-Hof
- sozialkritische, kurze Stücke
- Akteure sind die Studenten PM 2 und freiwillige
- Zusammenarbeit mit Theater Hof
- Mitte der Veranstaltung ein Buffet

# Theaterfestpieltag in der FH-Hof
# sozialkritische, kurze Stücke
# Akteure sind die Studenten PM 2 und freiwillige
# Zusammenarbeit mit Theater Hof
# Mitte der Veranstaltung ein Buffet

* Theaterfestpieltag in der FH-Hof
- Theaterfestpieltag in der FH-Hof
# Akteure sind die Studenten PM 2 und freiwillige
* Zusammenarbeit mit Theater Hof
- Mitte der Veranstaltung ein Buffet
"""
text5 = u"""* Theaterfestpieltag in der FH-Hof\r\n* sozialkritische, kurze Stücke\r\n* Akteure sind die Studenten PM 2 und freiwillige\r\n* Zusammenarbeit mit Theater Hof\r\n* Mitte der Veranstaltung ein Buffet\r\n"""
text6 = u"""sdfsdf\r\n\r\n    - sdfsdfsdf\r\n    - sdfsfsdf\r\n    - 234234\r\n    - 34234\r\n\r\n"""
text7 = u"""sdfsdf\r\n\r\n    * sdfsdfsdf\r\n    * sdfsfsdf\r\n    - 234234\r\n    - 34234\r\n\r\n"""
text8 = u"""- sdfsdfsdfsdfsdfsdf\r\nsdflkjsdlfjsldfjsdlfkj\nsdflkjsdflkjsdlfjsdlf\r\nsdlfkjsldkfjlsdkf"""
text9 = u"""# sdfsdfsdfsdfsdfsdf\r\n# sdflkjsdlfjsldfjsdlfkj\nsdflkjsdflkjsdlfjsdlf\r\nsdlfkjsldkfjlsdkf"""
text10 = u"""
sdf

    * Intuos3 A5 Stifttablett
    * Intuos3 Grip Pen
    * Intuos3 5-Tasten-Maus
    * Standard-Stiftspitzen (3x)
    * Stroke-Pen-Stiftspitze (1x)
    * Felt-Pen-Stiftspitze (1x)
    * Stifthalter
    * Treiber-CD-ROM (Treiber, Handbuch in englisch, deutsch, französisch, italienisch, spanisch und niederländisch)
    * Corel Painter Essentials2 CD-ROM (in englisch, deutsch, französisch)
    * Kurzinstallationsanleitung
"""
text11 = u"""
- --registrierung -> link für aktivierung hat nicht funktioniert--
- --registrierung -> benutzernamen in mail einfügen--
- --wenn nicht angemeldet -> "dein profil" -> toter link--
- --css für fehlermeldung optimieren--
- --umbruchfehler: meilensteinschmiede--
- --dashboard: erstellt von -> name wird nicht angezeigt--
- --dein profil: vorname und nachname wir nicht gespeichert!--
- --im dashboard werden nicht die letzten drei milestones eingetragen, sondern nach ablaufdatum, ist das ok?--
- --projekt -> mitarbeiter -> profile der mitarbeiter werden nicht korrekt angezeigt--
- --Wenn man den Status eines Meilensteines bearbeiten möchte, kann man die 4 Zustände wählen UND als erstes "die Linie". Sollte meiner Meinung nach komplett entfernt werde, so dass lediglich R/G/G zur Auswahl steht...--
das is entweder ein django bug der inzwischen behoben wurde oder eine technische unzulaenglichkeit weil varchar fehlder nie null sein koennen
- --Profil: Bei der Telefonnummer lassen sich Buchstaben eingeben.--
is den aufwand nich wert :)
- --Milestones-Schmiede-anlegen: Titel evtl auf Buchstabenanzahl beschränken?--
die meisten sachen sind jetz max 50 zeichen lang
- To-Do evtl ebenfalls zu lang...-> Verzehrt die Tabellen am Dashboard (Datum).
- "dein profil" -> möglichkeit passwort zu ändern
- login -> passwort vergessen? was dann?
- nach login -> begrüßungstext einfügen, vielleicht schon testprojekt vorhanden?
- link für about-seite geht ab
- impressum fehlt
- vielleicht doch möglichkeit projekte anzulegen
- status von todos kann nicht mehr geändert werden
- soll man projekte verlassen können?
- Im About-Bereich und wahrscheinlich in jedem Bereich der viel Inhalt enthält, fehlt unten der grüne footer-Bereich.
"""

print resimar(text11)

if __name__ == '__main__': unittest.main()