You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucy.apache.org by nw...@apache.org on 2013/02/18 20:50:20 UTC
[lucy-commits] [5/9] git commit: refs/heads/clownfish-test-v2 - Port
611-queryparser_syntax.t to C
Port 611-queryparser_syntax.t to C
Project: http://git-wip-us.apache.org/repos/asf/lucy/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy/commit/66376c0f
Tree: http://git-wip-us.apache.org/repos/asf/lucy/tree/66376c0f
Diff: http://git-wip-us.apache.org/repos/asf/lucy/diff/66376c0f
Branch: refs/heads/clownfish-test-v2
Commit: 66376c0f2ab5b882d5dcfb368689702203274977
Parents: c6b07c3
Author: Nick Wellnhofer <we...@aevum.de>
Authored: Mon Feb 18 19:43:31 2013 +0100
Committer: Nick Wellnhofer <we...@aevum.de>
Committed: Mon Feb 18 20:14:55 2013 +0100
----------------------------------------------------------------------
core/Lucy/Test.c | 2 +
core/Lucy/Test/Search/TestQueryParserSyntax.c | 106 ++++++++++++++++--
core/Lucy/Test/Search/TestQueryParserSyntax.cfh | 14 ++-
perl/buildlib/Lucy/Build/Binding/Misc.pm | 41 -------
perl/t/611-queryparser_syntax.t | 62 ----------
perl/t/core/611-queryparser_syntax.t | 23 ++++
6 files changed, 133 insertions(+), 115 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucy/blob/66376c0f/core/Lucy/Test.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test.c b/core/Lucy/Test.c
index b4baf9a..ecde899 100644
--- a/core/Lucy/Test.c
+++ b/core/Lucy/Test.c
@@ -66,6 +66,7 @@
#include "Lucy/Test/Search/TestPhraseQuery.h"
#include "Lucy/Test/Search/TestPolyQuery.h"
#include "Lucy/Test/Search/TestQueryParserLogic.h"
+#include "Lucy/Test/Search/TestQueryParserSyntax.h"
#include "Lucy/Test/Search/TestRangeQuery.h"
#include "Lucy/Test/Search/TestReqOptQuery.h"
#include "Lucy/Test/Search/TestSeriesMatcher.h"
@@ -173,6 +174,7 @@ S_all_test_batches() {
VA_Push(batches, (Obj*)TestSeriesMatcher_new());
VA_Push(batches, (Obj*)TestORQuery_new());
VA_Push(batches, (Obj*)TestQPLogic_new());
+ VA_Push(batches, (Obj*)TestQPSyntax_new());
return batches;
}
http://git-wip-us.apache.org/repos/asf/lucy/blob/66376c0f/core/Lucy/Test/Search/TestQueryParserSyntax.c
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Search/TestQueryParserSyntax.c b/core/Lucy/Test/Search/TestQueryParserSyntax.c
index 56d8173..13ce638 100644
--- a/core/Lucy/Test/Search/TestQueryParserSyntax.c
+++ b/core/Lucy/Test/Search/TestQueryParserSyntax.c
@@ -23,6 +23,13 @@
#include "Lucy/Test/Search/TestQueryParserSyntax.h"
#include "Lucy/Test/Search/TestQueryParser.h"
#include "Lucy/Test/TestUtils.h"
+#include "Lucy/Analysis/PolyAnalyzer.h"
+#include "Lucy/Analysis/RegexTokenizer.h"
+#include "Lucy/Analysis/SnowballStopFilter.h"
+#include "Lucy/Document/Doc.h"
+#include "Lucy/Index/Indexer.h"
+#include "Lucy/Plan/FullTextType.h"
+#include "Lucy/Plan/Schema.h"
#include "Lucy/Search/Hits.h"
#include "Lucy/Search/IndexSearcher.h"
#include "Lucy/Search/QueryParser.h"
@@ -33,6 +40,7 @@
#include "Lucy/Search/NOTQuery.h"
#include "Lucy/Search/ORQuery.h"
#include "Lucy/Store/Folder.h"
+#include "Lucy/Store/RAMFolder.h"
#define make_term_query (Query*)lucy_TestUtils_make_term_query
#define make_phrase_query (Query*)lucy_TestUtils_make_phrase_query
@@ -40,6 +48,82 @@
#define make_not_query (Query*)lucy_TestUtils_make_not_query
#define make_poly_query (Query*)lucy_TestUtils_make_poly_query
+TestQueryParserSyntax*
+TestQPSyntax_new() {
+ TestQueryParserSyntax *self
+ = (TestQueryParserSyntax*)VTable_Make_Obj(TESTQUERYPARSERSYNTAX);
+ return TestQPSyntax_init(self);
+}
+
+TestQueryParserSyntax*
+TestQPSyntax_init(TestQueryParserSyntax *self) {
+ return (TestQueryParserSyntax*)TestBatch_init((TestBatch*)self, 68);
+}
+
+static Folder*
+build_index() {
+ // Plain type.
+ CharBuf *pattern = CB_newf("\\S+");
+ RegexTokenizer *tokenizer = RegexTokenizer_new(pattern);
+ FullTextType *plain = FullTextType_new((Analyzer*)tokenizer);
+
+ // Fancy type.
+
+ CharBuf *word_pattern = CB_newf("\\w+");
+ RegexTokenizer *word_tokenizer = RegexTokenizer_new(word_pattern);
+
+ Hash *stop_list = Hash_new(0);
+ Hash_Store_Str(stop_list, "x", 1, (Obj*)CFISH_TRUE);
+ SnowballStopFilter *stop_filter = SnowStop_new(NULL, stop_list);
+
+ VArray *analyzers = VA_new(0);
+ VA_Push(analyzers, (Obj*)word_tokenizer);
+ VA_Push(analyzers, (Obj*)stop_filter);
+ PolyAnalyzer *fancy_analyzer = PolyAnalyzer_new(NULL, analyzers);
+
+ FullTextType *fancy = FullTextType_new((Analyzer*)fancy_analyzer);
+
+ // Schema.
+ Schema *schema = Schema_new();
+ CharBuf *plain_cb = CB_newf("plain");
+ CharBuf *fancy_cb = CB_newf("fancy");
+ Schema_Spec_Field(schema, plain_cb, (FieldType*)plain);
+ Schema_Spec_Field(schema, fancy_cb, (FieldType*)fancy);
+
+ // Indexer.
+ RAMFolder *folder = RAMFolder_new(NULL);
+ Indexer *indexer = Indexer_new(schema, (Obj*)folder, NULL, 0);
+
+ // Index documents.
+ VArray *doc_set = TestUtils_doc_set();
+ for (uint32_t i = 0; i < VA_Get_Size(doc_set); ++i) {
+ CharBuf *content_string = (CharBuf*)VA_Fetch(doc_set, i);
+ Doc *doc = Doc_new(NULL, 0);
+ Doc_Store(doc, plain_cb, (Obj*)content_string);
+ Doc_Store(doc, fancy_cb, (Obj*)content_string);
+ Indexer_Add_Doc(indexer, doc, 1.0);
+ DECREF(doc);
+ }
+ Indexer_Commit(indexer);
+
+ // Clean up.
+ DECREF(doc_set);
+ DECREF(indexer);
+ DECREF(fancy_cb);
+ DECREF(plain_cb);
+ DECREF(schema);
+ DECREF(fancy);
+ DECREF(fancy_analyzer);
+ DECREF(analyzers);
+ DECREF(stop_list);
+ DECREF(word_pattern);
+ DECREF(plain);
+ DECREF(tokenizer);
+ DECREF(pattern);
+
+ return (Folder*)folder;
+}
+
static TestQueryParser*
leaf_test_simple_term() {
Query *tree = make_leaf_query(NULL, "a");
@@ -293,16 +377,14 @@ static Lucy_TestQPSyntax_Test_t syntax_test_funcs[] = {
NULL
};
-void
-TestQPSyntax_run_tests(Folder *index) {
- TestBatch *batch = TestBatch_new(68);
- IndexSearcher *searcher = IxSearcher_new((Obj*)index);
- QueryParser *qparser = QParser_new(IxSearcher_Get_Schema(searcher),
- NULL, NULL, NULL);
+static void
+test_query_parser_syntax(TestBatch *batch) {
+ Folder *index = build_index();
+ IndexSearcher *searcher = IxSearcher_new((Obj*)index);
+ QueryParser *qparser = QParser_new(IxSearcher_Get_Schema(searcher),
+ NULL, NULL, NULL);
QParser_Set_Heed_Colons(qparser, true);
- TestBatch_Plan(batch);
-
for (uint32_t i = 0; leaf_test_funcs[i] != NULL; i++) {
Lucy_TestQPSyntax_Test_t test_func = leaf_test_funcs[i];
TestQueryParser *test_case = test_func();
@@ -341,9 +423,15 @@ TestQPSyntax_run_tests(Folder *index) {
DECREF(test_case);
}
- DECREF(batch);
DECREF(searcher);
DECREF(qparser);
+ DECREF(index);
+}
+
+void
+TestQPSyntax_run_tests(TestQueryParserSyntax *self) {
+ TestBatch *batch = (TestBatch*)self;
+ test_query_parser_syntax(batch);
}
http://git-wip-us.apache.org/repos/asf/lucy/blob/66376c0f/core/Lucy/Test/Search/TestQueryParserSyntax.cfh
----------------------------------------------------------------------
diff --git a/core/Lucy/Test/Search/TestQueryParserSyntax.cfh b/core/Lucy/Test/Search/TestQueryParserSyntax.cfh
index f6a2a18..098aa80 100644
--- a/core/Lucy/Test/Search/TestQueryParserSyntax.cfh
+++ b/core/Lucy/Test/Search/TestQueryParserSyntax.cfh
@@ -19,9 +19,17 @@ parcel Lucy;
/** Tests for logical structure of Query objects output by QueryParser.
*/
-inert class Lucy::Test::Search::TestQueryParserSyntax cnick TestQPSyntax {
- inert void
- run_tests(Folder *index);
+class Lucy::Test::Search::TestQueryParserSyntax cnick TestQPSyntax
+ inherits Lucy::Test::TestBatch {
+
+ inert incremented TestQueryParserSyntax*
+ new();
+
+ inert TestQueryParserSyntax*
+ init(TestQueryParserSyntax *self);
+
+ void
+ Run_Tests(TestQueryParserSyntax *self);
}
http://git-wip-us.apache.org/repos/asf/lucy/blob/66376c0f/perl/buildlib/Lucy/Build/Binding/Misc.pm
----------------------------------------------------------------------
diff --git a/perl/buildlib/Lucy/Build/Binding/Misc.pm b/perl/buildlib/Lucy/Build/Binding/Misc.pm
index b9a8ca0..0fb31a8 100644
--- a/perl/buildlib/Lucy/Build/Binding/Misc.pm
+++ b/perl/buildlib/Lucy/Build/Binding/Misc.pm
@@ -23,8 +23,6 @@ sub bind_all {
my $class = shift;
$class->bind_lucy;
$class->bind_test;
- $class->bind_testutils;
- $class->bind_testqueryparsersyntax;
$class->bind_testschema;
$class->bind_bbsortex;
}
@@ -107,45 +105,6 @@ END_XS_CODE
Clownfish::CFC::Binding::Perl::Class->register($binding);
}
-sub bind_testutils {
- my $xs_code = <<'END_XS_CODE';
-MODULE = Lucy PACKAGE = Lucy::Test::TestUtils
-
-SV*
-doc_set()
-CODE:
- RETVAL = CFISH_OBJ_TO_SV_NOINC(lucy_TestUtils_doc_set());
-OUTPUT: RETVAL
-END_XS_CODE
- my $binding = Clownfish::CFC::Binding::Perl::Class->new(
- parcel => "Lucy",
- class_name => "Lucy::Test::TestUtils",
- );
- $binding->append_xs($xs_code);
-
- Clownfish::CFC::Binding::Perl::Class->register($binding);
-}
-
-sub bind_testqueryparsersyntax {
- my $xs_code = <<'END_XS_CODE';
-MODULE = Lucy PACKAGE = Lucy::Test::Search::TestQueryParserSyntax
-
-void
-run_tests(index);
- lucy_Folder *index;
-PPCODE:
- lucy_TestQPSyntax_run_tests(index);
-END_XS_CODE
-
- my $binding = Clownfish::CFC::Binding::Perl::Class->new(
- parcel => "Lucy",
- class_name => "Lucy::Test::Search::TestQueryParserSyntax",
- );
- $binding->append_xs($xs_code);
-
- Clownfish::CFC::Binding::Perl::Class->register($binding);
-}
-
sub bind_testschema {
my $binding = Clownfish::CFC::Binding::Perl::Class->new(
parcel => "Lucy",
http://git-wip-us.apache.org/repos/asf/lucy/blob/66376c0f/perl/t/611-queryparser_syntax.t
----------------------------------------------------------------------
diff --git a/perl/t/611-queryparser_syntax.t b/perl/t/611-queryparser_syntax.t
deleted file mode 100644
index 2d428b3..0000000
--- a/perl/t/611-queryparser_syntax.t
+++ /dev/null
@@ -1,62 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements. See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-use strict;
-use warnings;
-
-use lib 'buildlib';
-use Lucy::Test;
-
-package MySchema;
-use base qw( Lucy::Plan::Schema );
-
-sub new {
- my $self = shift->SUPER::new(@_);
- my $tokenizer = Lucy::Analysis::RegexTokenizer->new( pattern => '\S+' );
- my $wordchar_tokenizer
- = Lucy::Analysis::RegexTokenizer->new( pattern => '\w+', );
- my $stopfilter
- = Lucy::Analysis::SnowballStopFilter->new( stoplist => { x => 1 } );
- my $fancy_analyzer = Lucy::Analysis::PolyAnalyzer->new(
- analyzers => [ $wordchar_tokenizer, $stopfilter, ], );
-
- my $plain = Lucy::Plan::FullTextType->new( analyzer => $tokenizer );
- my $fancy = Lucy::Plan::FullTextType->new( analyzer => $fancy_analyzer );
- $self->spec_field( name => 'plain', type => $plain );
- $self->spec_field( name => 'fancy', type => $fancy );
- return $self;
-}
-
-package main;
-
-# Build index.
-my $doc_set = Lucy::Test::TestUtils::doc_set()->to_perl;
-my $folder = Lucy::Store::RAMFolder->new;
-my $schema = MySchema->new;
-my $indexer = Lucy::Index::Indexer->new(
- schema => $schema,
- index => $folder,
-);
-for my $content_string (@$doc_set) {
- $indexer->add_doc(
- { plain => $content_string,
- fancy => $content_string,
- }
- );
-}
-$indexer->commit;
-
-Lucy::Test::Search::TestQueryParserSyntax::run_tests($folder);
-
http://git-wip-us.apache.org/repos/asf/lucy/blob/66376c0f/perl/t/core/611-queryparser_syntax.t
----------------------------------------------------------------------
diff --git a/perl/t/core/611-queryparser_syntax.t b/perl/t/core/611-queryparser_syntax.t
new file mode 100644
index 0000000..c82d160
--- /dev/null
+++ b/perl/t/core/611-queryparser_syntax.t
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+use strict;
+use warnings;
+
+use Lucy::Test;
+my $success = Lucy::Test::run_tests("Lucy::Test::Search::TestQueryParserSyntax");
+
+exit($success ? 0 : 1);
+