Class: TestParameterExpansion

Inherits:
Minitest::Test
  • Object
show all
Defined in:
lib/parameter_expansion.rb

Overview

Minitest tests for ParameterExpansion

Instance Method Summary collapse

Instance Method Details

#test_all_invocation_combinationsObject



802
803
804
805
806
807
808
809
810
811
812
# File 'lib/parameter_expansion.rb', line 802

def test_all_invocation_combinations
  # Test all 16 combinations from the documentation
  combinations = %w[cc ce cl cv ec ee el ev lc le ll lv vc ve vl vv]
  
  combinations.each do |invocation|
    expansion, new_var = ParameterExpansion.expand_parameter("PARAM", invocation, "test_value")
    assert_instance_of String, expansion
    # new_var can be nil or NewVariable object
    assert(new_var.nil? || new_var.is_a?(ParameterExpansion::NewVariable))
  end
end

#test_backward_compatibility_with_q_codesObject



618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
# File 'lib/parameter_expansion.rb', line 618

def test_backward_compatibility_with_q_codes
  # Test that old Q codes still work
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "qq", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "qe", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "qc", "hello world")
  assert_equal 'printf %s "hello world"', expansion
  assert_nil new_var

  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "qv", "hello world", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
end

#test_command_substitution_codesObject

IMPL-001: Command substitution with proper shell syntax



525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
# File 'lib/parameter_expansion.rb', line 525

def test_command_substitution_codes
  # :cc= - command as command
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "cc", "ls -la")
  assert_equal "ls -la", expansion
  assert_nil new_var

  # :ce= - command as expression
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ce", "ls -la", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "PARAM_", new_var.name
  assert_equal "ls -la", new_var.value
  assert_equal "$(ls -la)", new_var.assignment_code

  # :cl= - command as literal
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "cl", "ls -la", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var

  # :cv= - command as variable
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "cv", "ls -la", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
end

#test_expand_parameter_returns_arrayObject

TEST-001: Basic functionality verification



518
519
520
521
522
# File 'lib/parameter_expansion.rb', line 518

def test_expand_parameter_returns_array
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "cc", "ls -la")
  assert_equal "ls -la", expansion
  assert_nil new_var
end

#test_expand_parameter_string_backward_compatibilityObject



648
649
650
651
652
653
654
655
# File 'lib/parameter_expansion.rb', line 648

def test_expand_parameter_string_backward_compatibility
  # Test the convenience method
  result = ParameterExpansion.expand_parameter_string("PARAM", "cc", "ls -la")
  assert_equal "ls -la", result

  result = ParameterExpansion.expand_parameter_string("PARAM", "ce", "ls -la", unique: '')
  assert_equal "PARAM_", result
end

#test_expand_parameters_batch_processingObject



657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
# File 'lib/parameter_expansion.rb', line 657

def test_expand_parameters_batch_processing
  parameters = {
    "COMMAND" => ["ce", "ls -la"],
    "TITLE" => ["ll", "My Document"],
    "VARIABLE" => ["ev", "hello world"]
  }

  expansions, new_variables = ParameterExpansion.expand_parameters(parameters, unique: '')

  assert_equal 3, expansions.size
  assert_equal "COMMAND_", expansions["COMMAND"]
  assert_equal "My Document", expansions["TITLE"]
  assert_equal "VARIABLE_", expansions["VARIABLE"]

  assert_equal 2, new_variables.size
  assert_equal "COMMAND_", new_variables[0].name
  assert_equal "ls -la", new_variables[0].value
  assert_equal "VARIABLE_", new_variables[1].name
  assert_equal "hello world", new_variables[1].value
end

#test_expression_codesObject



550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
# File 'lib/parameter_expansion.rb', line 550

def test_expression_codes
  # :ec= - expression as command
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ec", "hello world")
  assert_equal 'printf %s "hello world"', expansion
  assert_nil new_var

  # :ee= - expression as expression
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ee", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  # :el= - expression as literal
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "el", "hello world")
  assert_equal '$(printf %s "hello world")', expansion
  assert_nil new_var

  # :ev= - expression as variable
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ev", "hello world", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal '"hello world"', new_var.assignment_code
end

#test_invalid_invocation_codesObject



694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
# File 'lib/parameter_expansion.rb', line 694

def test_invalid_invocation_codes
  # Test with nil invocation
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", nil, "value")
  assert_equal "value", expansion
  assert_nil new_var

  # Test with empty invocation
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "", "value")
  assert_equal "value", expansion
  assert_nil new_var

  # Test with unknown input type
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "xx", "value")
  assert_equal "value", expansion
  assert_nil new_var
end

#test_literal_codesObject



573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
# File 'lib/parameter_expansion.rb', line 573

def test_literal_codes
  # :lc= - literal as command
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "lc", "hello world")
  assert_equal 'printf %s "hello world"', expansion
  assert_nil new_var

  # :le= - literal as expression
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "le", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  # :ll= - literal as literal
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ll", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  # :lv= - literal as variable
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "lv", "hello world", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "hello\\ world", new_var.assignment_code
end

#test_mixed_l_q_codesObject



637
638
639
640
641
642
643
644
645
646
# File 'lib/parameter_expansion.rb', line 637

def test_mixed_l_q_codes
  # Test mixed L/Q combinations
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "lq", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ql", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var
end

#test_new_variable_structureObject



678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
# File 'lib/parameter_expansion.rb', line 678

def test_new_variable_structure
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ce", "ls -la", unique: '')
  
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "PARAM_", new_var.name
  assert_equal "ls -la", new_var.value
  assert_equal "$(ls -la)", new_var.assignment_code
  assert_equal "ce", new_var.invocation
  assert_equal "PARAM", new_var.param

  # Test to_s method
  assert_includes new_var.to_s, "PARAM"
  assert_includes new_var.to_s, "ls -la"
  assert_includes new_var.to_s, "ce"
end

#test_param_wrapped_helper_methodsObject



856
857
858
859
860
861
862
863
864
865
866
867
868
869
# File 'lib/parameter_expansion.rb', line 856

def test_param_wrapped_helper_methods
  # Test the helper methods directly
  assert ParameterExpansion.param_wrapped?("${MY_VAR}")
  assert ParameterExpansion.param_wrapped?("${COMPLEX_VAR}")
  refute ParameterExpansion.param_wrapped?("MY_VAR")
  refute ParameterExpansion.param_wrapped?("${MY_VAR")
  refute ParameterExpansion.param_wrapped?("MY_VAR}")
  refute ParameterExpansion.param_wrapped?("")

  # Test get_variable_reference method
  assert_equal "${MY_VAR}", ParameterExpansion.get_variable_reference("MY_VAR")
  assert_equal "${COMPLEX_VAR}", ParameterExpansion.get_variable_reference("${COMPLEX_VAR}")
  assert_equal "${${NESTED}}", ParameterExpansion.get_variable_reference("${${NESTED}}")
end

#test_pre_wrapped_parametersObject



826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
# File 'lib/parameter_expansion.rb', line 826

def test_pre_wrapped_parameters
  # Test that parameters already wrapped with ${} are used as-is
  
  # Test command substitution with pre-wrapped parameter
  expansion, new_var = ParameterExpansion.expand_parameter("${MY_VAR}", "ce", "ls -la", unique: '')
  assert_equal "${MY_VAR}_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "${MY_VAR}_", new_var.name
  assert_equal "ls -la", new_var.value
  assert_equal "$(ls -la)", new_var.assignment_code

  # Test command substitution with pre-wrapped parameter (literal output)
  expansion, new_var = ParameterExpansion.expand_parameter("${MY_VAR}", "cl", "ls -la", unique: '')
  assert_equal "${MY_VAR}_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "${MY_VAR}_", new_var.name

  # Test that regular parameters still get wrapped
  expansion, new_var = ParameterExpansion.expand_parameter("MY_VAR", "ce", "ls -la", unique: '')
  assert_equal "MY_VAR_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "MY_VAR_", new_var.name

  # Test with complex pre-wrapped parameter
  expansion, new_var = ParameterExpansion.expand_parameter("${COMPLEX_VAR_NAME}", "ce", "echo hello", unique: '')
  assert_equal "${COMPLEX_VAR_NAME}_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "${COMPLEX_VAR_NAME}_", new_var.name
end

#test_pre_wrapped_valuesObject



871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
# File 'lib/parameter_expansion.rb', line 871

def test_pre_wrapped_values
  # Test that values already wrapped with ${} are used as-is
  
  # Test variable reference with pre-wrapped value
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ve", "${MY_VAR}")
  assert_equal "${MY_VAR}", expansion
  assert_nil new_var

  # Test variable reference with pre-wrapped value (literal output)
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "vl", "${MY_VAR}")
  assert_equal "${MY_VAR}", expansion
  assert_nil new_var

  # Test variable reference with pre-wrapped value (command output)
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "vc", "${MY_VAR}")
  assert_equal 'printf %s "${MY_VAR}"', expansion
  assert_nil new_var

  # Test that regular values still get wrapped
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ve", "MY_VAR")
  assert_equal "${MY_VAR}", expansion
  assert_nil new_var

  # Test with complex pre-wrapped value
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ve", "${COMPLEX_VAR_NAME}")
  assert_equal "${COMPLEX_VAR_NAME}", expansion
  assert_nil new_var
end

#test_shellwords_escapingObject



711
712
713
714
715
# File 'lib/parameter_expansion.rb', line 711

def test_shellwords_escaping
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "lv", "hello world with spaces")
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "hello\\ world\\ with\\ spaces", new_var.assignment_code
end

#test_single_character_combinationsObject



814
815
816
817
818
819
820
821
822
823
824
# File 'lib/parameter_expansion.rb', line 814

def test_single_character_combinations
  # Test all single character combinations
  single_chars = %w[c e l v]
  
  single_chars.each do |invocation|
    expansion, new_var = ParameterExpansion.expand_parameter("PARAM", invocation, "test_value")
    assert_instance_of String, expansion
    # new_var can be nil or NewVariable object
    assert(new_var.nil? || new_var.is_a?(ParameterExpansion::NewVariable))
  end
end

#test_single_character_equivalenceObject



743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
# File 'lib/parameter_expansion.rb', line 743

def test_single_character_equivalence
  # Test that single character codes are equivalent to their Q counterparts
  
  # :c= should be equivalent to :cq=
  # , unique: rand(1e4)
  unique = rand(1e4)

  expansion1, new_var1 = ParameterExpansion.expand_parameter("PARAM", "c", "ls -la", unique: unique)
  expansion2, new_var2 = ParameterExpansion.expand_parameter("PARAM", "cq", "ls -la", unique: unique)
  assert_equal expansion1, expansion2
  if new_var1 && new_var2
    assert_equal new_var1.name, new_var2.name
    assert_equal new_var1.value, new_var2.value
    assert_equal new_var1.assignment_code, new_var2.assignment_code
  else
    assert_nil new_var1
    assert_nil new_var2
  end

  # :e= should be equivalent to :eq=
  expansion1, new_var1 = ParameterExpansion.expand_parameter("PARAM", "e", "hello world")
  expansion2, new_var2 = ParameterExpansion.expand_parameter("PARAM", "eq", "hello world")
  assert_equal expansion1, expansion2
  if new_var1 && new_var2
    assert_equal new_var1.name, new_var2.name
    assert_equal new_var1.value, new_var2.value
    assert_equal new_var1.assignment_code, new_var2.assignment_code
  else
    assert_nil new_var1
    assert_nil new_var2
  end

  # :l= should be equivalent to :lq=
  expansion1, new_var1 = ParameterExpansion.expand_parameter("PARAM", "l", "hello world")
  expansion2, new_var2 = ParameterExpansion.expand_parameter("PARAM", "lq", "hello world")
  assert_equal expansion1, expansion2
  if new_var1 && new_var2
    assert_equal new_var1.name, new_var2.name
    assert_equal new_var1.value, new_var2.value
    assert_equal new_var1.assignment_code, new_var2.assignment_code
  else
    assert_nil new_var1
    assert_nil new_var2
  end

  # :v= should be equivalent to :vq=
  expansion1, new_var1 = ParameterExpansion.expand_parameter("PARAM", "v", "MY_VAR")
  expansion2, new_var2 = ParameterExpansion.expand_parameter("PARAM", "vq", "MY_VAR")
  assert_equal expansion1, expansion2
  if new_var1 && new_var2
    assert_equal new_var1.name, new_var2.name
    assert_equal new_var1.value, new_var2.value
    assert_equal new_var1.assignment_code, new_var2.assignment_code
  else
    assert_nil new_var1
    assert_nil new_var2
  end
end

#test_single_character_invocation_codesObject

IMPL-005: Single character code support



718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
# File 'lib/parameter_expansion.rb', line 718

def test_single_character_invocation_codes
  # Test single character codes that default to Q (literal)
  
  # :c= - command as literal (defaults to Q, equivalent to :cq=)
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "c", "ls -la", unique: '')
  assert_equal "PARAM_", expansion
  assert_instance_of ParameterExpansion::NewVariable, new_var
  assert_equal "$(ls -la)", new_var.assignment_code

  # :e= - expression as literal (defaults to Q, equivalent to :eq=)
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "e", "hello world")
  assert_equal '$(printf %s "hello world")', expansion
  assert_nil new_var

  # :l= - literal as literal (defaults to Q, equivalent to :lq=)
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "l", "hello world")
  assert_equal "hello world", expansion
  assert_nil new_var

  # :v= - variable as literal (defaults to Q, equivalent to :vq=)
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "v", "MY_VAR")
  assert_equal "${MY_VAR}", expansion
  assert_nil new_var
end

#test_value_wrapped_helper_methodsObject



900
901
902
903
904
905
906
907
908
909
910
911
912
913
# File 'lib/parameter_expansion.rb', line 900

def test_value_wrapped_helper_methods
  # Test the value helper methods directly
  assert ParameterExpansion.value_wrapped?("${MY_VAR}")
  assert ParameterExpansion.value_wrapped?("${COMPLEX_VAR}")
  refute ParameterExpansion.value_wrapped?("MY_VAR")
  refute ParameterExpansion.value_wrapped?("${MY_VAR")
  refute ParameterExpansion.value_wrapped?("MY_VAR}")
  refute ParameterExpansion.value_wrapped?("")

  # Test get_value_reference method
  assert_equal "${MY_VAR}", ParameterExpansion.get_value_reference("MY_VAR")
  assert_equal "${COMPLEX_VAR}", ParameterExpansion.get_value_reference("${COMPLEX_VAR}")
  assert_equal "${${NESTED}}", ParameterExpansion.get_value_reference("${${NESTED}}")
end

#test_variable_codesObject



596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
# File 'lib/parameter_expansion.rb', line 596

def test_variable_codes
  # :vc= - variable as command
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "vc", "MY_VAR")
  assert_equal 'printf %s "${MY_VAR}"', expansion
  assert_nil new_var

  # :ve= - variable as expression
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "ve", "MY_VAR")
  assert_equal "${MY_VAR}", expansion
  assert_nil new_var

  # :vl= - variable as literal
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "vl", "MY_VAR")
  assert_equal "${MY_VAR}", expansion
  assert_nil new_var

  # :vv= - variable as variable
  expansion, new_var = ParameterExpansion.expand_parameter("PARAM", "vv", "MY_VAR")
  assert_equal "MY_VAR", expansion
  assert_nil new_var
end