Linguistics 1.0.3

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.
data/test.rb ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Test suite for Linguistics classes
4
+ #
5
+ #
6
+
7
+ BEGIN {
8
+ $basedir = File::dirname( __FILE__ )
9
+ %w{lib tests redist}.each do |dir|
10
+ $LOAD_PATH.unshift File::join( $basedir, dir )
11
+ end
12
+
13
+ require "#$basedir/utils"
14
+ include UtilityFunctions
15
+ }
16
+
17
+ verboseOff {
18
+ require 'lingtestcase'
19
+ require 'find'
20
+ require 'test/unit'
21
+ require 'test/unit/testsuite'
22
+ require 'test/unit/ui/console/testrunner'
23
+ require 'optparse'
24
+ }
25
+
26
+ # Turn off output buffering
27
+ $stderr.sync = $stdout.sync = true
28
+
29
+ # Initialize variables
30
+ safelevel = 0
31
+ patterns = []
32
+ requires = []
33
+
34
+ # Parse command-line switches
35
+ ARGV.options {|oparser|
36
+ oparser.banner = "Usage: #$0 [options] [TARGETS]\n"
37
+
38
+ oparser.on( "--debug", "-d", TrueClass, "Turn debugging on" ) {
39
+ $DEBUG = true
40
+ debugMsg "Turned debugging on."
41
+ }
42
+
43
+ oparser.on( "--verbose", "-v", TrueClass, "Make progress verbose" ) {
44
+ $VERBOSE = true
45
+ debugMsg "Turned verbose on."
46
+ }
47
+
48
+ # Handle the 'help' option
49
+ oparser.on( "--help", "-h", "Display this text." ) {
50
+ $stderr.puts oparser
51
+ exit!(0)
52
+ }
53
+
54
+ oparser.parse!
55
+ }
56
+
57
+ # Parse test patterns
58
+ ARGV.each {|pat| patterns << Regexp::new( pat, Regexp::IGNORECASE )}
59
+ $stderr.puts "#{patterns.length} patterns given on the command line"
60
+
61
+ ### Load all the tests from the tests dir
62
+ Find.find( File::join($basedir,"tests") ) {|file|
63
+ Find.prune if /\/\./ =~ file or /~$/ =~ file
64
+ Find.prune if /TEMPLATE/ =~ file
65
+ next if File.stat( file ).directory?
66
+
67
+ unless patterns.empty?
68
+ Find.prune unless patterns.find {|pat| pat =~ file}
69
+ end
70
+
71
+ debugMsg "Considering '%s': " % file
72
+ next unless file =~ /\.tests.rb$/
73
+ debugMsg "Requiring '%s'..." % file
74
+ require "#{file}"
75
+ requires << file
76
+ }
77
+
78
+ $stderr.puts "Required #{requires.length} files."
79
+ unless patterns.empty?
80
+ $stderr.puts "[" + requires.sort.join( ", " ) + "]"
81
+ end
82
+
83
+ # Build the test suite
84
+ class LinguisticsTests
85
+ class << self
86
+ def suite
87
+ suite = Test::Unit::TestSuite.new( "Linguistics" )
88
+
89
+ if suite.respond_to?( :add )
90
+ ObjectSpace.each_object( Class ) {|klass|
91
+ suite.add( klass.suite ) if klass < Linguistics::TestCase
92
+ }
93
+ else
94
+ ObjectSpace.each_object( Class ) {|klass|
95
+ suite << klass.suite if klass < Linguistics::TestCase
96
+ }
97
+ end
98
+
99
+ return suite
100
+ end
101
+ end
102
+ end
103
+
104
+ # Run tests
105
+ $SAFE = safelevel
106
+ Test::Unit::UI::Console::TestRunner.new( LinguisticsTests ).start
107
+
108
+
109
+
110
+
@@ -0,0 +1,114 @@
1
+ #!/usr/bin/ruby -w
2
+ #
3
+ # Unit test for English conjunctions
4
+ # $Id: conjunction.tests.rb,v 1.2 2003/09/11 05:03:12 deveiant Exp $
5
+ #
6
+ # Copyright (c) 2003 The FaerieMUD Consortium.
7
+ #
8
+
9
+ unless defined? Linguistics::TestCase
10
+ testsdir = File::dirname( File::dirname(File::expand_path( __FILE__ )) )
11
+ $LOAD_PATH.unshift testsdir unless $LOAD_PATH.include?( testsdir )
12
+
13
+ require 'lingtestcase'
14
+ end
15
+
16
+
17
+ ### This test suite tests the stage1 (static) parser and the metagrammar it
18
+ ### parses in which the actual parser-generator's behaviour is defined.
19
+ class EnglishConjunctionsTestCase < Linguistics::TestCase
20
+
21
+ Linguistics::use( :en )
22
+ include Linguistics::EN
23
+
24
+ Tests = {
25
+ # Test name => {
26
+ # target => {
27
+ # {<options>} => <expected output>
28
+ # },
29
+ :singleWord => {
30
+ ['cat'] => {
31
+ {} => %{a cat}
32
+ },
33
+ },
34
+
35
+ :twoWord => {
36
+ %w{cat dog} => {
37
+ {} => 'a cat and a dog',
38
+ {:conjunctive => 'plus'} => 'a cat plus a dog',
39
+ {:conjunctive => ''} => 'a cat a dog',
40
+ },
41
+ %w{cat Cat} => {
42
+ {} => %{two cats},
43
+ {:combine => false} => 'a cat and a Cat',
44
+ {:casefold => false} => 'a cat and a Cat',
45
+ {:generalize => true} => 'several cats',
46
+ },
47
+ },
48
+
49
+ :manyWord => {
50
+ %w{cat dog fox dog chicken chicken Fox chicken goose Dog goose} => {
51
+ {} => 'three dogs, three chickens, two foxes, two geese, and a cat',
52
+ {:combine => false} =>
53
+ 'a cat, a dog, a fox, a dog, a chicken, a chicken, a Fox, a '\
54
+ 'chicken, a goose, a Dog, and a goose',
55
+ {:casefold => false} =>
56
+ 'three chickens, two dogs, two geese, a cat, a fox, a Fox, '\
57
+ 'and a Dog',
58
+ {:generalize => true} =>
59
+ 'several dogs, several chickens, several foxes, several '\
60
+ 'geese, and a cat',
61
+ }
62
+ },
63
+ }
64
+
65
+ # Auto-generate tests for the dataset
66
+ Tests.each_with_index {|test,i|
67
+ name = test[0]
68
+ methname = "test_%03d_%s" %
69
+ [ i + 50, name ]
70
+ define_method( methname ) {
71
+ printTestHeader "Conjunction: #{name}"
72
+ Tests[name].each {|target, tests|
73
+ rval = nil
74
+ tests.each {|opts, output|
75
+ op = "conjunction of %s with options=%s" %
76
+ [ target.inspect, opts.inspect ]
77
+
78
+ # Method interface
79
+ assert_nothing_raised( op ) {
80
+ rval = target.en.conjunction( opts )
81
+ }
82
+ assert_equal output, rval, op
83
+
84
+ # Function interface
85
+ assert_nothing_raised( op ) {
86
+ rval = conjunction( target, opts )
87
+ }
88
+ assert_equal output, rval, op
89
+ }
90
+ }
91
+ }
92
+ }
93
+
94
+ ### Overridden initializer: auto-generated test methods have an arity of 1
95
+ ### even though they don't require an argument (as of the current Ruby CVS),
96
+ ### and the default initializer throws an :invalid_test for methods with
97
+ ### arity != 0.
98
+ def initialize( test_method_name )
99
+ if !respond_to?( test_method_name )
100
+ throw :invalid_test
101
+ end
102
+ @method_name = test_method_name
103
+ @test_passed = true
104
+ end
105
+
106
+
107
+ #################################################################
108
+ ### T E S T S
109
+ #################################################################
110
+
111
+
112
+
113
+ end
114
+