sparkql 1.2.5 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,10 +5,10 @@ class ParserTest < Test::Unit::TestCase
5
5
 
6
6
  def test_simple
7
7
  @parser = Parser.new
8
- parse 'Test Eq 10',10.to_s
9
- parse 'Test Eq 10.0',10.0.to_s
10
- parse 'Test Eq true',true.to_s
11
- parse "Test Eq 'false'","'false'"
8
+ parse 'Test Eq 10', 10.to_s
9
+ parse 'Test Eq 10.0', 10.0.to_s
10
+ parse 'Test Eq true', true.to_s
11
+ parse "Test Eq 'false'", "'false'"
12
12
  end
13
13
 
14
14
  def test_conjunction
@@ -26,7 +26,7 @@ class ParserTest < Test::Unit::TestCase
26
26
  assert_equal 11.to_s, expression.last[:value]
27
27
  assert_equal 'Not', expression.last[:conjunction]
28
28
  end
29
-
29
+
30
30
  def test_tough_conjunction
31
31
  @parser = Parser.new
32
32
  expression = @parser.parse('Test Eq 10 Or Test Ne 11 And Test Ne 9')
@@ -52,50 +52,50 @@ class ParserTest < Test::Unit::TestCase
52
52
  def test_multiples
53
53
  @parser = Parser.new
54
54
  expression = @parser.parse('(Test Eq 10,11,12)').first
55
- assert_equal [10.to_s,11.to_s,12.to_s], expression[:value]
55
+ assert_equal [10.to_s, 11.to_s, 12.to_s], expression[:value]
56
56
  assert_equal '10,11,12', expression[:condition]
57
57
  end
58
-
58
+
59
59
  def test_invalid_syntax
60
60
  @parser = Parser.new
61
61
  expression = @parser.parse('Test Eq DERP')
62
62
  assert @parser.errors?, "Should be nil: #{expression}"
63
63
  end
64
-
64
+
65
65
  def test_nesting
66
66
  assert_nesting(
67
67
  "City Eq 'Fargo' Or (BathsFull Eq 1 Or BathsFull Eq 2) Or City Eq 'Moorhead' Or City Eq 'Dilworth'",
68
- [0,1,1,0,0]
68
+ [0, 1, 1, 0, 0]
69
69
  )
70
70
  end
71
-
71
+
72
72
  def test_nesting_and_functions
73
73
  # Nesting with a function thrown in. Yes, this was a problem.
74
74
  assert_nesting(
75
75
  "City Eq 'Fargo' Or (BathsFull Eq 1 And Location Eq rectangle('35.12 -68.33, 35.13 -68.32')) Or Location Eq radius('35.12 -68.33',10.0) Or City Eq 'Dilworth'",
76
- [0,1,1,0,0]
76
+ [0, 1, 1, 0, 0]
77
77
  )
78
78
  end
79
79
 
80
80
  def test_multilevel_nesting
81
81
  assert_nesting(
82
82
  "(City Eq 'Fargo' And (BathsFull Eq 1 Or BathsFull Eq 2)) Or City Eq 'Moorhead' Or City Eq 'Dilworth'",
83
- [1,2,2,0,0]
83
+ [1, 2, 2, 0, 0]
84
84
  )
85
-
85
+
86
86
  # API-629
87
87
  assert_nesting(
88
88
  "((MlsStatus Eq 'A') Or (MlsStatus Eq 'D' And CloseDate Ge 2011-05-17)) And ListPrice Ge 150000.0 And PropertyType Eq 'A'",
89
- [2,2,2,0,0],
90
- [2,3,3,0,0]
89
+ [2, 2, 2, 0, 0],
90
+ [2, 3, 3, 0, 0]
91
91
  )
92
92
  assert_nesting(
93
93
  "ListPrice Ge 150000.0 And PropertyType Eq 'A' And ((MlsStatus Eq 'A') Or (MlsStatus Eq 'D' And CloseDate Ge 2011-05-17))",
94
- [0,0,2,2,2],
95
- [0,0,2,3,3]
94
+ [0, 0, 2, 2, 2],
95
+ [0, 0, 2, 3, 3]
96
96
  )
97
97
  end
98
-
98
+
99
99
  def test_bad_queries
100
100
  filter = "City IsLikeA 'Town'"
101
101
  @parser = Parser.new
@@ -105,8 +105,8 @@ class ParserTest < Test::Unit::TestCase
105
105
  end
106
106
 
107
107
  def test_function_months
108
- dt = DateTime.new(2014, 1, 5, 0, 0, 0, 0)
109
- DateTime.expects(:now).returns(dt)
108
+ t = Time.new(2014, 1, 5, 0, 0, 0, 0)
109
+ Time.expects(:now).returns(t)
110
110
  @parser = Parser.new
111
111
  expressions = @parser.parse "ExpirationDate Gt months(-3)"
112
112
  assert !@parser.errors?, "errors :( #{@parser.errors.inspect}"
@@ -115,8 +115,8 @@ class ParserTest < Test::Unit::TestCase
115
115
  end
116
116
 
117
117
  def test_function_years
118
- dt = DateTime.new(2014, 1, 5, 0, 0, 0, 0)
119
- DateTime.expects(:now).returns(dt)
118
+ t = Time.new(2014, 1, 5, 0, 0, 0, 0)
119
+ Time.expects(:now).returns(t)
120
120
  @parser = Parser.new
121
121
  expressions = @parser.parse "SoldDate Lt years(2)"
122
122
  assert !@parser.errors?, "errors :( #{@parser.errors.inspect}"
@@ -125,19 +125,23 @@ class ParserTest < Test::Unit::TestCase
125
125
  end
126
126
 
127
127
  def test_function_days
128
- d = Date.today
129
- start = Time.utc(d.year,d.month,d.day,0,0,0)
130
- filter = "OriginalEntryTimestamp Ge days(-7)"
128
+ t = Time.new(2021, 2, 22, 0, 0, 0, 0)
129
+ Time.expects(:now).returns(t)
131
130
  @parser = Parser.new
132
- expressions = @parser.parse(filter)
133
- assert !@parser.errors?, "errors #{@parser.errors.inspect}"
134
- assert_equal 'days(-7)', expressions.first[:condition]
135
-
136
- vals = expressions.first[:value].split('-')
131
+ expressions = @parser.parse "ExpirationDate Gt days(10)"
132
+ assert !@parser.errors?
133
+ assert_equal "2021-03-04", expressions.first[:value]
134
+ assert_equal 'days(10)', expressions.first[:condition]
135
+ end
137
136
 
138
- test_time = Time.utc(vals[0].to_i, vals[1].to_i, vals[2].to_i)
139
-
140
- assert (-605000 < test_time - start && -604000 > test_time - start), "Time range off by more than five seconds #{test_time - start} '#{test_time} - #{start}'"
137
+ def test_function_weekdays
138
+ t = Time.new(2021, 2, 22, 0, 0, 0, 0)
139
+ Time.expects(:now).returns(t)
140
+ @parser = Parser.new
141
+ expressions = @parser.parse "ExpirationDate Gt weekdays(10)"
142
+ assert !@parser.errors?
143
+ assert_equal "2021-03-08", expressions.first[:value]
144
+ assert_equal 'weekdays(10)', expressions.first[:condition]
141
145
  end
142
146
 
143
147
  def test_function_now
@@ -148,8 +152,8 @@ class ParserTest < Test::Unit::TestCase
148
152
  assert !@parser.errors?, "errors #{@parser.errors.inspect}"
149
153
  assert_equal 'now()', expressions.first[:condition]
150
154
  test_time = Time.parse(expressions.first[:value])
151
- assert 5 > test_time - start, "Time range off by more than five seconds #{test_time - start}"
152
- assert -5 < test_time - start, "Time range off by more than five seconds #{test_time - start}"
155
+ assert test_time - start < 5, "Time range off by more than five seconds #{test_time - start}"
156
+ assert(test_time - start > -5, "Time range off by more than five seconds #{test_time - start}")
153
157
  end
154
158
 
155
159
  def test_function_range
@@ -174,7 +178,8 @@ class ParserTest < Test::Unit::TestCase
174
178
  assert_equal 'indexof', expression[:field_manipulations][:function_name]
175
179
  assert_equal :function, expression[:field_manipulations][:type]
176
180
  assert_equal :integer, expression[:field_manipulations][:return_type]
177
- assert_equal ['City', '4131800000000'], expression[:field_manipulations][:args].map {|v| v[:value]}
181
+ assert_equal(%w[City 4131800000000],
182
+ expression[:field_manipulations][:args].map { |v| v[:value] })
178
183
  end
179
184
 
180
185
  test 'add' do
@@ -307,7 +312,7 @@ class ParserTest < Test::Unit::TestCase
307
312
  assert_equal 'days(-7)', expressions.first[:condition]
308
313
  assert_equal([-7], expressions.first[:function_parameters])
309
314
  end
310
-
315
+
311
316
  test "function rangeable " do
312
317
  filter = "OriginalEntryTimestamp Bt days(-7),days(-1)"
313
318
  @parser = Parser.new
@@ -388,10 +393,40 @@ class ParserTest < Test::Unit::TestCase
388
393
  test "invalid regex" do
389
394
  filter = "ParcelNumber Eq regex('[1234', '')"
390
395
  @parser = Parser.new
391
- expressions = @parser.parse(filter)
396
+ @parser.parse(filter)
392
397
  assert @parser.errors?, "Parser error expected due to invalid regex"
393
398
  end
394
399
 
400
+ test "dayofyear function parses" do
401
+ filter = "dayofyear(DatetimeField) Eq 2012"
402
+ @parser = Parser.new
403
+ expressions = @parser.parse(filter)
404
+ assert !@parser.errors?, @parser.errors.inspect
405
+ function = expressions.first[:field_manipulations]
406
+ assert_equal 'dayofyear', function[:function_name]
407
+ assert_equal 'DatetimeField', function[:function_parameters].first
408
+ end
409
+
410
+ test "dayofweek function parses" do
411
+ filter = "dayofweek(DatetimeField) Eq 7"
412
+ @parser = Parser.new
413
+ expressions = @parser.parse(filter)
414
+ assert !@parser.errors?, @parser.errors.inspect
415
+ function = expressions.first[:field_manipulations]
416
+ assert_equal 'dayofweek', function[:function_name]
417
+ assert_equal 'DatetimeField', function[:function_parameters].first
418
+ end
419
+
420
+ test "weekdays function resolves" do
421
+ filter = "DatetimeField Eq weekdays(10)"
422
+ @parser = Parser.new
423
+ expressions = @parser.parse(filter)
424
+ assert !@parser.errors?, @parser.errors.inspect
425
+ function = expressions.first
426
+ assert_equal 'weekdays', function[:function_name]
427
+ assert_equal 10, function[:function_parameters].first
428
+ end
429
+
395
430
  test "allow timezone offsets" do
396
431
  values = [
397
432
  "2013-07-26",
@@ -418,7 +453,7 @@ class ParserTest < Test::Unit::TestCase
418
453
  assert_equal expressions.first[:value], value, "#{value} failed"
419
454
  end
420
455
  end
421
-
456
+
422
457
  test "Location Eq polygon()" do
423
458
  filter = "Location Eq polygon('35.12 -68.33, 35.13 -68.33, 35.13 -68.32, 35.12 -68.32')"
424
459
  @parser = Parser.new
@@ -426,7 +461,7 @@ class ParserTest < Test::Unit::TestCase
426
461
  assert !@parser.errors?, "errors #{@parser.errors.inspect}"
427
462
  assert_equal "polygon('35.12 -68.33, 35.13 -68.33, 35.13 -68.32, 35.12 -68.32')", expressions.first[:condition]
428
463
  assert_equal :shape, expressions.first[:type]
429
- assert_equal [[-68.33, 35.12], [-68.33, 35.13], [-68.32,35.13], [-68.32,35.12],[-68.33, 35.12]], expressions.first[:value].to_coordinates.first, "#{expressions.first[:value].inspect} "
464
+ assert_equal [[-68.33, 35.12], [-68.33, 35.13], [-68.32, 35.13], [-68.32, 35.12], [-68.33, 35.12]], expressions.first[:value].to_coordinates.first, "#{expressions.first[:value].inspect} "
430
465
  end
431
466
 
432
467
  test "Location Eq linestring()" do
@@ -437,7 +472,6 @@ class ParserTest < Test::Unit::TestCase
437
472
  assert_equal "linestring('35.12 -68.33, 35.13 -68.33')", expressions.first[:condition]
438
473
  assert_equal :shape, expressions.first[:type]
439
474
  assert_equal [[-68.33, 35.12], [-68.33, 35.13]], expressions.first[:value].to_coordinates, "#{expressions.first[:value].inspect} "
440
-
441
475
  end
442
476
 
443
477
  test "Location Eq rectangle()" do
@@ -446,7 +480,7 @@ class ParserTest < Test::Unit::TestCase
446
480
  expressions = @parser.parse(filter)
447
481
  assert !@parser.errors?, "errors #{@parser.errors.inspect}"
448
482
  assert_equal :shape, expressions.first[:type]
449
- assert_equal [[-68.33,35.12], [-68.32,35.12], [-68.32,35.13], [-68.33,35.13], [-68.33,35.12]], expressions.first[:value].to_coordinates.first, "#{expressions.first[:value].inspect} "
483
+ assert_equal [[-68.33, 35.12], [-68.32, 35.12], [-68.32, 35.13], [-68.33, 35.13], [-68.33, 35.12]], expressions.first[:value].to_coordinates.first, "#{expressions.first[:value].inspect} "
450
484
  end
451
485
 
452
486
  test "Location Eq radius()" do
@@ -473,26 +507,26 @@ class ParserTest < Test::Unit::TestCase
473
507
  test "Location eq radius() error on invalid syntax" do
474
508
  filter = "Location Eq radius('35.12,-68.33',1.0)"
475
509
  @parser = Parser.new
476
- expressions = @parser.parse(filter)
510
+ @parser.parse(filter)
477
511
  assert @parser.errors?, "Parser error expected due to comma between radius points"
478
512
  end
479
-
513
+
480
514
  test "Location ALL TOGETHER NOW" do
481
515
  filter = "Location Eq linestring('35.12 -68.33, 35.13 -68.33') And Location Eq radius('35.12 -68.33',1.0) And Location Eq rectangle('35.12 -68.33, 35.13 -68.32') And Location Eq polygon('35.12 -68.33, 35.13 -68.33, 35.13 -68.32, 35.12 -68.32')"
482
516
  @parser = Parser.new
483
517
  expressions = @parser.parse(filter)
484
518
  assert !@parser.errors?, "errors #{@parser.errors.inspect}"
485
- assert_equal [:shape,:shape,:shape,:shape], expressions.map{|e| e[:type]}
519
+ assert_equal(%i[shape shape shape shape], expressions.map { |e| e[:type] })
486
520
  end
487
-
521
+
488
522
  def test_for_reserved_words_first_literals_second
489
523
  ["OrOrOr Eq true", "Equador Eq true", "Oregon Ge 10"].each do |filter|
490
524
  @parser = Parser.new
491
- expressions = @parser.parse(filter)
525
+ @parser.parse(filter)
492
526
  assert !@parser.errors?, "Filter '#{filter}' errors: #{@parser.errors.inspect}"
493
527
  end
494
528
  end
495
-
529
+
496
530
  def test_custom_fields
497
531
  filter = '"General Property Description"."Taxes" Lt 500.0'
498
532
  @parser = Parser.new
@@ -502,48 +536,46 @@ class ParserTest < Test::Unit::TestCase
502
536
  assert expressions.first[:custom_field], "Custom field expression #{expressions.inspect}"
503
537
  assert_equal '500.0', expressions.first[:value], "Custom field expression #{expressions.inspect}"
504
538
  end
505
-
539
+
506
540
  def test_valid_custom_field_filters
507
541
  ['"General Property Description"."Taxes$" Lt 500.0',
508
- '"General Property Desc\'"."Taxes" Lt 500.0',
509
- '"General Property Description"."Taxes" Lt 500.0',
510
- '"General \'Property\' Description"."Taxes" Lt 500.0',
511
- '"General Property Description"."Taxes #" Lt 500.0',
512
- '"General$Description"."Taxes" Lt 500.0',
513
- '"Garage Type"."1" Eq true',
514
- '" a "." b " Lt 500.0'
515
- ].each do |filter|
542
+ '"General Property Desc\'"."Taxes" Lt 500.0',
543
+ '"General Property Description"."Taxes" Lt 500.0',
544
+ '"General \'Property\' Description"."Taxes" Lt 500.0',
545
+ '"General Property Description"."Taxes #" Lt 500.0',
546
+ '"General$Description"."Taxes" Lt 500.0',
547
+ '"Garage Type"."1" Eq true',
548
+ '" a "." b " Lt 500.0'].each do |filter|
516
549
  @parser = Parser.new
517
- expressions = @parser.parse(filter)
550
+ @parser.parse(filter)
518
551
  assert !@parser.errors?, "errors '#{filter}'\n#{@parser.errors.inspect}"
519
552
  end
520
553
  end
521
-
554
+
522
555
  def test_invalid_custom_field_filters
523
556
  ['"$General Property Description"."Taxes" Lt 500.0',
524
- '"General Property Description"."$Taxes" Lt 500.0',
525
- '"General Property Description"."Tax.es" Lt 500.0',
526
- '"General Property Description".".Taxes" Lt 500.0',
527
- '"General Property Description".".Taxes"."SUB" Lt 500.0',
528
- '"General.Description"."Taxes" Lt 500.0',
529
- '""."" Lt 500.0'
530
- ].each do |filter|
557
+ '"General Property Description"."$Taxes" Lt 500.0',
558
+ '"General Property Description"."Tax.es" Lt 500.0',
559
+ '"General Property Description".".Taxes" Lt 500.0',
560
+ '"General Property Description".".Taxes"."SUB" Lt 500.0',
561
+ '"General.Description"."Taxes" Lt 500.0',
562
+ '""."" Lt 500.0'].each do |filter|
531
563
  @parser = Parser.new
532
- expressions = @parser.parse(filter)
564
+ @parser.parse(filter)
533
565
  assert @parser.errors?, "No errors? '#{filter}'\n#{@parser.inspect}"
534
566
  end
535
567
  end
536
568
 
537
569
  def test_case_insensitve_ops_and_conjunctions
538
570
  @parser = Parser.new
539
- parse 'Test EQ 10',10.to_s
540
- parse 'Test eq 10.0',10.0.to_s
541
- parse 'Test eQ true',true.to_s
571
+ parse 'Test EQ 10', 10.to_s
572
+ parse 'Test eq 10.0', 10.0.to_s
573
+ parse 'Test eQ true', true.to_s
542
574
  parse 'Test EQ 10 AND Test NE 11', 10.to_s
543
575
  parse 'Test eq 10 or Test ne 11', 10.to_s
544
576
  parse 'Test eq 10 NOT Test ne 11', 10.to_s
545
577
  end
546
-
578
+
547
579
  def test_null
548
580
  @parser = Parser.new
549
581
  parse 'Test Eq NULL', "NULL"
@@ -557,7 +589,7 @@ class ParserTest < Test::Unit::TestCase
557
589
  end
558
590
  end
559
591
  end
560
-
592
+
561
593
  def test_not_expression
562
594
  @parser = Parser.new
563
595
  expressions = @parser.parse('Test Lt 10 Not Test Eq 2')
@@ -578,7 +610,7 @@ class ParserTest < Test::Unit::TestCase
578
610
  assert_equal "And", expression[:conjunction]
579
611
  assert_equal expression[:level], expression[:unary_level]
580
612
  end
581
-
613
+
582
614
  def test_not_expression_group
583
615
  @parser = Parser.new
584
616
  expressions = @parser.parse('Not (Test Eq 10 Or Test Eq 11)')
@@ -603,7 +635,7 @@ class ParserTest < Test::Unit::TestCase
603
635
 
604
636
  def test_not_not_expression
605
637
  @parser = Parser.new
606
- filter = "Not (Not ListPrice Eq 1) Not (Not BathsTotal Eq 2) And " +
638
+ filter = "Not (Not ListPrice Eq 1) Not (Not BathsTotal Eq 2) And " \
607
639
  "(Not TotalRooms Eq 3) Or (HasPool Eq true)"
608
640
 
609
641
  expressions = @parser.parse(filter)
@@ -672,7 +704,6 @@ class ParserTest < Test::Unit::TestCase
672
704
  assert_equal 1, e2[:level]
673
705
  assert_equal "Not", e2[:conjunction]
674
706
  assert_equal 1, e2[:conjunction_level]
675
-
676
707
  end
677
708
 
678
709
  def test_expression_conditions_attribute
@@ -704,7 +735,7 @@ class ParserTest < Test::Unit::TestCase
704
735
  ]
705
736
  conditions.each do |condition|
706
737
  @parser = Parser.new
707
- expressions = @parser.parse("Test Eq #{condition}")
738
+ @parser.parse("Test Eq #{condition}")
708
739
  assert @parser.errors?, @parser.inspect
709
740
  end
710
741
  end
@@ -714,12 +745,12 @@ class ParserTest < Test::Unit::TestCase
714
745
  "DateTimeField Bt 2013-07-26T10:22:15,2013-07-26T10:22:16",
715
746
  "DateTimeField Bt 2013-07-26T10:22:15.422804-0300,2013-07-26T10:22:15.422805-0300",
716
747
  "DateTimeField Bt 2013-07-26T10:22:15+0400,2013-07-26T10:22:16+0400"].each do |filter|
717
- @parser = Parser.new
718
- expression = @parser.parse filter
719
- assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
748
+ @parser = Parser.new
749
+ @parser.parse filter
750
+ assert !@parser.errors?, "Filter '#{filter}' failed: #{@parser.errors.first.inspect}"
720
751
  end
721
752
  end
722
-
753
+
723
754
  def test_coercible_types
724
755
  @parser = Parser.new
725
756
  assert_equal :datetime, @parser.coercible_types(:date, :datetime)
@@ -780,7 +811,6 @@ class ParserTest < Test::Unit::TestCase
780
811
  parser_errors("Field Eq -'Stringval'")
781
812
  end
782
813
 
783
-
784
814
  test "field negation" do
785
815
  @parser = Parser.new
786
816
  expressions = @parser.parse('-Test Eq 10')
@@ -827,7 +857,8 @@ class ParserTest < Test::Unit::TestCase
827
857
 
828
858
  assert_equal 'round', expression[:field_manipulations][:function_name]
829
859
  assert_equal :function, expression[:field_manipulations][:type]
830
- assert_equal ['ListPrice'], expression[:field_manipulations][:args].map {|v| v[:value]}
860
+ assert_equal(['ListPrice'],
861
+ expression[:field_manipulations][:args].map { |v| v[:value] })
831
862
  end
832
863
 
833
864
  def test_ceiling_with_literal
@@ -887,7 +918,8 @@ class ParserTest < Test::Unit::TestCase
887
918
 
888
919
  assert_equal 'floor', expression[:field_manipulations][:function_name]
889
920
  assert_equal :function, expression[:field_manipulations][:type]
890
- assert_equal ['ListPrice'], expression[:field_manipulations][:args].map {|v| v[:value]}
921
+ assert_equal(['ListPrice'],
922
+ expression[:field_manipulations][:args].map { |v| v[:value] })
891
923
  end
892
924
 
893
925
  def test_concat_with_field
@@ -898,12 +930,13 @@ class ParserTest < Test::Unit::TestCase
898
930
 
899
931
  assert_equal :character, expression[:type]
900
932
  assert_equal 'concat', expression[:field_function]
901
- assert_equal(["City", 'b'], expression[:args])
933
+ assert_equal(%w[City b], expression[:args])
902
934
  assert_equal("City", expression[:field])
903
935
 
904
936
  assert_equal 'concat', expression[:field_manipulations][:function_name]
905
937
  assert_equal :function, expression[:field_manipulations][:type]
906
- assert_equal ['City', 'b'], expression[:field_manipulations][:args].map {|v| v[:value]}
938
+ assert_equal(%w[City b],
939
+ expression[:field_manipulations][:args].map { |v| v[:value] })
907
940
  end
908
941
 
909
942
  def test_concat_with_literal
@@ -915,7 +948,7 @@ class ParserTest < Test::Unit::TestCase
915
948
  assert_equal 'concat', expression[:function_name]
916
949
  assert_equal :character, expression[:type]
917
950
  assert_equal "'ab'", expression[:value]
918
- assert_equal ["a", "b"], expression[:function_parameters]
951
+ assert_equal %w[a b], expression[:function_parameters]
919
952
  end
920
953
 
921
954
  def test_cast_with_field
@@ -930,7 +963,8 @@ class ParserTest < Test::Unit::TestCase
930
963
 
931
964
  assert_equal 'cast', expression[:field_manipulations][:function_name]
932
965
  assert_equal :function, expression[:field_manipulations][:type]
933
- assert_equal ['ListPrice', 'character'], expression[:field_manipulations][:args].map {|v| v[:value]}
966
+ assert_equal(%w[ListPrice character],
967
+ expression[:field_manipulations][:args].map { |v| v[:value] })
934
968
  end
935
969
 
936
970
  def test_cast_with_invalid_type
@@ -1131,7 +1165,7 @@ class ParserTest < Test::Unit::TestCase
1131
1165
  function2 = function1[:args].first
1132
1166
  assert_equal :function, function2[:type]
1133
1167
  assert_equal 'toupper', function2[:function_name]
1134
- assert_equal({:type=>:field, :value=>"City"}, function2[:args].first)
1168
+ assert_equal({ type: :field, value: "City" }, function2[:args].first)
1135
1169
  end
1136
1170
 
1137
1171
  test 'nested functions with multiple params' do
@@ -1142,12 +1176,12 @@ class ParserTest < Test::Unit::TestCase
1142
1176
  function1 = expression[:field_manipulations]
1143
1177
  assert_equal :function, function1[:type]
1144
1178
  assert_equal 'concat', function1[:function_name]
1145
- assert_equal({type: :character, value: 'b'}, function1[:args].last)
1179
+ assert_equal({ type: :character, value: 'b' }, function1[:args].last)
1146
1180
 
1147
1181
  function2 = function1[:args].first
1148
1182
  assert_equal :function, function2[:type]
1149
1183
  assert_equal 'tolower', function2[:function_name]
1150
- assert_equal({:type=>:field, :value=>"City"}, function2[:args].first)
1184
+ assert_equal({ type: :field, value: "City" }, function2[:args].first)
1151
1185
  end
1152
1186
 
1153
1187
  test 'parse error with no field' do
@@ -1200,30 +1234,30 @@ class ParserTest < Test::Unit::TestCase
1200
1234
 
1201
1235
  private
1202
1236
 
1203
- def parser_errors(filter)
1237
+ def parser_errors(filter)
1204
1238
  @parser = Parser.new
1205
1239
  expression = @parser.parse(filter)
1206
1240
  assert @parser.errors?, "Should find errors for '#{filter}': #{expression}"
1207
1241
  end
1208
1242
 
1209
- def parse(q,v)
1210
- expressions = @parser.parse(q)
1211
- assert !@parser.errors?, "Unexpected error parsing #{q} #{@parser.errors.inspect}"
1212
- assert_equal v, expressions.first[:value], "Expression #{expressions.inspect}"
1243
+ def parse(query, value)
1244
+ expressions = @parser.parse(query)
1245
+ assert !@parser.errors?, "Unexpected error parsing #{query} #{@parser.errors.inspect}"
1246
+ assert_equal value, expressions.first[:value], "Expression #{expressions.inspect}"
1213
1247
  assert !expressions.first[:custom_field], "Unexepected custom field #{expressions.inspect}"
1214
1248
  end
1215
1249
 
1216
1250
  # verify each expression in the query is at the right nesting level and group
1217
- def assert_nesting(sparkql, levels=[], block_groups=nil)
1251
+ def assert_nesting(sparkql, levels = [], block_groups = nil)
1218
1252
  block_groups = levels.clone if block_groups.nil?
1219
1253
  parser = Parser.new
1220
1254
  expressions = parser.parse(sparkql)
1221
1255
  assert !parser.errors?, "Unexpected error parsing #{sparkql}: #{parser.errors.inspect}"
1222
1256
  count = 0
1223
1257
  expressions.each do |ex|
1224
- assert_equal levels[count], ex[:level], "Nesting level wrong for #{ex.inspect}"
1225
- assert_equal(block_groups[count], ex[:block_group], "Nesting block group wrong for #{ex.inspect}")
1226
- count +=1
1258
+ assert_equal levels[count], ex[:level], "Nesting level wrong for #{ex.inspect}"
1259
+ assert_equal(block_groups[count], ex[:block_group], "Nesting block group wrong for #{ex.inspect}")
1260
+ count += 1
1227
1261
  end
1228
1262
  end
1229
1263
  end