1*082815dcSEvan Baconimport { appendContentsInsideDeclarationBlock, findNewInstanceCodeBlock } from '../codeMod';
2*082815dcSEvan Bacon
3*082815dcSEvan Bacondescribe(findNewInstanceCodeBlock, () => {
4*082815dcSEvan Bacon  it('should support classic new instance - java', () => {
5*082815dcSEvan Bacon    const contents = 'final Foo instance = new Foo();';
6*082815dcSEvan Bacon    expect(findNewInstanceCodeBlock(contents, 'Foo', 'java')).toEqual({
7*082815dcSEvan Bacon      start: 21,
8*082815dcSEvan Bacon      end: 29,
9*082815dcSEvan Bacon      code: 'new Foo()',
10*082815dcSEvan Bacon    });
11*082815dcSEvan Bacon  });
12*082815dcSEvan Bacon
13*082815dcSEvan Bacon  it('should support classic new instance - kotlin', () => {
14*082815dcSEvan Bacon    const contents = 'val instance = Foo()';
15*082815dcSEvan Bacon    expect(findNewInstanceCodeBlock(contents, 'Foo', 'kt')).toEqual({
16*082815dcSEvan Bacon      start: 15,
17*082815dcSEvan Bacon      end: 19,
18*082815dcSEvan Bacon      code: 'Foo()',
19*082815dcSEvan Bacon    });
20*082815dcSEvan Bacon  });
21*082815dcSEvan Bacon
22*082815dcSEvan Bacon  it('should support anonymous class new instance - java', () => {
23*082815dcSEvan Bacon    const contents = [
24*082815dcSEvan Bacon      'final Runnable runnable = new Runnable() {',
25*082815dcSEvan Bacon      '  @Override',
26*082815dcSEvan Bacon      '  public void run() {',
27*082815dcSEvan Bacon      '    Log.i(TAG, "runnable");',
28*082815dcSEvan Bacon      '  }',
29*082815dcSEvan Bacon      '};',
30*082815dcSEvan Bacon    ].join('\n');
31*082815dcSEvan Bacon    expect(findNewInstanceCodeBlock(contents, 'Runnable', 'java')).toEqual({
32*082815dcSEvan Bacon      start: 26,
33*082815dcSEvan Bacon      end: 109,
34*082815dcSEvan Bacon      code: [
35*082815dcSEvan Bacon        'new Runnable() {',
36*082815dcSEvan Bacon        '  @Override',
37*082815dcSEvan Bacon        '  public void run() {',
38*082815dcSEvan Bacon        '    Log.i(TAG, "runnable");',
39*082815dcSEvan Bacon        '  }',
40*082815dcSEvan Bacon        '}',
41*082815dcSEvan Bacon      ].join('\n'),
42*082815dcSEvan Bacon    });
43*082815dcSEvan Bacon  });
44*082815dcSEvan Bacon
45*082815dcSEvan Bacon  it('should support anonymous class new instance - kotlin', () => {
46*082815dcSEvan Bacon    const contents = [
47*082815dcSEvan Bacon      'val runnable = object : Runnable() {',
48*082815dcSEvan Bacon      '  override fun run() {',
49*082815dcSEvan Bacon      '    Log.i(TAG, "runnable")',
50*082815dcSEvan Bacon      '  }',
51*082815dcSEvan Bacon      '}',
52*082815dcSEvan Bacon    ].join('\n');
53*082815dcSEvan Bacon    expect(findNewInstanceCodeBlock(contents, 'Runnable', 'kt')).toEqual({
54*082815dcSEvan Bacon      start: 15,
55*082815dcSEvan Bacon      end: 91,
56*082815dcSEvan Bacon      code: [
57*082815dcSEvan Bacon        'object : Runnable() {',
58*082815dcSEvan Bacon        '  override fun run() {',
59*082815dcSEvan Bacon        '    Log.i(TAG, "runnable")',
60*082815dcSEvan Bacon        '  }',
61*082815dcSEvan Bacon        '}',
62*082815dcSEvan Bacon      ].join('\n'),
63*082815dcSEvan Bacon    });
64*082815dcSEvan Bacon  });
65*082815dcSEvan Bacon
66*082815dcSEvan Bacon  it('should return null if not found', () => {
67*082815dcSEvan Bacon    const contents = 'final Foo instance = new Foo();';
68*082815dcSEvan Bacon    expect(findNewInstanceCodeBlock(contents, 'Bar', 'java')).toBe(null);
69*082815dcSEvan Bacon  });
70*082815dcSEvan Bacon});
71*082815dcSEvan Bacon
72*082815dcSEvan Bacondescribe(appendContentsInsideDeclarationBlock, () => {
73*082815dcSEvan Bacon  it('should support class declaration', () => {
74*082815dcSEvan Bacon    const contents = `
75*082815dcSEvan Baconpublic class App {
76*082815dcSEvan Bacon  public static void main(String[] args) {
77*082815dcSEvan Bacon    System.out.println("Hello App!");
78*082815dcSEvan Bacon  }
79*082815dcSEvan Bacon}`;
80*082815dcSEvan Bacon
81*082815dcSEvan Bacon    const expectContents = `
82*082815dcSEvan Baconpublic class App {
83*082815dcSEvan Bacon  public static void main(String[] args) {
84*082815dcSEvan Bacon    System.out.println("Hello App!");
85*082815dcSEvan Bacon  }
86*082815dcSEvan Bacon
87*082815dcSEvan Bacon  public void foo() {
88*082815dcSEvan Bacon    System.out.println("Hello foo!");
89*082815dcSEvan Bacon  }
90*082815dcSEvan Bacon}`;
91*082815dcSEvan Bacon
92*082815dcSEvan Bacon    expect(
93*082815dcSEvan Bacon      appendContentsInsideDeclarationBlock(
94*082815dcSEvan Bacon        contents,
95*082815dcSEvan Bacon        'public class App',
96*082815dcSEvan Bacon        `
97*082815dcSEvan Bacon  public void foo() {
98*082815dcSEvan Bacon    System.out.println("Hello foo!");
99*082815dcSEvan Bacon  }\n`
100*082815dcSEvan Bacon      )
101*082815dcSEvan Bacon    ).toEqual(expectContents);
102*082815dcSEvan Bacon  });
103*082815dcSEvan Bacon
104*082815dcSEvan Bacon  it('should support method declaration', () => {
105*082815dcSEvan Bacon    const contents = `
106*082815dcSEvan Baconpublic class App {
107*082815dcSEvan Bacon  public static void main(String[] args) {
108*082815dcSEvan Bacon    System.out.println("Hello App!");
109*082815dcSEvan Bacon  }
110*082815dcSEvan Bacon}`;
111*082815dcSEvan Bacon
112*082815dcSEvan Bacon    const expectContents = `
113*082815dcSEvan Baconpublic class App {
114*082815dcSEvan Bacon  public static void main(String[] args) {
115*082815dcSEvan Bacon    System.out.println("Hello App!");
116*082815dcSEvan Bacon    System.out.println("Hello from generated code.");
117*082815dcSEvan Bacon  }
118*082815dcSEvan Bacon}`;
119*082815dcSEvan Bacon
120*082815dcSEvan Bacon    expect(
121*082815dcSEvan Bacon      appendContentsInsideDeclarationBlock(
122*082815dcSEvan Bacon        contents,
123*082815dcSEvan Bacon        'public static void main',
124*082815dcSEvan Bacon        '  System.out.println("Hello from generated code.");\n  '
125*082815dcSEvan Bacon      )
126*082815dcSEvan Bacon    ).toEqual(expectContents);
127*082815dcSEvan Bacon  });
128*082815dcSEvan Bacon});
129