uttk 0.3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. data/AUTHORS +36 -0
  2. data/COPYING +18 -0
  3. data/ChangeLog +7673 -0
  4. data/GUIDELINES +86 -0
  5. data/LGPL +504 -0
  6. data/NEWS +158 -0
  7. data/NORM +137 -0
  8. data/README +180 -0
  9. data/Rakefile +8 -0
  10. data/SPEC.gemspec +15 -0
  11. data/SPEC.yml +60 -0
  12. data/TODO +23 -0
  13. data/TODO.old +31 -0
  14. data/VERSION +5 -0
  15. data/bin/getopts/uttk.rb +390 -0
  16. data/bin/uttk +188 -0
  17. data/bin/uttk-unit +125 -0
  18. data/lib/uttk.rb +288 -0
  19. data/lib/uttk/dumpers/Basic.rb +23 -0
  20. data/lib/uttk/dumpers/BasicColor.rb +35 -0
  21. data/lib/uttk/dumpers/Dumper.rb +77 -0
  22. data/lib/uttk/dumpers/Html.rb +271 -0
  23. data/lib/uttk/dumpers/Path.rb +24 -0
  24. data/lib/uttk/dumpers/Xml.rb +88 -0
  25. data/lib/uttk/dumpers/Yaml.rb +138 -0
  26. data/lib/uttk/filters.rb +128 -0
  27. data/lib/uttk/filters/Buffer.rb +119 -0
  28. data/lib/uttk/filters/Compact.rb +75 -0
  29. data/lib/uttk/filters/Default.rb +27 -0
  30. data/lib/uttk/filters/DefaultColor.rb +27 -0
  31. data/lib/uttk/filters/Filter.rb +53 -0
  32. data/lib/uttk/filters/Id.rb +30 -0
  33. data/lib/uttk/filters/JustStatus.rb +25 -0
  34. data/lib/uttk/filters/KeepSkipBased.rb +38 -0
  35. data/lib/uttk/filters/NodeCut.rb +97 -0
  36. data/lib/uttk/filters/RPathFilter.rb +134 -0
  37. data/lib/uttk/filters/Saver.rb +53 -0
  38. data/lib/uttk/filters/TextFilter.rb +69 -0
  39. data/lib/uttk/generators/dumper_generator.rb +28 -0
  40. data/lib/uttk/generators/filter_generator.rb +28 -0
  41. data/lib/uttk/generators/generator.rb +86 -0
  42. data/lib/uttk/generators/generator_generator.rb +26 -0
  43. data/lib/uttk/generators/loader_generator.rb +28 -0
  44. data/lib/uttk/generators/path_filter_generator.rb +28 -0
  45. data/lib/uttk/generators/strategy_generator.rb +28 -0
  46. data/lib/uttk/generators/templates/dumper.rb +50 -0
  47. data/lib/uttk/generators/templates/filter.rb +50 -0
  48. data/lib/uttk/generators/templates/generator.rb +28 -0
  49. data/lib/uttk/generators/templates/loader.rb +26 -0
  50. data/lib/uttk/generators/templates/path_filter.rb +28 -0
  51. data/lib/uttk/generators/templates/strategy.rb +59 -0
  52. data/lib/uttk/generators/templates/strategy.yml +28 -0
  53. data/lib/uttk/generators/templates/unit_test.rb +46 -0
  54. data/lib/uttk/loaders/Loader.rb +180 -0
  55. data/lib/uttk/loaders/Ruby.rb +28 -0
  56. data/lib/uttk/loaders/Yaml.rb +98 -0
  57. data/lib/uttk/logger.rb +306 -0
  58. data/lib/uttk/logger/backend.rb +170 -0
  59. data/lib/uttk/logger/path.rb +202 -0
  60. data/lib/uttk/logger/section_node.rb +214 -0
  61. data/lib/uttk/logger/severity.rb +63 -0
  62. data/lib/uttk/logger/to_uttk_log.rb +127 -0
  63. data/lib/uttk/logger/verbosity.rb +61 -0
  64. data/lib/uttk/logger_factory.rb +55 -0
  65. data/lib/uttk/path_filters/ColorStatus.rb +57 -0
  66. data/lib/uttk/path_filters/PathFilter.rb +27 -0
  67. data/lib/uttk/path_filters/RemoveTypes.rb +25 -0
  68. data/lib/uttk/status.rb +146 -0
  69. data/lib/uttk/strategies/Abort.rb +24 -0
  70. data/lib/uttk/strategies/Assert.rb +44 -0
  71. data/lib/uttk/strategies/Authors.rb +45 -0
  72. data/lib/uttk/strategies/Block.rb +113 -0
  73. data/lib/uttk/strategies/Bootstrap.rb +55 -0
  74. data/lib/uttk/strategies/Checkout.rb +64 -0
  75. data/lib/uttk/strategies/Clean.rb +29 -0
  76. data/lib/uttk/strategies/Cmd.rb +60 -0
  77. data/lib/uttk/strategies/CmdBase.rb +130 -0
  78. data/lib/uttk/strategies/Collection.rb +158 -0
  79. data/lib/uttk/strategies/Compile.rb +59 -0
  80. data/lib/uttk/strategies/Composite.rb +201 -0
  81. data/lib/uttk/strategies/Composite/contents_eval.rb +40 -0
  82. data/lib/uttk/strategies/Configure.rb +66 -0
  83. data/lib/uttk/strategies/Error.rb +23 -0
  84. data/lib/uttk/strategies/Fail.rb +26 -0
  85. data/lib/uttk/strategies/IOBased.rb +159 -0
  86. data/lib/uttk/strategies/Import.rb +60 -0
  87. data/lib/uttk/strategies/Iterate.rb +139 -0
  88. data/lib/uttk/strategies/JUnit.rb +205 -0
  89. data/lib/uttk/strategies/KillAll.rb +62 -0
  90. data/lib/uttk/strategies/Make.rb +94 -0
  91. data/lib/uttk/strategies/Package.rb +129 -0
  92. data/lib/uttk/strategies/PackageCollection.rb +78 -0
  93. data/lib/uttk/strategies/Pass.rb +24 -0
  94. data/lib/uttk/strategies/Pool.rb +104 -0
  95. data/lib/uttk/strategies/ProbabilityThreshold.rb +46 -0
  96. data/lib/uttk/strategies/Proxy.rb +42 -0
  97. data/lib/uttk/strategies/RMatch.rb +92 -0
  98. data/lib/uttk/strategies/RUnit.rb +132 -0
  99. data/lib/uttk/strategies/SignalCmd.rb +85 -0
  100. data/lib/uttk/strategies/Sleep.rb +36 -0
  101. data/lib/uttk/strategies/SqlQuery.rb +120 -0
  102. data/lib/uttk/strategies/Strategy.rb +683 -0
  103. data/lib/uttk/strategies/Stub.rb +37 -0
  104. data/lib/uttk/strategies/SubCmd.rb +77 -0
  105. data/lib/uttk/strategies/Suite.rb +71 -0
  106. data/lib/uttk/strategies/Test.rb +89 -0
  107. data/lib/uttk/streams.rb +69 -0
  108. data/lib/uttk/streams/Diff.rb +60 -0
  109. data/lib/uttk/streams/HexaDiff.rb +35 -0
  110. data/lib/uttk/streams/Stream.rb +76 -0
  111. data/lib/uttk/weights.rb +17 -0
  112. data/lib/uttk/weights/WExpr.rb +68 -0
  113. data/lib/uttk/weights/WFloat.rb +23 -0
  114. data/lib/uttk/weights/WMin.rb +22 -0
  115. data/lib/uttk/weights/Weight.rb +105 -0
  116. data/lib/www/javascripts/uttk.js +185 -0
  117. data/misc/expandtab.rb +29 -0
  118. data/misc/header.rb +44 -0
  119. data/misc/renaming +57 -0
  120. data/misc/textile_compiler +194 -0
  121. data/misc/uttk-grep.sh +8 -0
  122. data/misc/uttk-line-count.rb +143 -0
  123. data/test/examples-suite.yml +8 -0
  124. data/test/examples/README +68 -0
  125. data/test/examples/basic.rb +10 -0
  126. data/test/examples/basic.yml +9 -0
  127. data/test/examples/cache/cache_and_fatal.yml +5 -0
  128. data/test/examples/cache/simple.yml +30 -0
  129. data/test/examples/sql/basic.yml +24 -0
  130. data/test/examples/students-suite.yml +9 -0
  131. data/test/examples/students/ball.yml +11 -0
  132. data/test/examples/students/glob_stud.yml +20 -0
  133. data/test/examples/students/mini-lib.yml +61 -0
  134. data/test/examples/students/pool_stud.yml +31 -0
  135. data/test/examples/students/stud.yml +21 -0
  136. data/test/fixtures/ball/20040804-exam_a1-zapngo-tessar_m.tar.gz +0 -0
  137. data/test/fixtures/ball/Makefile +24 -0
  138. data/test/fixtures/ball/bar_p-mini-lib.tar.bz2 +0 -0
  139. data/test/fixtures/ball/bar_p-mini-lib/Makefile +20 -0
  140. data/test/fixtures/ball/bar_p-mini-lib/my_strlen.c +13 -0
  141. data/test/fixtures/ball/foo_s-mini-lib.tar.bz2 +0 -0
  142. data/test/fixtures/ball/foo_s-mini-lib/Makefile +20 -0
  143. data/test/fixtures/ball/foo_s-mini-lib/configure +2 -0
  144. data/test/fixtures/ball/foo_s-mini-lib/my_strlen.c +10 -0
  145. data/test/fixtures/ball/hello.tar.bz2 +0 -0
  146. data/test/fixtures/ball/hello.tar.gz +0 -0
  147. data/test/fixtures/ball/hello/Makefile +14 -0
  148. data/test/fixtures/ball/hello/hello.c +7 -0
  149. data/test/fixtures/ball/jack-exit.tar.bz2 +0 -0
  150. data/test/fixtures/ball/jack-exit/Makefile +14 -0
  151. data/test/fixtures/ball/jack-exit/exit.c +16 -0
  152. data/test/fixtures/ball/joe-exit.tar.bz2 +0 -0
  153. data/test/fixtures/ball/joe-exit/Makefile +14 -0
  154. data/test/fixtures/ball/joe-exit/exit.c +8 -0
  155. data/test/fixtures/ball/joe_i-mini-lib.tar.bz2 +0 -0
  156. data/test/fixtures/ball/joe_i-mini-lib/Makefile +20 -0
  157. data/test/fixtures/ball/joe_i-mini-lib/configure +2 -0
  158. data/test/fixtures/ball/joe_i-mini-lib/my_strlen.c +10 -0
  159. data/test/fixtures/ball/john-exit.tar.bz2 +0 -0
  160. data/test/fixtures/ball/john-exit/Makefile +14 -0
  161. data/test/fixtures/ball/john-exit/exit.c +6 -0
  162. data/test/fixtures/ball/qux_j-mini-lib.tar.bz2 +0 -0
  163. data/test/fixtures/ball/qux_j-mini-lib/Makefile +20 -0
  164. data/test/fixtures/ball/qux_j-mini-lib/my_strlen.c +12 -0
  165. data/test/fixtures/binaries/segv +0 -0
  166. data/test/fixtures/binaries/segv.c +10 -0
  167. data/test/fixtures/binaries/segv.rb +2 -0
  168. data/test/fixtures/demo/command-tutorial/steps/1/check.yml +5 -0
  169. data/test/fixtures/demo/command-tutorial/steps/1/pluralizer.rb +10 -0
  170. data/test/fixtures/demo/command-tutorial/steps/2/bad_check.yml +7 -0
  171. data/test/fixtures/demo/command-tutorial/steps/2/check.yml +7 -0
  172. data/test/fixtures/demo/command-tutorial/steps/2/pluralizer.rb +10 -0
  173. data/test/fixtures/demo/command-tutorial/steps/3.1/check.yml +12 -0
  174. data/test/fixtures/demo/command-tutorial/steps/3/check.yml +14 -0
  175. data/test/fixtures/demo/command-tutorial/steps/4.1/bird.txt +1 -0
  176. data/test/fixtures/demo/command-tutorial/steps/4.1/check.yml +12 -0
  177. data/test/fixtures/demo/command-tutorial/steps/4/check.yml +12 -0
  178. data/test/fixtures/demo/command-tutorial/steps/4/pluralizer.rb +12 -0
  179. data/test/fixtures/demo/command-tutorial/steps/5.1/bird.txt +1 -0
  180. data/test/fixtures/demo/command-tutorial/steps/5.1/check.yml +17 -0
  181. data/test/fixtures/demo/command-tutorial/steps/5.1/pluralizer.rb +17 -0
  182. data/test/fixtures/demo/command-tutorial/steps/5/bird.txt +1 -0
  183. data/test/fixtures/demo/command-tutorial/steps/5/check.yml +16 -0
  184. data/test/fixtures/demo/command-tutorial/steps/5/pluralizer.rb +16 -0
  185. data/test/fixtures/demo/command-tutorial/steps/6.1/bird.txt +1 -0
  186. data/test/fixtures/demo/command-tutorial/steps/6.1/check.yml +22 -0
  187. data/test/fixtures/demo/command-tutorial/steps/6.1/pluralizer.rb +17 -0
  188. data/test/fixtures/demo/command-tutorial/steps/6/bird.txt +1 -0
  189. data/test/fixtures/demo/command-tutorial/steps/6/check.yml +21 -0
  190. data/test/fixtures/demo/command-tutorial/steps/6/pluralizer.rb +17 -0
  191. data/test/fixtures/demo/command-tutorial/steps/7/bird.txt +1 -0
  192. data/test/fixtures/demo/command-tutorial/steps/7/check.yml +22 -0
  193. data/test/fixtures/demo/command-tutorial/steps/7/pluralizer.rb +17 -0
  194. data/test/fixtures/demo/filter-tutorial/check.yml +20 -0
  195. data/test/fixtures/demo/filter-tutorial/filters/CutSkip100.rb +19 -0
  196. data/test/fixtures/demo/filter-tutorial/pluralizer.rb +17 -0
  197. data/test/fixtures/java/unit/MultiRight/Foo/Foo.java +11 -0
  198. data/test/fixtures/java/unit/MultiRight/Foo/FooTest.java +15 -0
  199. data/test/fixtures/java/unit/MultiRight/MultiRight.java +13 -0
  200. data/test/fixtures/java/unit/MultiRight/MultiRightTest.java +12 -0
  201. data/test/fixtures/java/unit/MultiRight/bar/Bar.java +11 -0
  202. data/test/fixtures/java/unit/MultiRight/bar/BarTest.java +21 -0
  203. data/test/fixtures/java/unit/MultiRight/build.sh +7 -0
  204. data/test/fixtures/java/unit/SimpleException/SimpleExceptionTest.java +11 -0
  205. data/test/fixtures/java/unit/SimpleException/build.sh +4 -0
  206. data/test/fixtures/java/unit/build.sh +9 -0
  207. data/test/fixtures/java/unit/multibar.yml +6 -0
  208. data/test/fixtures/java/unit/multifoo.yml +6 -0
  209. data/test/fixtures/java/unit/multiright.yml +8 -0
  210. data/test/fixtures/java/unit/simple_exception.yml +6 -0
  211. data/test/fixtures/mini-lib/Makefile +9 -0
  212. data/test/fixtures/mini-lib/strlen.c +15 -0
  213. data/test/fixtures/package/pkg_foo.tar.gz +0 -0
  214. data/test/fixtures/package/pkg_foo/Makefile +20 -0
  215. data/test/fixtures/package/pkg_foo/bootstrap +3 -0
  216. data/test/fixtures/package/pkg_foo/configure +3 -0
  217. data/test/fixtures/package/pkg_foo/foo.sh +2 -0
  218. data/test/fixtures/text/1.txt +4 -0
  219. data/test/fixtures/unit/bad.rb +26 -0
  220. data/test/fixtures/unit/error.rb +6 -0
  221. data/test/fixtures/unit/good.rb +26 -0
  222. data/test/functional-suite.yml +10 -0
  223. data/test/functional/author.yml +11 -0
  224. data/test/functional/base.yml +119 -0
  225. data/test/functional/base_pool.yml +13 -0
  226. data/test/functional/block.yml +13 -0
  227. data/test/functional/cat.yml +16 -0
  228. data/test/functional/cmd.yml +17 -0
  229. data/test/functional/diff.yml +27 -0
  230. data/test/functional/env_cmd.yml +53 -0
  231. data/test/functional/exit.yml +15 -0
  232. data/test/functional/fatal.yml +23 -0
  233. data/test/functional/glob.yml +11 -0
  234. data/test/functional/hexa-diff.yml +25 -0
  235. data/test/functional/import.yml +41 -0
  236. data/test/functional/iterate.yml +99 -0
  237. data/test/functional/killall.yml +31 -0
  238. data/test/functional/pkg.yml +14 -0
  239. data/test/functional/probability_threshold.yml +35 -0
  240. data/test/functional/r_unit.yml +26 -0
  241. data/test/functional/rmatch.yml +122 -0
  242. data/test/functional/signal_cmd.yml +22 -0
  243. data/test/functional/sub.yml +15 -0
  244. data/test/functional/test.yml +25 -0
  245. data/test/functional/timeout.yml +20 -0
  246. data/test/functional/wc.yml +26 -0
  247. data/test/functional/weight.yml +152 -0
  248. data/test/pkg-suite.yml +8 -0
  249. data/test/pkg/cmdline.yml +80 -0
  250. data/test/pool-suite.yml +8 -0
  251. data/test/pool/base.yml +12 -0
  252. data/test/pool/pool.yml +25 -0
  253. data/test/ruby-suite.rb +10 -0
  254. data/test/ruby-suite.yml +5 -0
  255. data/test/ruby/base.rb +119 -0
  256. data/test/ruby/iterate.rb +21 -0
  257. data/test/ruby/wc.rb +43 -0
  258. data/test/unit-suite.yml +10 -0
  259. data/test/unit/dumpers/path_test.rb +46 -0
  260. data/test/unit/dumpers/xml_test.rb +65 -0
  261. data/test/unit/dumpers/yaml_test.rb +65 -0
  262. data/test/unit/filters/buffer_test.rb +168 -0
  263. data/test/unit/filters/keep_skip_based_test.rb +46 -0
  264. data/test/unit/filters/node_cut_test.rb +72 -0
  265. data/test/unit/filters/rpath_filter_test.rb +191 -0
  266. data/test/unit/filters/text_filter_test.rb +46 -0
  267. data/test/unit/filters_test.rb +119 -0
  268. data/test/unit/logger/section_node_test.rb +120 -0
  269. data/test/unit/logger/severity_test.rb +37 -0
  270. data/test/unit/logger/to_uttk_log_test.rb +113 -0
  271. data/test/unit/logger/verbosity_test.rb +44 -0
  272. data/test/unit/logger_test.rb +203 -0
  273. data/test/unit/strategies/suite_test.rb +151 -0
  274. data/test/uttk-check.yml +8 -0
  275. data/test/uttk-distcheck.yml +18 -0
  276. metadata +399 -0
@@ -0,0 +1,76 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /fey/uttk/trunk/lib/uttk/streams/Stream.rb 8778 2005-09-26T04:34:48.103938Z ertai $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Streams
10
+
11
+ class Stream
12
+
13
+ #
14
+ # Attributes
15
+ #
16
+
17
+ attr_accessor :name, :my, :ref
18
+
19
+
20
+ #
21
+ # Constructor
22
+ #
23
+
24
+ def initialize ( name, ref=nil )
25
+ @name, @my, @ref = name.to_s, TempPath.new(name), ref
26
+ end
27
+
28
+
29
+ #
30
+ # Methods
31
+ #
32
+
33
+ def compare_streams
34
+ return @cmp if defined? @cmp
35
+ @cmp = @ref.compare_stream(@my)
36
+ @status = @cmp ? :PASS : :FAILED
37
+ @cmp
38
+ end
39
+
40
+ def status
41
+ compare_streams
42
+ @status
43
+ end
44
+
45
+ def to_uttk_log ( log )
46
+ unless @name == 'input'
47
+ str = @my.to_s_for_uttk_log
48
+ unless str.nil? or (str.is_a? String and str.empty?)
49
+ log["my_#@name"] = str
50
+ end
51
+ end
52
+ unless @ref.nil?
53
+ str = @ref.to_s_for_uttk_log
54
+ unless str.nil? or (str.is_a? String and str.empty?)
55
+ log["ref_#@name"] = str
56
+ end
57
+ end
58
+ end
59
+
60
+ def clean
61
+ if @my.is_a? Pathname
62
+ @my.unlink if @my.exist? and @my.temp?
63
+ end
64
+ if @ref.is_a? Pathname
65
+ @ref.unlink if @ref.exist? and @ref.temp?
66
+ elsif @ref.is_a? File
67
+ ref = Pathname.new(@ref.path)
68
+ ref.unlink if ref.exist? and ref.temp?
69
+ end
70
+ end
71
+
72
+ end # class Stream
73
+
74
+ end # module Streams
75
+
76
+ end # module Uttk
@@ -0,0 +1,17 @@
1
+ # Author:: Nicolas Despr�s <nicolas.despres@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2005 Uttk Team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /w/fey/uttk/trunk/lib/uttk/weights.rb 21966 2006-02-19T21:06:09.175871Z pouillar $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Weights
10
+
11
+ Default = WFloat
12
+
13
+ end # module Weights
14
+
15
+ end # module Uttk
16
+
17
+
@@ -0,0 +1,68 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /fey/uttk/trunk/lib/uttk/weights/WExpr.rb 8778 2005-09-26T04:34:48.103938Z ertai $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Weights
10
+
11
+ class WExpr < Weight
12
+
13
+ attr_accessor :expr
14
+
15
+ def initialize ( aFloat, min=0, max=1, expr=nil )
16
+ super(aFloat, min, max)
17
+ @expr = expr || "#{to_f}[#@min, #@max]"
18
+ end
19
+
20
+ def + ( rhs )
21
+ x = super
22
+ x.expr = "(#{@expr} + #{rhs.to_s})[#{x.min}, #{x.max}]"
23
+ x
24
+ end
25
+
26
+ def * ( rhs )
27
+ x = super
28
+ x.expr = "(#{to_s} * #{rhs.to_s})[#{x.min}, #{x.max}]"
29
+ x
30
+ end
31
+
32
+
33
+ def normalize ( weight )
34
+ diff = @max - @min
35
+ if diff.zero?
36
+ if @max.zero? and weight.zero?
37
+ self.class.new(:PASS)
38
+ else
39
+ self.class.new(:FAIL)
40
+ end
41
+ else
42
+ self.class.new((self - @min) / diff, 0, 1,
43
+ "((#{to_s} - #{min.to_s}) / (#{max.to_s} - #{min.to_s}))")
44
+ end
45
+ end
46
+
47
+
48
+ def get
49
+ @expr + " == #{to_f.to_s} == #{(to_f * 100).floor}%"
50
+ end
51
+
52
+ def to_s
53
+ @expr
54
+ end
55
+
56
+ def to_yaml ( opts={} )
57
+ if opts[:uttk]
58
+ to_f.to_yaml(opts)
59
+ else
60
+ super
61
+ end
62
+ end
63
+
64
+ end # class WExpr
65
+
66
+ end # module Weights
67
+
68
+ end # module Uttk
@@ -0,0 +1,23 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /fey/uttk/trunk/lib/uttk/weights/WFloat.rb 8778 2005-09-26T04:34:48.103938Z ertai $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Weights
10
+
11
+ class WFloat < Weight
12
+
13
+ def get
14
+ return to_f if nan?
15
+ (to_f * 100).floor.to_s + '%'
16
+ end
17
+
18
+ end # class WFloat
19
+
20
+ end # module Weights
21
+
22
+ end # module Uttk
23
+
@@ -0,0 +1,22 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /fey/uttk/trunk/lib/uttk/weights/WMin.rb 8778 2005-09-26T04:34:48.103938Z ertai $
5
+
6
+
7
+ module Uttk
8
+
9
+ module Weights
10
+
11
+ class WMin < WFloat
12
+
13
+ def normalize ( weight )
14
+ (to_f == @max) ? self.class.new(:PASS) : self.class.new(:FAIL)
15
+ end
16
+
17
+ end # class WMin
18
+
19
+ end # module Weights
20
+
21
+ end # module Uttk
22
+
@@ -0,0 +1,105 @@
1
+ # Author:: Nicolas Pouillard <ertai@lrde.epita.fr>.
2
+ # Copyright:: Copyright (c) 2004, 2005 Uttk team. All rights reserved.
3
+ # License:: LGPL
4
+ # $Id: /fey/uttk/trunk/lib/uttk/weights/Weight.rb 8800 2005-10-09T11:12:27.126567Z ertai $
5
+
6
+
7
+ require 'delegate'
8
+
9
+ module Uttk
10
+
11
+ # FIXME: explain here how to write a new weight computation
12
+ module Weights
13
+
14
+ # FIXME: document me
15
+ class Weight
16
+
17
+ attr_reader :min, :max
18
+
19
+ def initialize ( aFloat, min=0, max=1 )
20
+ if BASE.has_key? aFloat
21
+ aFloat, min, max = BASE[aFloat]
22
+ end
23
+ aFloat = aFloat.to_f
24
+ @val = aFloat
25
+ @min, @max = min, max
26
+ unless @min <= aFloat or aFloat <= @max
27
+ raise ArgumentError, "#@min <= #{aFloat} <= #@max"
28
+ end
29
+ end
30
+
31
+ BASE =
32
+ {
33
+ :START => [0, 0, 0],
34
+ :PASS => [1, 0, 1],
35
+ :FAIL => [0, 0, 1]
36
+ }.freeze.each_value { |x| x.freeze }
37
+
38
+ def start?
39
+ [self, @max, @min].all? { |x| x.zero? }
40
+ end
41
+
42
+ def min?
43
+ to_f == @min
44
+ end
45
+
46
+ def max?
47
+ to_f == @max
48
+ end
49
+
50
+ def pass?
51
+ ! zero? and max?
52
+ end
53
+
54
+ def fail?
55
+ to_f != @max
56
+ end
57
+
58
+ def + ( rhs )
59
+ rhs = self.class.new(rhs) unless rhs.is_a? Weight
60
+ self.class.new(to_f + rhs.to_f, @min + rhs.min, @max + rhs.max)
61
+ end
62
+
63
+ def * ( rhs )
64
+ f = rhs.to_f
65
+ a, b, c = to_f * f, @min * f, @max * f
66
+ b, c = c, b if f < 0
67
+ self.class.new(a, b, c)
68
+ end
69
+
70
+ def normalize ( weight )
71
+ diff = @max - @min
72
+ if diff.zero?
73
+ if @max.zero? and weight.zero?
74
+ self.class.new(:PASS)
75
+ else
76
+ self.class.new(:FAIL)
77
+ end
78
+ else
79
+ self.class.new((self - @min) / diff, 0, 1)
80
+ end
81
+ end
82
+
83
+ attr_reader :val
84
+ alias :get :val
85
+
86
+ def long_get
87
+ "#{get}[#@min, #@max]"
88
+ end
89
+
90
+ def == ( rhs )
91
+ rhs.class <= Weight and
92
+ @min == rhs.min and
93
+ @val == rhs.val and
94
+ @max == rhs.max
95
+ end
96
+
97
+ def method_missing ( *a, &b )
98
+ @val.send(*a, &b)
99
+ end
100
+
101
+ end # class Weight
102
+
103
+ end # module Weights
104
+
105
+ end # module Uttk
@@ -0,0 +1,185 @@
1
+ /* Uttk JavaScript library */
2
+
3
+ // Results of the moulette
4
+ var uttk_root = new Array();
5
+ var uttk_hash = new Array();
6
+ var uttk_nodes = new Array();
7
+ var uttk_leaves = new Array();
8
+ var CLASS = 0;
9
+ var ID = 1;
10
+ var FATHER = 2;
11
+ var STATE = 3;
12
+ var CONTENTS1 = 4;
13
+ var CONTENTS2 = 5;
14
+ var CONTENTS3 = 6;
15
+
16
+
17
+ // Main function
18
+ function uttk_main ( )
19
+ {
20
+ var src = uttk_display(uttk_root);
21
+ var dom = document.getElementById('uttk_contents');
22
+
23
+ if (dom == null)
24
+ alert("DOM id='uttk_contents' not found !");
25
+ else
26
+ dom.innerHTML = src;
27
+ }
28
+
29
+
30
+ // Add a leaf to "father"
31
+ function uttk_add_leaf ( id, father_id, state, c1, c2, c3 )
32
+ {
33
+ var father = uttk_hash[father_id];
34
+
35
+ if (father == null)
36
+ name += "(FATHER[" + father_id + "] == null)";
37
+ var leaf = new Array("leaf", id, father, state, c1, c2 || '', c3 || '');
38
+ if (father != null)
39
+ father[CONTENTS3].push(leaf);
40
+
41
+ uttk_hash[id] = leaf;
42
+ uttk_leaves.push(leaf);
43
+ }
44
+
45
+
46
+ // Add a node to "father"
47
+ function uttk_add_node ( id, father_id, state, c1, c2 )
48
+ {
49
+ var father = uttk_hash[father_id];
50
+ var node = new Array("node", id, father, state, c1, c2, new Array());
51
+
52
+ if (father == null)
53
+ uttk_root.push(node);
54
+ else
55
+ father[CONTENTS3].push(node);
56
+
57
+ uttk_hash[id] = node;
58
+ uttk_nodes.push(node);
59
+ }
60
+
61
+
62
+ // Collapse or expand data
63
+ function uttk_toggle_state ( id )
64
+ {
65
+ var obj = uttk_hash[id];
66
+
67
+ obj[STATE] = (obj[STATE] == 1)? 0 : 1;
68
+
69
+ // Redisplay
70
+ uttk_main();
71
+ }
72
+
73
+
74
+ // Generate html common part
75
+ function uttk_node_or_leaf ( data )
76
+ {
77
+ switch (data[STATE])
78
+ {
79
+ case 0:
80
+ break;
81
+ case 1:
82
+ return data[CONTENTS1] + 'open' + data[CONTENTS2];
83
+ case 2:
84
+ return data[CONTENTS1];
85
+ default:
86
+ alert('Unknown state: ' + data[STATE]);
87
+ }
88
+ return data[CONTENTS1] + data[CONTENTS2];
89
+ }
90
+
91
+
92
+ // Generate html for node
93
+ function uttk_node ( node )
94
+ {
95
+ if (node[STATE] == 0)
96
+ return "";
97
+ else
98
+ return uttk_display(node[CONTENTS3]);
99
+ }
100
+
101
+
102
+ // Generate html for leaf
103
+ function uttk_leaf ( leaf )
104
+ {
105
+ if (leaf[STATE] == 0)
106
+ return "";
107
+ else
108
+ return leaf[CONTENTS3];
109
+ }
110
+
111
+
112
+ // Display a hierachy
113
+ function uttk_display(data)
114
+ {
115
+ var i;
116
+ var source = "";
117
+
118
+ for (i = 0; i < data.length; ++i)
119
+ {
120
+ var element = data[i];
121
+
122
+ source += uttk_node_or_leaf(element)
123
+
124
+ switch (element[CLASS])
125
+ {
126
+ case "node":
127
+ source += uttk_node(element);
128
+ break;
129
+ case "leaf":
130
+ source += uttk_leaf(element);
131
+ break;
132
+ default:
133
+ alert('Unknown element type: ' + element[CLASS]);
134
+ }
135
+
136
+ source += '</div>'
137
+ }
138
+ return source;
139
+ }
140
+
141
+
142
+ function uttk_change_state_all ( kind, state )
143
+ {
144
+ var i;
145
+
146
+ switch ( kind )
147
+ {
148
+ case null:
149
+ for (i = 0; i < uttk_nodes.length; ++i)
150
+ if (uttk_nodes[i][STATE] != 2)
151
+ uttk_nodes[i][STATE] = state;
152
+ for (i = 0; i < uttk_leaves.length; ++i)
153
+ if (uttk_leaves[i][STATE] != 2)
154
+ uttk_leaves[i][STATE] = state;
155
+ break;
156
+ case "node":
157
+ for (i = 0; i < uttk_nodes.length; ++i)
158
+ if (uttk_nodes[i][STATE] != 2)
159
+ uttk_nodes[i][STATE] = state;
160
+ break;
161
+ case "leaf":
162
+ for (i = 0; i < uttk_leaves.length; ++i)
163
+ if (uttk_leaves[i][STATE] != 2)
164
+ uttk_leaves[i][STATE] = state;
165
+ break;
166
+ default:
167
+ alert('Unknown element type: ' + element[CLASS]);
168
+ }
169
+
170
+ uttk_main();
171
+ }
172
+
173
+
174
+ // Expand all nodes or leaves
175
+ function uttk_expand_all ( kind )
176
+ {
177
+ uttk_change_state_all(kind, 1);
178
+ }
179
+
180
+
181
+ // Collapse all nodes or leaves
182
+ function uttk_collapse_all ( kind )
183
+ {
184
+ uttk_change_state_all(kind, 0);
185
+ }