Skip to content

Commit 5a921fb

Browse files
author
bohar
committed
[xmlCompletionTesting] #92 - Added testing for source_model Xml attribute and tag
1 parent 7085982 commit 5a921fb

File tree

7 files changed

+307
-0
lines changed

7 files changed

+307
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.completion.xml;
6+
7+
import com.intellij.testFramework.fixtures.BasePlatformTestCase;
8+
9+
import java.util.Arrays;
10+
import java.util.List;
11+
12+
abstract public class CompletionLightJavaCodeInsightFixtureTestCase extends BasePlatformTestCase {
13+
14+
public void assertCompletionContains(String filePath, String... lookupStrings) {
15+
myFixture.configureByFile(filePath);
16+
myFixture.completeBasic();
17+
18+
checkContainsCompletion(lookupStrings);
19+
}
20+
21+
protected void assertCompletionMuchWithFilePositiveCase(
22+
String positiveFilePath,
23+
String... lookupStrings
24+
) {
25+
myFixture.configureByFile(positiveFilePath);
26+
myFixture.completeBasic();
27+
28+
String messageEmptyLookup = "Failed that completion contains `%s` for file " + positiveFilePath;
29+
String messageCompletionContains = "Failed that completion contains `%s` in `%s` for file " + positiveFilePath;
30+
31+
checkContainsCompletion(lookupStrings, messageEmptyLookup, messageCompletionContains);
32+
}
33+
34+
protected void assertCompletionMuchWithFileNegativeCase(
35+
String negativeFilePath,
36+
String negativeFileText,
37+
String... lookupStrings
38+
) {
39+
myFixture.configureByText(negativeFilePath, negativeFileText);
40+
myFixture.completeBasic();
41+
42+
String messageCompletionNotContains = "Failed that completion not contains `%s` in `%s` for file "
43+
+ negativeFilePath;
44+
45+
checkNotContainsCompletion(lookupStrings, messageCompletionNotContains);
46+
}
47+
48+
protected void checkContainsCompletion(String[] lookupStrings) {
49+
String defaultMessageEmptyLookup = "Failed that completion contains `%s`";
50+
String defaultMessageCompletionContains = "Failed that completion contains `%s` in `%s`";
51+
52+
checkContainsCompletion(lookupStrings, defaultMessageEmptyLookup, defaultMessageCompletionContains);
53+
}
54+
55+
protected void checkContainsCompletion(
56+
String[] lookupStrings,
57+
String messageEmptyLookup,
58+
String messageCompletionContains
59+
) {
60+
if (lookupStrings.length == 0) {
61+
fail("No lookup element given");
62+
}
63+
List<String> lookupElements = myFixture.getLookupElementStrings();
64+
65+
if (null == lookupElements || lookupElements.size() == 0) {
66+
fail(String.format(messageEmptyLookup, Arrays.toString(lookupStrings)));
67+
}
68+
69+
for (String s : lookupStrings) {
70+
if (!lookupElements.contains(s)) {
71+
fail(String.format(messageCompletionContains, s, lookupElements.toString()));
72+
}
73+
}
74+
}
75+
76+
protected void checkNotContainsCompletion(String[] lookupStrings) {
77+
String defaultMessageCompletionNotContains = "Failed that completion not contains `%s` in `%s`";
78+
79+
checkNotContainsCompletion(lookupStrings, defaultMessageCompletionNotContains);
80+
}
81+
82+
protected void checkNotContainsCompletion(String[] lookupStrings, String messageCompletionNotContains) {
83+
if (lookupStrings.length == 0) {
84+
fail("No lookup element given");
85+
}
86+
List<String> lookupElements = myFixture.getLookupElementStrings();
87+
88+
if (null != lookupElements) {
89+
for (String s : lookupStrings) {
90+
if (lookupElements.contains(s)) {
91+
fail(String.format(messageCompletionNotContains, s, lookupElements.toString()));
92+
}
93+
}
94+
}
95+
}
96+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.completion.xml;
6+
7+
import com.intellij.openapi.vfs.VfsUtil;
8+
import com.intellij.openapi.vfs.VirtualFile;
9+
import com.magento.idea.magento2plugin.magento.files.ModuleSystemXml;
10+
import com.magento.idea.magento2plugin.magento.files.ModuleWidgetXml;
11+
12+
import java.io.File;
13+
import java.io.IOException;
14+
15+
public class SourceModelXmlCompletionRegistrarTest extends CompletionLightJavaCodeInsightFixtureTestCase {
16+
17+
private static VirtualFile systemXmlVirtualFile;
18+
private static VirtualFile widgetXmlVirtualFile;
19+
private static final String fixturesFolderPath;
20+
private static final String classesSourceFile;
21+
private static final String multipleCompletionFolder;
22+
private static final String[] singleLookupStringsCheck;
23+
private static final String[] multipleLookupStringsCheck;
24+
25+
static {
26+
multipleCompletionFolder = "multipleCompletion";
27+
fixturesFolderPath = "tests/com/magento/idea/magento2plugin/completion/xml/fixtures";
28+
classesSourceFile = "classes.php";
29+
singleLookupStringsCheck = new String[]{
30+
"Magento\\Config\\Model\\Config\\Source\\Yesno"
31+
};
32+
multipleLookupStringsCheck = new String[]{
33+
"Magento\\Backend\\Model\\Source\\Roles",
34+
"Magento\\Customer\\Model\\Source\\Roles",
35+
"Magento\\B2b\\Model\\Source\\Roles"
36+
};
37+
}
38+
39+
@Override
40+
protected void setUp() throws Exception {
41+
super.setUp();
42+
myFixture.copyFileToProject(classesSourceFile);
43+
systemXmlVirtualFile = myFixture.copyFileToProject(ModuleSystemXml.FILE_NAME);
44+
widgetXmlVirtualFile = myFixture.copyFileToProject(ModuleWidgetXml.FILE_NAME);
45+
}
46+
47+
@Override
48+
protected String getTestDataPath() {
49+
return fixturesFolderPath;
50+
}
51+
52+
public void testThatSourceModelXmlElementMustProvideCompletion() {
53+
assertCompletionContains(ModuleSystemXml.FILE_NAME, singleLookupStringsCheck);
54+
}
55+
56+
public void testThatSourceModelXmlElementMustProvideMultipleCompletion() {
57+
String multipleCompletionFile = String.join(
58+
File.separator,
59+
new String[]{multipleCompletionFolder, ModuleSystemXml.FILE_NAME}
60+
);
61+
assertCompletionContains(multipleCompletionFile, multipleLookupStringsCheck);
62+
}
63+
64+
public void testThatSourceModelXmlElementMuchWithFilePositiveCase() {
65+
assertCompletionMuchWithFilePositiveCase(ModuleSystemXml.FILE_NAME, singleLookupStringsCheck);
66+
}
67+
68+
public void testThatSourceModelXmlElementMuchWithFileNegativeCase() throws IOException {
69+
String negativeFilePath = "not" + ModuleSystemXml.FILE_NAME;
70+
71+
assertCompletionMuchWithFileNegativeCase(
72+
negativeFilePath,
73+
VfsUtil.loadText(systemXmlVirtualFile),
74+
singleLookupStringsCheck
75+
);
76+
}
77+
78+
public void testThatSourceModelXmlAttributeMustProvideCompletion() {
79+
assertCompletionContains(ModuleWidgetXml.FILE_NAME, singleLookupStringsCheck);
80+
}
81+
82+
public void testThatSourceModelXmlAttributeMustProvideMultipleCompletion() {
83+
String multipleCompletionFile = String.join(
84+
File.separator,
85+
new String[]{multipleCompletionFolder, ModuleWidgetXml.FILE_NAME}
86+
);
87+
88+
assertCompletionContains(multipleCompletionFile, multipleLookupStringsCheck);
89+
}
90+
91+
public void testThatSourceModelXmlAttributeMuchWithFilePositiveCase() {
92+
assertCompletionMuchWithFilePositiveCase(ModuleWidgetXml.FILE_NAME, singleLookupStringsCheck);
93+
}
94+
95+
public void testThatSourceModelXmlAttributeMuchWithFileNegativeCase() throws IOException {
96+
String negativeFilePath = "not" + ModuleWidgetXml.FILE_NAME;
97+
98+
assertCompletionMuchWithFileNegativeCase(
99+
negativeFilePath,
100+
VfsUtil.loadText(widgetXmlVirtualFile),
101+
singleLookupStringsCheck
102+
);
103+
}
104+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
namespace Magento\Framework\Option
3+
{
4+
interface ArrayInterface {}
5+
}
6+
7+
namespace Magento\Config\Model\Config\Source
8+
{
9+
use Magento\Framework\Option\ArrayInterface;
10+
class Yesno implements ArrayInterface {}
11+
}
12+
13+
namespace Magento\Backend\Model\Source
14+
{
15+
use Magento\Framework\Option\ArrayInterface;
16+
class Roles implements ArrayInterface {}
17+
}
18+
19+
namespace Magento\Customer\Model\Source
20+
{
21+
use Magento\Framework\Option\ArrayInterface;
22+
class Roles implements ArrayInterface {}
23+
}
24+
25+
namespace Magento\B2b\Model\Source
26+
{
27+
use Magento\Framework\Option\ArrayInterface;
28+
class Roles implements ArrayInterface {}
29+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
10+
<system>
11+
<section id="catalog">
12+
<group id="test">
13+
<field id="test">
14+
<label>Test suit to check completion for source_model tag</label>
15+
<source_model>Roles<caret></source_model>
16+
</field>
17+
</group>
18+
</section>
19+
</system>
20+
</config>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
10+
<widget id="test">
11+
<label translate="true">Test Widget</label>
12+
<description translate="true">Test Widget</description>
13+
<parameters>
14+
<parameter name="test_yesno" xsi:type="select" source_model="Roles<caret>">
15+
<label translate="true">Test Boolean field</label>
16+
</parameter>
17+
</parameters>
18+
</widget>
19+
</widgets>
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
10+
<system>
11+
<section id="catalog">
12+
<group id="test">
13+
<field id="test">
14+
<label>Test suit to check completion for source_model tag</label>
15+
<source_model>Yesno<caret></source_model>
16+
</field>
17+
</group>
18+
</section>
19+
</system>
20+
</config>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
10+
<widget id="test">
11+
<label translate="true">Test Widget</label>
12+
<description translate="true">Test Widget</description>
13+
<parameters>
14+
<parameter name="test_yesno" xsi:type="select" source_model="Yesno<caret>">
15+
<label translate="true">Test Boolean field</label>
16+
</parameter>
17+
</parameters>
18+
</widget>
19+
</widgets>

0 commit comments

Comments
 (0)