|  | 
| 9 | 9 |  ServerValidationError, | 
| 10 | 10 |  ServerError, | 
| 11 | 11 | } from "../source/error"; | 
| 12 |  | -import { Session } from "../source/session"; | 
|  | 12 | +import { Session, expression } from "../source/session"; | 
| 13 | 13 | import * as operation from "../source/operation"; | 
| 14 | 14 | import querySchemas from "./fixtures/query_schemas.json"; | 
| 15 | 15 | import queryServerInformation from "./fixtures/query_server_information.json"; | 
| @@ -73,7 +73,7 @@ describe("Session", () => { | 
| 73 | 73 |  const headers = new Promise<Headers>((resolve) => { | 
| 74 | 74 |  server.use( | 
| 75 | 75 |  rest.post("http://ftrack.test/api", (req, res, ctx) => { | 
| 76 |  | - resolve(req.headers); | 
|  | 76 | + resolve(req.headers as any); | 
| 77 | 77 |  return res.once(ctx.json(getInitialSessionQuery())); | 
| 78 | 78 |  }) | 
| 79 | 79 |  ); | 
| @@ -165,7 +165,7 @@ describe("Session", () => { | 
| 165 | 165 |  const headers = new Promise<Headers>((resolve) => { | 
| 166 | 166 |  server.use( | 
| 167 | 167 |  rest.post("http://ftrack.test/api", (req, res, ctx) => { | 
| 168 |  | - resolve(req.headers); | 
|  | 168 | + resolve(req.headers as any); | 
| 169 | 169 |  return res.once(ctx.json(getExampleQuery())); | 
| 170 | 170 |  }) | 
| 171 | 171 |  ); | 
| @@ -794,3 +794,95 @@ describe("Encoding entities", () => { | 
| 794 | 794 |  ]); | 
| 795 | 795 |  }); | 
| 796 | 796 | }); | 
|  | 797 | + | 
|  | 798 | +describe("Prepared template tests", () => { | 
|  | 799 | + it("escapes single quotes in interpolated values", () => { | 
|  | 800 | + const result = expression`It's ${"amazing"} here.`; | 
|  | 801 | + expect(result).toBe("It's amazing here."); | 
|  | 802 | + }); | 
|  | 803 | + | 
|  | 804 | + it("escapes double quotes in interpolated values", () => { | 
|  | 805 | + const result = expression`She said, ${'"Hello!"'} to him.`; | 
|  | 806 | + expect(result).toBe('She said, \\"Hello!\\" to him.'); | 
|  | 807 | + }); | 
|  | 808 | + | 
|  | 809 | + it("escapes quotes when mixing multiple types", () => { | 
|  | 810 | + const result = expression`Quotes: ${`"begin and end'`}.`; | 
|  | 811 | + expect(result).toBe(`Quotes: \\"begin and end\\'.`); | 
|  | 812 | + }); | 
|  | 813 | + | 
|  | 814 | + it("works with multiple interpolated values", () => { | 
|  | 815 | + const result = expression`This is ${"first"} and this is ${"second"}.`; | 
|  | 816 | + expect(result).toBe("This is first and this is second."); | 
|  | 817 | + }); | 
|  | 818 | + | 
|  | 819 | + it("works without any interpolated values", () => { | 
|  | 820 | + const result = expression`Just a string without any interpolation.`; | 
|  | 821 | + expect(result).toBe("Just a string without any interpolation."); | 
|  | 822 | + }); | 
|  | 823 | + | 
|  | 824 | + it("works with empty string as interpolated value", () => { | 
|  | 825 | + const result = expression`This is an ${""} empty value.`; | 
|  | 826 | + expect(result).toBe("This is an empty value."); | 
|  | 827 | + }); | 
|  | 828 | + it("handles no arguments", () => { | 
|  | 829 | + const result = expression``; | 
|  | 830 | + expect(result).toBe(""); | 
|  | 831 | + }); | 
|  | 832 | + it("handles backslashes in interpolated values", () => { | 
|  | 833 | + const result = expression`This is a backslash: ${"\\"}.`; | 
|  | 834 | + expect(result).toBe("This is a backslash: \\."); | 
|  | 835 | + }); | 
|  | 836 | + it("handles unusual characters", () => { | 
|  | 837 | + const result = expression`${"æøåßđŋħłøœŧźżšđžčćñé.,;:!?()[]{}<></>+-*/=<>^%&|~©®™µƒ∂∆πΣΩ$€£¥¢₹₽😀😍🤖👍❤️"}`; | 
|  | 838 | + expect(result).toBe( | 
|  | 839 | + "æøåßđŋħłøœŧźżšđžčćñé.,;:!?()[]{}<></>+-*/=<>^%&|~©®™µƒ∂∆πΣΩ$€£¥¢₹₽😀😍🤖👍❤️" | 
|  | 840 | + ); | 
|  | 841 | + }); | 
|  | 842 | +}); | 
|  | 843 | + | 
|  | 844 | +describe("Prepared template tests", () => { | 
|  | 845 | + it("escapes single quotes in interpolated values", () => { | 
|  | 846 | + const result = expression`It's ${"amazing"} here.`; | 
|  | 847 | + expect(result).toBe("It's amazing here."); | 
|  | 848 | + }); | 
|  | 849 | + | 
|  | 850 | + it("escapes double quotes in interpolated values", () => { | 
|  | 851 | + const result = expression`She said, ${'"Hello!"'} to him.`; | 
|  | 852 | + expect(result).toBe('She said, \\"Hello!\\" to him.'); | 
|  | 853 | + }); | 
|  | 854 | + | 
|  | 855 | + it("escapes quotes when mixing multiple types", () => { | 
|  | 856 | + const result = expression`Quotes: ${`"begin and end'`}.`; | 
|  | 857 | + expect(result).toBe(`Quotes: \\"begin and end\\'.`); | 
|  | 858 | + }); | 
|  | 859 | + | 
|  | 860 | + it("works with multiple interpolated values", () => { | 
|  | 861 | + const result = expression`This is ${"first"} and this is ${"second"}.`; | 
|  | 862 | + expect(result).toBe("This is first and this is second."); | 
|  | 863 | + }); | 
|  | 864 | + | 
|  | 865 | + it("works without any interpolated values", () => { | 
|  | 866 | + const result = expression`Just a string without any interpolation.`; | 
|  | 867 | + expect(result).toBe("Just a string without any interpolation."); | 
|  | 868 | + }); | 
|  | 869 | + | 
|  | 870 | + it("works with empty string as interpolated value", () => { | 
|  | 871 | + const result = expression`This is an ${""} empty value.`; | 
|  | 872 | + expect(result).toBe("This is an empty value."); | 
|  | 873 | + }); | 
|  | 874 | + it("handles no arguments", () => { | 
|  | 875 | + const result = expression``; | 
|  | 876 | + expect(result).toBe(""); | 
|  | 877 | + }); | 
|  | 878 | + it("handles backslashes in interpolated values", () => { | 
|  | 879 | + const result = expression`This is a backslash: ${"\\"}.`; | 
|  | 880 | + expect(result).toBe("This is a backslash: \\."); | 
|  | 881 | + }); | 
|  | 882 | + it("handles unusual characters", () => { | 
|  | 883 | + const result = expression`${"æøåßđŋħłøœŧźżšđžčćñé.,;:!?()[]{}<></>+-*/=<>^%&|~©®™µƒ∂∆πΣΩ$€£¥¢₹₽😀😍🤖👍❤️"}`; | 
|  | 884 | + expect(result).toBe( | 
|  | 885 | + "æøåßđŋħłøœŧźżšđžčćñé.,;:!?()[]{}<></>+-*/=<>^%&|~©®™µƒ∂∆πΣΩ$€£¥¢₹₽😀😍🤖👍❤️" | 
|  | 886 | + ); | 
|  | 887 | + }); | 
|  | 888 | +}); | 
0 commit comments