/*
 * Copyright 2000-2010 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.theoryinpractice.testng.referenceContributor;

import com.intellij.openapi.application.PluginPathManager;
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ui.UIUtil;
import org.testng.annotations.*;

/**
 * User: anna
 * Date: Sep 3, 2010
 */
@Test
public class TestNGDataProviderTest extends LightCodeInsightFixtureTestCase {
  @BeforeMethod
  @Override
  protected void setUp() throws Exception {
    UIUtil.invokeAndWaitIfNeeded(new Runnable() {
      @Override
      public void run() {
        try {
          TestNGDataProviderTest.super.setUp();
        }
        catch (Exception e) {
          throw new RuntimeException(e);
        }
      }
    });
  }

  @AfterMethod
  @Override
  protected void tearDown() throws Exception {
    UIUtil.invokeAndWaitIfNeeded(new Runnable() {
      @Override
      public void run() {
        try {
          TestNGDataProviderTest.super.tearDown();
        }
        catch (Exception e) {
          throw new RuntimeException(e);
        }
      }
    });
  }

  @DataProvider
  public Object[][] data() {
    return new Object[][]{
       new Object[]{"private", ArrayUtil.EMPTY_STRING_ARRAY},
       new Object[]{"privateinsuper", ArrayUtil.EMPTY_STRING_ARRAY},
       new Object[]{"protectedinsuper", new String[]{"data"}},
       new Object[]{"privateindataproviderclass", ArrayUtil.EMPTY_STRING_ARRAY},
    };
  }

  public void testNothing(){}

  @Test(dataProvider = "data")
  public void test(final String path, final String... results) throws Throwable {
    UIUtil.invokeAndWaitIfNeeded(new Runnable() {
      @Override
      public void run() {
        try {
          myFixture.addClass("package org.testng.annotations; public @interface DataProvider {}");
          myFixture.addClass("package org.testng.annotations; public @interface Test {}");
          myFixture.testCompletionVariants(path + "provider.java", results);
        }
        catch (Exception e) {
          throw new RuntimeException(e);
        }
      }
    });
  }

  @Override
  protected String getBasePath() {
    return PluginPathManager.getPluginHomePathRelative("testng") + "/testData/references";
  }


}

@@ -1776,25 +1776,24 @@
 %5B%5D%5B%5D%7B%0A      
- 
 new Object%5B%5D
@@ -1808,40 +1808,31 @@
 e%22, 
-ArrayUtil.EMPTY_STRING_ARRAY
+new String%5B%5D%7B%22data%22%7D
 %7D,%0A
- 
     
@@ -1893,33 +1893,32 @@
 G_ARRAY%7D,%0A      
- 
 new Object%5B%5D%7B%22pr
@@ -1959,25 +1959,24 @@
 a%22%7D%7D,%0A      
- 
 new Object%5B%5D
@@ -2010,36 +2010,28 @@
 s%22, 
-ArrayUtil.EMPTY_STRING_ARRAY
+new String%5B%5D%7B%22data%22%7D
 %7D,%0A 

convert testng -> junit