OLD | NEW |
1 // Copyright 2011 The Go Authors. All rights reserved. | 1 // Copyright 2011 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 package template | 5 package template |
6 | 6 |
7 import ( | 7 import ( |
8 "bytes" | 8 "bytes" |
9 "errors" | 9 "errors" |
10 "flag" | 10 "flag" |
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
895 {"eq true true", "true", true}, | 895 {"eq true true", "true", true}, |
896 {"eq true false", "false", true}, | 896 {"eq true false", "false", true}, |
897 {"eq 1+2i 1+2i", "true", true}, | 897 {"eq 1+2i 1+2i", "true", true}, |
898 {"eq 1+2i 1+3i", "false", true}, | 898 {"eq 1+2i 1+3i", "false", true}, |
899 {"eq 1.5 1.5", "true", true}, | 899 {"eq 1.5 1.5", "true", true}, |
900 {"eq 1.5 2.5", "false", true}, | 900 {"eq 1.5 2.5", "false", true}, |
901 {"eq 1 1", "true", true}, | 901 {"eq 1 1", "true", true}, |
902 {"eq 1 2", "false", true}, | 902 {"eq 1 2", "false", true}, |
903 {"eq `xy` `xy`", "true", true}, | 903 {"eq `xy` `xy`", "true", true}, |
904 {"eq `xy` `xyz`", "false", true}, | 904 {"eq `xy` `xyz`", "false", true}, |
905 » {"eq .Xuint .Xuint", "true", true}, | 905 » {"eq .Uthree .Uthree", "true", true}, |
906 » {"eq .Xuint .Yuint", "false", true}, | 906 » {"eq .Uthree .Ufour", "false", true}, |
907 {"eq 3 4 5 6 3", "true", true}, | 907 {"eq 3 4 5 6 3", "true", true}, |
908 {"eq 3 4 5 6 7", "false", true}, | 908 {"eq 3 4 5 6 7", "false", true}, |
909 {"ne true true", "false", true}, | 909 {"ne true true", "false", true}, |
910 {"ne true false", "true", true}, | 910 {"ne true false", "true", true}, |
911 {"ne 1+2i 1+2i", "false", true}, | 911 {"ne 1+2i 1+2i", "false", true}, |
912 {"ne 1+2i 1+3i", "true", true}, | 912 {"ne 1+2i 1+3i", "true", true}, |
913 {"ne 1.5 1.5", "false", true}, | 913 {"ne 1.5 1.5", "false", true}, |
914 {"ne 1.5 2.5", "true", true}, | 914 {"ne 1.5 2.5", "true", true}, |
915 {"ne 1 1", "false", true}, | 915 {"ne 1 1", "false", true}, |
916 {"ne 1 2", "true", true}, | 916 {"ne 1 2", "true", true}, |
917 {"ne `xy` `xy`", "false", true}, | 917 {"ne `xy` `xy`", "false", true}, |
918 {"ne `xy` `xyz`", "true", true}, | 918 {"ne `xy` `xyz`", "true", true}, |
919 » {"ne .Xuint .Xuint", "false", true}, | 919 » {"ne .Uthree .Uthree", "false", true}, |
920 » {"ne .Xuint .Yuint", "true", true}, | 920 » {"ne .Uthree .Ufour", "true", true}, |
921 {"lt 1.5 1.5", "false", true}, | 921 {"lt 1.5 1.5", "false", true}, |
922 {"lt 1.5 2.5", "true", true}, | 922 {"lt 1.5 2.5", "true", true}, |
923 {"lt 1 1", "false", true}, | 923 {"lt 1 1", "false", true}, |
924 {"lt 1 2", "true", true}, | 924 {"lt 1 2", "true", true}, |
925 {"lt `xy` `xy`", "false", true}, | 925 {"lt `xy` `xy`", "false", true}, |
926 {"lt `xy` `xyz`", "true", true}, | 926 {"lt `xy` `xyz`", "true", true}, |
927 » {"lt .Xuint .Xuint", "false", true}, | 927 » {"lt .Uthree .Uthree", "false", true}, |
928 » {"lt .Xuint .Yuint", "true", true}, | 928 » {"lt .Uthree .Ufour", "true", true}, |
929 {"le 1.5 1.5", "true", true}, | 929 {"le 1.5 1.5", "true", true}, |
930 {"le 1.5 2.5", "true", true}, | 930 {"le 1.5 2.5", "true", true}, |
931 {"le 2.5 1.5", "false", true}, | 931 {"le 2.5 1.5", "false", true}, |
932 {"le 1 1", "true", true}, | 932 {"le 1 1", "true", true}, |
933 {"le 1 2", "true", true}, | 933 {"le 1 2", "true", true}, |
934 {"le 2 1", "false", true}, | 934 {"le 2 1", "false", true}, |
935 {"le `xy` `xy`", "true", true}, | 935 {"le `xy` `xy`", "true", true}, |
936 {"le `xy` `xyz`", "true", true}, | 936 {"le `xy` `xyz`", "true", true}, |
937 {"le `xyz` `xy`", "false", true}, | 937 {"le `xyz` `xy`", "false", true}, |
938 » {"le .Xuint .Xuint", "true", true}, | 938 » {"le .Uthree .Uthree", "true", true}, |
939 » {"le .Xuint .Yuint", "true", true}, | 939 » {"le .Uthree .Ufour", "true", true}, |
940 » {"le .Yuint .Xuint", "false", true}, | 940 » {"le .Ufour .Uthree", "false", true}, |
941 {"gt 1.5 1.5", "false", true}, | 941 {"gt 1.5 1.5", "false", true}, |
942 {"gt 1.5 2.5", "false", true}, | 942 {"gt 1.5 2.5", "false", true}, |
943 {"gt 1 1", "false", true}, | 943 {"gt 1 1", "false", true}, |
944 {"gt 2 1", "true", true}, | 944 {"gt 2 1", "true", true}, |
945 {"gt 1 2", "false", true}, | 945 {"gt 1 2", "false", true}, |
946 {"gt `xy` `xy`", "false", true}, | 946 {"gt `xy` `xy`", "false", true}, |
947 {"gt `xy` `xyz`", "false", true}, | 947 {"gt `xy` `xyz`", "false", true}, |
948 » {"gt .Xuint .Xuint", "false", true}, | 948 » {"gt .Uthree .Uthree", "false", true}, |
949 » {"gt .Xuint .Yuint", "false", true}, | 949 » {"gt .Uthree .Ufour", "false", true}, |
950 » {"gt .Yuint .Xuint", "true", true}, | 950 » {"gt .Ufour .Uthree", "true", true}, |
951 {"ge 1.5 1.5", "true", true}, | 951 {"ge 1.5 1.5", "true", true}, |
952 {"ge 1.5 2.5", "false", true}, | 952 {"ge 1.5 2.5", "false", true}, |
953 {"ge 2.5 1.5", "true", true}, | 953 {"ge 2.5 1.5", "true", true}, |
954 {"ge 1 1", "true", true}, | 954 {"ge 1 1", "true", true}, |
955 {"ge 1 2", "false", true}, | 955 {"ge 1 2", "false", true}, |
956 {"ge 2 1", "true", true}, | 956 {"ge 2 1", "true", true}, |
957 {"ge `xy` `xy`", "true", true}, | 957 {"ge `xy` `xy`", "true", true}, |
958 {"ge `xy` `xyz`", "false", true}, | 958 {"ge `xy` `xyz`", "false", true}, |
959 {"ge `xyz` `xy`", "true", true}, | 959 {"ge `xyz` `xy`", "true", true}, |
960 » {"ge .Xuint .Xuint", "true", true}, | 960 » {"ge .Uthree .Uthree", "true", true}, |
961 » {"ge .Xuint .Yuint", "false", true}, | 961 » {"ge .Uthree .Ufour", "false", true}, |
962 » {"ge .Yuint .Xuint", "true", true}, | 962 » {"ge .Ufour .Uthree", "true", true}, |
| 963 » // Mixing signed and unsigned integers. |
| 964 » {"eq .Uthree .Three", "true", true}, |
| 965 » {"eq .Three .Uthree", "true", true}, |
| 966 » {"le .Uthree .Three", "true", true}, |
| 967 » {"le .Three .Uthree", "true", true}, |
| 968 » {"ge .Uthree .Three", "true", true}, |
| 969 » {"ge .Three .Uthree", "true", true}, |
| 970 » {"lt .Uthree .Three", "false", true}, |
| 971 » {"lt .Three .Uthree", "false", true}, |
| 972 » {"gt .Uthree .Three", "false", true}, |
| 973 » {"gt .Three .Uthree", "false", true}, |
| 974 » {"eq .Ufour .Three", "false", true}, |
| 975 » {"lt .Ufour .Three", "false", true}, |
| 976 » {"gt .Ufour .Three", "true", true}, |
| 977 » {"eq .NegOne .Uthree", "false", true}, |
| 978 » {"eq .Uthree .NegOne", "false", true}, |
| 979 » {"ne .NegOne .Uthree", "true", true}, |
| 980 » {"ne .Uthree .NegOne", "true", true}, |
| 981 » {"lt .NegOne .Uthree", "true", true}, |
| 982 » {"lt .Uthree .NegOne", "false", true}, |
| 983 » {"le .NegOne .Uthree", "true", true}, |
| 984 » {"le .Uthree .NegOne", "false", true}, |
| 985 » {"gt .NegOne .Uthree", "false", true}, |
| 986 » {"gt .Uthree .NegOne", "true", true}, |
| 987 » {"ge .NegOne .Uthree", "false", true}, |
| 988 » {"ge .Uthree .NegOne", "true", true}, |
| 989 » {"eq (index `x` 0) 'x'", "true", true}, // The example that triggered th
is rule. |
| 990 » {"eq (index `x` 0) 'y'", "false", true}, |
963 // Errors | 991 // Errors |
964 {"eq `xy` 1", "", false}, // Different types. | 992 {"eq `xy` 1", "", false}, // Different types. |
| 993 {"eq 2 2.0", "", false}, // Different types. |
965 {"lt true true", "", false}, // Unordered types. | 994 {"lt true true", "", false}, // Unordered types. |
966 {"lt 1+0i 1+0i", "", false}, // Unordered types. | 995 {"lt 1+0i 1+0i", "", false}, // Unordered types. |
967 } | 996 } |
968 | 997 |
969 func TestComparison(t *testing.T) { | 998 func TestComparison(t *testing.T) { |
970 b := new(bytes.Buffer) | 999 b := new(bytes.Buffer) |
971 var cmpStruct = struct { | 1000 var cmpStruct = struct { |
972 » » Xuint, Yuint uint | 1001 » » Uthree, Ufour uint |
973 » }{3, 4} | 1002 » » NegOne, Three int |
| 1003 » }{3, 4, -1, 3} |
974 for _, test := range cmpTests { | 1004 for _, test := range cmpTests { |
975 text := fmt.Sprintf("{{if %s}}true{{else}}false{{end}}", test.ex
pr) | 1005 text := fmt.Sprintf("{{if %s}}true{{else}}false{{end}}", test.ex
pr) |
976 tmpl, err := New("empty").Parse(text) | 1006 tmpl, err := New("empty").Parse(text) |
977 if err != nil { | 1007 if err != nil { |
978 » » » t.Fatal(err) | 1008 » » » t.Fatalf("%q: %s", test.expr, err) |
979 } | 1009 } |
980 b.Reset() | 1010 b.Reset() |
981 err = tmpl.Execute(b, &cmpStruct) | 1011 err = tmpl.Execute(b, &cmpStruct) |
982 if test.ok && err != nil { | 1012 if test.ok && err != nil { |
983 t.Errorf("%s errored incorrectly: %s", test.expr, err) | 1013 t.Errorf("%s errored incorrectly: %s", test.expr, err) |
984 continue | 1014 continue |
985 } | 1015 } |
986 if !test.ok && err == nil { | 1016 if !test.ok && err == nil { |
987 t.Errorf("%s did not error", test.expr) | 1017 t.Errorf("%s did not error", test.expr) |
988 continue | 1018 continue |
989 } | 1019 } |
990 if b.String() != test.truth { | 1020 if b.String() != test.truth { |
991 t.Errorf("%s: want %s; got %s", test.expr, test.truth, b
.String()) | 1021 t.Errorf("%s: want %s; got %s", test.expr, test.truth, b
.String()) |
992 } | 1022 } |
993 } | 1023 } |
994 } | 1024 } |
OLD | NEW |